[英]Wrong column index in JDBC PreparedStatement
如果我执行:
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开头。
只是:
executeQuery(LoginQuery); // Statement
一定是
executeQuery(); // PreparedStatement
有点可怕的API设计和错误消息。
另外,因为PASSWORD是保留字,请尝试
"SELECT * FROM USERS WHERE USER_NAME = ? AND \"PASSWORD\" = ? "
将您的代码更改为
LoginResult = LoginStatement.executeQuery();
您可以在此处查看有关第一个异常的更多信息java.sql.SQLException:ORA-03115:不支持的网络数据类型或表示形式
使用executeQuery()代替executeQuery(LoginQuery)
;
无需更改?
到'?'
无法在PreparedStatement或CallableStatement上调用executeQuery(String query)
方法。 使用executeQuery()
请注意以下调用之间的区别:
// PreparedStatement
PreparedStatement.executeQuery();
//通常用于存储过程
//声明
bool res = Statement.execute(String sql);
ResultSet rs = Statement.executeQuery(String sql);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.