jdbc查询数据库报:java.sql.SQLException: ORA-01006: 绑定变量不存在

错误信息如下:java.sql.SQLException:ORA-01006:绑定变量不存在atoracle.jdbc.dbaccess.DBError.throwSql... 错误信息如下:
java.sql.SQLException: ORA-01006: 绑定变量不存在
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:208)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:543)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1451)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteDescribe(TTC7Protocol.java:651)
at oracle.jdbc.driver.OracleStatement.doExecuteQuery(OracleStatement.java:2117)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2331)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:422)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:366)

代码如下:
/**
* 按条件查询
* @param um
* @return
*/
public ArrayList getUserByCondithion(UserModel um){
ArrayList list = new ArrayList();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try{
conn = JdbcConn.getConn();
String sql = "select uuid,name,age from tbl_user where 1=1";
pstmt = conn.prepareStatement(sql);
sql = getSql(sql, um);
setSqlValue(pstmt,um);
rs = pstmt.executeQuery();
list = this.rs2Model(rs);
return list;
}catch(Exception err){
err.printStackTrace();
}finally{
try {
rs.close();
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return null;
}

/**
* 按条件查询sql
* @param sql
* @param um
* @return
*/
private String getSql(String sql, UserModel um){
if(um.getUuid() != null && um.getUuid().length() > 0){
sql += " and uuid=? ";
}
if(um.getName() != null && um.getName().length() > 0){
sql += " and name=? ";
}
if(um.getAge() != null && um.getAge().length() > 0){
sql += " and age=? ";
}
return sql;
}

/**
* 设置sql位置
* @param pstmt
* @param um
* @throws SQLException
* @throws SQLException
*/
private void setSqlValue(PreparedStatement pstmt,UserModel um) throws SQLException{
int i = 1;
if(um.getUuid() != null && um.getUuid().trim().length() > 0){
pstmt.setString(i, um.getUuid());
i++;
}
if(um.getName() != null && um.getName().trim().length() > 0){
pstmt.setString(i, um.getName());
i++;
}
if(um.getAge() != null && um.getAge().trim().length() > 0){
pstmt.setString(i, um.getAge());
i++;
}

}

查询总报“绑定变量不存在”,我的建表语句是:
-- Create table
create table TBL_USER
(
UUID VARCHAR2(10),
NAME VARCHAR2(10),
AGE VARCHAR2(20)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64
next 1
minextents 1
maxextents unlimited
);

请高手看看这个错是什么原因造成的,非常感谢!
展开
 我来答
micro0369
2012-03-14 · TA获得超过1.2万个赞
知道大有可为答主
回答量:9250
采纳率:85%
帮助的人:4088万
展开全部
胡乱猜测一下。

int i = 1;
if(um.getUuid() != null && um.getUuid().trim().length() > 0){
pstmt.setString(i, um.getUuid());
i++;
}

java中所有这种类似数组的东西,都应该是从0开始,而不是从1开始。
所以 int i = 0;
更多追问追答
追问
这是java连接数据库,数据库的列索引是从1开始的,所以这里设为1,除此之外还有没有别的原因?我怎么都没看出来是哪儿错,可是就是老报错,谢谢!
追答
“数据库的列索引是从1开始的”,这个结论是哪儿来的?

你按照我说的试了吗 ? 试试看!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式