您的位置:首页 > 数据库 > MySQL

关于mySQL带参数的查询出现错误的解决方案

2012-10-12 17:21 525 查看
/**

* 通过区县Id获取街道列表

*/

public List selectJdListByQxId(int qxId) {

openConn();

List reList = new ArrayList();

String sql = " SELECT jdid,jd,qxid FROM tbl_jd WHERE qxid = ? ";

try {

pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, qxId);

rs = pstmt.executeQuery(sql);

while(rs.next()){

JD jd = new JD();

jd.setJdid(rs.getInt("jdid"));

jd.setJd(rs.getString("jd"));

jd.setQxid(rs.getInt("qxid"));

reList.add(jd);

}

} catch (SQLException e) {

e.printStackTrace();

}

return reList;

}

如上代码,运行到rs = pstmt.executeQuery(sql);这一行的时候结果为空,然后程序直接跳过while()代码,服务器抛出异常

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1

经检查,将SELECT jdid,jd,qxid FROM tbl_jd WHERE qxid = 1发现完全没有问题,但是在程序中会出现问题,这是为什么呢?

请看我们的的异常信息“to use near '?' at line 1”是“?”周围有错误,这说明在数据库查询的时候并没有转化成我们要的qxId的值,而是一个活生生的“?”,

说明问题出现在 rs = pstmt.executeQuery(sql);这句话,因为这是我们最后的数程序出错的地方了,因为这句话里面的sql == " SELECT jdid,jd,qxid FROM tbl_jd WHERE qxid =?"这句话,在pstmt.setInt(1, qxId)这行代码中,我们改变的不是整体的sql,而是一个问号,也就是说这儿的sql没有被改变,当我们在 rs = pstmt.executeQuery(sql)中又加入sql,这个sql是带问号而且问号没有被改变的sql,所以当然数据库会认为你写了一个非法字符,所以直接这样写 rs
= pstmt.executeQuery();问题就解决了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐