Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java &引用;ORA-00933:SQL命令未正确结束“;调用createJDBCTable()时_Java_Oracle_Apache Spark - Fatal编程技术网

Java &引用;ORA-00933:SQL命令未正确结束“;调用createJDBCTable()时

Java &引用;ORA-00933:SQL命令未正确结束“;调用createJDBCTable()时,java,oracle,apache-spark,Java,Oracle,Apache Spark,当我试图在Spark中使用DataFrame调用createJDBCTable()方法时,我遇到了这个异常 我正在使用的代码: private static final String CONNECTION_URL = "jdbc:oracle:thin:user/password//host:port/sid"; private static final String TABLE_NAME = "TESTTABLE"; DataFrame people = sqlContext.createD

当我试图在Spark中使用
DataFrame
调用
createJDBCTable()
方法时,我遇到了这个异常

我正在使用的代码:

private static final String CONNECTION_URL = "jdbc:oracle:thin:user/password//host:port/sid";
private static final String TABLE_NAME = "TESTTABLE";

DataFrame people = sqlContext.createDataFrame(rows, Person.class);
people.createJDBCTable(CONNECTION_URL, TABLE_NAME, true);
例外情况:

java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399)
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1059)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:522)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257)
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:587)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:225)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:53)
    at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:943)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1150)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:4798)
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:4875)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1361)
    at org.apache.spark.sql.DataFrame.createJDBCTable(DataFrame.scala:1266)
    at com.org.spark.sample.SampleView.main(SampleView.java:93)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:480)

请帮助我解决此问题。

这是Dataframe.scala中的代码

try { 

   if (allowExisting) { 

      val sql = s"DROP TABLE IF EXISTS $table" 

      conn.prepareStatement(sql).executeUpdate() 
不幸的是,此解决方案不适用于Oracle

你可以试着复制它

  • 登录Oracle

  • 运行
    删除存在的表TESTTABLE
    (不应工作,但会产生相同的错误)

如果您能确认这一点,我将向开发人员报告(我没有在我附近安装oracle来运行快速测试)

解决方案:单独创建表并使用InsertIntoJDBC函数。

仅供参考

insertIntoJDBC工作正常。在调用此调用之前,我使用与dataframe相似的模式创建了oracle表。所有行都已正确插入

但同一数据帧的createJDBCTable失败,出现以下错误。在本例中,我没有在数据库中创建任何表


java.sql.SQLSyntaxErrorException:ORA-00933:sql命令未正确结束

您应该显示您的命令。请检查代码。我已经更新了,
DataFrame.createJDBCTable()
?你能打印发送到服务器的真正的SQL语句吗?不是Oracle的家伙,但是你的连接字符串在我看来是不可靠的。该特定的连接字符串是否在其他地方工作,在与Spark无关的代码中工作?该方法将创建一个表并插入文本文件中的数据