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

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中你必须知道你先要查询或操作那些字段。

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值