(“”);
con = (“jdbc:mysql://localhost:3306/selldb”,“root”,“root”);
String sql = “select sum(?) a,sum(?) b from sell”;
ops = (sql);
(1,“sellnumbers”);
(2,“sellmoney”);
rs = ();
(rs);
();
int a = (“a”);
int b = (“b”);
(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中你必须知道你先要查询或操作那些字段。