JDBC PreparedStatement中的列索引错误

时间:2015-11-16 14:37:51

标签: java oracle jdbc

如果我执行:

Connection conn = null;
PreparedStatement LoginStatement = null;
ResultSet LoginResult = null;
UpdateData();
String LoginQuery = "SELECT * FROM USERS WHERE USER_NAME = ? AND PASSWORD = ? ";
try{
    System.out.println(LoginQuery);
    conn = DatabaseConnection.getDBCon();
    LoginStatement = conn.prepareStatement(LoginQuery);
    LoginStatement.setString(1, "ett");
    LoginStatement.setString(2, "ett");
    LoginResult = LoginStatement.executeQuery(LoginQuery);

我收到异常:63000 - ORA-03115:不支持的网络数据类型或表示

如果我改变了吗?到'?'

Connection conn = null;
PreparedStatement LoginStatement = null;
ResultSet LoginResult = null;
UpdateData();
String LoginQuery = "SELECT * FROM USERS WHERE USER_NAME = '?' AND PASSWORD = '?' ";
try{
    System.out.println(LoginQuery);
    conn = DatabaseConnection.getDBCon();
    LoginStatement = conn.prepareStatement(LoginQuery);
    LoginStatement.setString(1, "ett");
    LoginStatement.setString(2, "ett");
    LoginResult = LoginStatement.executeQuery(LoginQuery);

我得到了

  

例外:99999 - UngültigerSpaltenindex

这基本上意味着错误的列索引。

这不是真的,我设置了索引1和2,并且有2个占位符,索引以1开头....任何想法?

5 个答案:

答案 0 :(得分:3)

简单地:

array_reduce

必须是

executeQuery(LoginQuery); // Statement

有点可怕的API设计和错误消息。

另外,PASSWORD是保留字,请尝试

executeQuery(); // PreparedStatement

答案 1 :(得分:1)

将您的代码更改为

LoginResult = LoginStatement.executeQuery();

您可以在此处查看有关第一个例外的更多信息java.sql.SQLException: ORA-03115: unsupported network datatype or representation

答案 2 :(得分:0)

使用executeQuery()代替executeQuery(LoginQuery);

无需将?更改为'?'

答案 3 :(得分:0)

无法在PreparedStatement或CallableStatement上调用

executeQuery(String query)方法。使用executeQuery()

答案 4 :(得分:0)

请注意以下呼叫之间的区别:
// PreparedStatement的
PreparedStatement.executeQuery(); //通常用于存储过程

//声明
bool res = Statement.execute(String sql);

ResultSet rs = Statement.executeQuery(String sql);