当我试图将一批行插入到现有表时,我会遇到以下异常
ORA-00942:表或视图不存在
我可以确认该表存在于db中,并且可以使用向该表插入数据。但是,当我试图使用java中的preared语句插入行时,它的抛出表不存在错误。
请在下面找到错误的堆栈跟踪
java.sql.SQLException: ORA-00942: table or view does not exist
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1889)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1093)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2047)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1940)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout>>(OracleStatement.java:2709)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:589)
at quotecopy.DbConnection.insertIntoDestinationDb(DbConnection.java:591)
at quotecopy.QuoteCopier.main(QuoteCopier.java:72) 有人能提出这个错误的原因吗?
更新:问题解决
我的数据库连接属性或表或视图名称都没有问题。这个问题的解决办法很奇怪。我正在尝试的一个列是Clob类型的。由于我以前在处理oracle db中的clob数据时遇到了很多困难,所以尝试用一个临时字符串setter替换clob setter,执行相同的代码,没有任何问题,所有行都被正确插入!
ie.peparedstatement.setClob(columnIndex,clob)
被用
peparedstatement.setString(columnIndex,"String")
错误表或视图存在的原因是在插入clob数据时抛出错误。你们谁能解释一下吗?
非常感谢你的回答和评论。
发布于 2012-03-15 15:56:26
我发现了如何在不使用JDBC的setString()方法的情况下解决这个问题,后者将数据限制在4K。
您需要做的是使用preparedStatement.setClob(int parameterIndex,读取器)。至少这是对我有用的。认为Oracle驱动程序将数据转换为字符流插入,似乎不是。或者某种特定的导致错误的东西。
使用characterStream似乎对我有用。我正在从一个数据库读取表,并使用jdbc将表写入另一个数据库。我得到的表格没有找到错误,就像上面提到的那样。所以我就是这样解决问题的:
case Types.CLOB: //Using a switch statement for all columns, this is for CLOB columns
Clob clobData = resultSet.getClob(columnIndex); // The source db
if (clobData != null) {
preparedStatement.setClob(columnIndex, clobData.getCharacterStream());
} else {
preparedStatement.setClob(columnIndex, clobData);
}
clobData = null;
return;现在一切都好了。
https://stackoverflow.com/questions/6561650
复制相似问题