我是这样写的: String user_cd = "001"; String user_name = "chen"; String password = "chen"; int i = stmt.executeUpdate( "insert into orteus.user_mst (USER_CD,USER_NAME,PASSWORD,CREATED_DATE,MODIFY_COUNT) "+ "values ("+user_cd+","+user_name+","+password+"," +null+","+0+")"); } catch (Exception ex) { ex.printStackTrace(); }但是抛出异常: java.sql.SQLException: ORA-00984: ここでは列は使用できません。 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java) at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java) at oracle.jdbc.ttc7.Oall7.receive(Oall7.java) at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java) at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java) at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java) at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java) at oracle.jdbc.driver.OracleStatement.executeUpdate(OracleStatement.java) at dbAccess.main(dbAccess.java:59)
如果是null值,你拼写SQL的时候就不要插入那列了,就可以了 如果是当前时间你就用SYSDATE或者TO_date()方法转换字符串 insert into orteus.user_mst (USER_CD,USER_NAME,PASSWORD,CREATED_DATE,MODIFY_COUNT) values ("+user_cd+","+user_name+","+password+",sysdate,"+0+")
你先把sql打印出来到sql/plus去执行看看 有没问题?
照xmvigour说得做吧,记住调试是程序员必须熟练的技能。
我写的语句肯定没问题, 我用: ResultSet rset = stmt.executeQuery( "select * from ORTEUS.USER_MST"); 可以得到ResultSet,一点错误也没有,但是: String aaa = "test"; ResultSet rset = stmt.executeQuery("select * from ORTEUS.USER_MST where USER_CD = "+aaa); 就出错: java.sql.SQLException: ORA-00904: 列名が無効です。这是怎么回事?难道在stmt.executeQuery()方法里不能加参数吗?
String user_name = "chen";
String password = "chen";
int i = stmt.executeUpdate(
"insert into orteus.user_mst (USER_CD,USER_NAME,PASSWORD,CREATED_DATE,MODIFY_COUNT) "+
"values ("+user_cd+","+user_name+","+password+","
+null+","+0+")");
}
catch (Exception ex) {
ex.printStackTrace();
}但是抛出异常:
java.sql.SQLException: ORA-00984: ここでは列は使用できません。
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java) at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java) at oracle.jdbc.ttc7.Oall7.receive(Oall7.java) at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java) at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java) at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java) at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java) at oracle.jdbc.driver.OracleStatement.executeUpdate(OracleStatement.java) at dbAccess.main(dbAccess.java:59)
如果是当前时间你就用SYSDATE或者TO_date()方法转换字符串
insert into orteus.user_mst (USER_CD,USER_NAME,PASSWORD,CREATED_DATE,MODIFY_COUNT) values ("+user_cd+","+user_name+","+password+",sysdate,"+0+")
我用:
ResultSet rset = stmt.executeQuery(
"select * from ORTEUS.USER_MST");
可以得到ResultSet,一点错误也没有,但是:
String aaa = "test";
ResultSet rset = stmt.executeQuery("select * from ORTEUS.USER_MST where USER_CD = "+aaa);
就出错:
java.sql.SQLException: ORA-00904: 列名が無効です。这是怎么回事?难道在stmt.executeQuery()方法里不能加参数吗?
varchar2的话改成USER_CD = '"+aaa+"'");
为什么加了参数就不行 不试试在程序中拼出来的sql是不是对的
有时候一下子就是判断不了 zhaoxichao(小西) 说的没错
thank you !
好用了!