Java &引用;ORA-00933:SQL命令未正确结束“;调用createJDBCTable()时
当我试图在Spark中使用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
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
java.sql.SQLSyntaxErrorException:ORA-00933:sql命令未正确结束您应该显示您的命令。请检查代码。我已经更新了,
DataFrame.createJDBCTable()
?你能打印发送到服务器的真正的SQL语句吗?不是Oracle的家伙,但是你的连接字符串在我看来是不可靠的。该特定的连接字符串是否在其他地方工作,在与Spark无关的代码中工作?该方法将创建一个表并插入文本文件中的数据