1.占位符的使用问题,?占位符不可用来设置字段名,表名
博主今天被一个问题给困扰半天 就是写一个方法 传入一个这样的SQL语句 String sql = "select * from user where ?=? "; 然后用
ps = conn.prepareStatement(sql);
ps.setString(1,"1");
ps.setString(2,"1");
result = ps.executeQuery();
来控制 where后边两个?的值
让他既可以查询所有的数据 String sql = "select * from user where 1=1 "; (这样是可以查出所有条数据的,我真傻,因为这跟等号两边是啥类型无所谓 ,只要相等就行了 )
同时又可以 根据用户的输入 去精确查询 如: String sql = "select * from user where name=‘刘德华’ ";
在jdbc中的sql语句"select * from user where ?=? "这样写的时候 ,控制台一条数据都查询不出来,究其原因就是 ?不能作为字段名和表名的占位符
PreparedStatement会为占位符?的两边自动加上单引号,这样会使得SQL语句不可执行,比如使用将表名设置为占位符,数据库执行sql语句时,表名会用单引号引起来,这样会使得sql语句执行出错或者查询不出数据。但这句代码在sql中执行不会报错,但是查询没有结果
** 所以PreparedStatement只能用来为可以加引号’的参数(如参数值)设置动态参数,即用?占位,不可用于表名、字段名等,不然怎么生成预编译的语句对象呢~ 所以sql中你必须知道你先要查询或操作那些字段。