java-JDBC中?占位符的使用问题,?占位符不可用来设置字段名,表明等。

Class.forName(“com.mysql.jdbc.Driver”);
con = DriverManager.getConnection(“jdbc:mysql://localhost:3306/selldb”,“root”,“root”);
String sql = “select sum(?) a,sum(?) b from sell”;
ops = con.prepareStatement(sql);
ops.setString(1,“sellnumbers”);
ops.setString(2,“sellmoney”);

rs = ops.executeQuery();
System.out.println(rs);
rs.next();
int a = rs.getInt(“a”);
int b = rs.getInt(“b”);
System.out.println(a + “:” + b);
在如上代码中,结果集中查询出的数据总是0,一直没找出原因所在。
查询后才知道 PreparedStatement会为占位符?的两边自动加上单引号,这样会使得SQL语句不可执行,比如使用将表名设置为占位符,数据库执行sql语句时,表名会用单引号引起来,这样会使得sql语句执行出错或者查询不出数据。

用上面代码来说,如果将字段名sellnumbers,sellmoney使用占位符?代替,对于以上加粗代码来说,PreparedStatement会为占位符?的值(也就是sellnumbers和sellmoney)的两边自动加上单引号,sql语句中执行的代码将是这个样子:SELECT SUM(‘sellnumbers’) a,SUM(‘sellmoney’) b FROM sell;这句代码在sql中执行不会报错,但是查询的结果全部都是0.

**所以PreparedStatement只能用来为可以加引号’的参数(如参数值)设置动态参数,即用?占位,不可用于表名、字段名等,不然怎么生成预编译的语句对象呢~ 所以sql中你必须知道你先要查询或操作那些字段。

  • 11
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值