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

/**
 * 通过区县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();问题就解决了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值