JAVA连接数据库时,有些代码用不用加单引号

qq_33348101 2015-12-15 04:19:38
就是我们sql serve里查询时代码为
SELECt * FROM yourtable WHERE name LIKE '张' -- ---张字两边有单引号

在java里
String name="张";
sql="SELECT * from books WHERE name LIKE ? ";
pstmt=con.prepareStatement(sql);
pstmt.setString(1,name);


这样子运行的语句SQL语句会不会变成
SELECt * FROM yourtable WHERE name LIKE 张 ------双引号没了,语句失效?
...全文
1042 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 版主 2018-06-16
  • 打赏
  • 举报
回复
不需要猜测,直接用SQL profiler捕获程序运行时的SQL就行了 实践出真知
卖水果的net 版主 2018-06-16
  • 打赏
  • 举报
回复
sql="SELECT * from books WHERE name LIKE ? "; 只是一个占位符,楼主可以百度一下 “参数化” 。
SailorXing 2018-06-15
  • 打赏
  • 举报
回复
反正我在mysql查询日期的占位符两边加单引号是会报错,提示对应的参数索引不存在,删除就正常了。
Tiger_Zhao 2015-12-15
  • 打赏
  • 举报
回复
上面几位,这是通过对象模型操作,不是简单拼字符串,别说得那么肯定。
楼主自己去查java文档,pstmt.setString() 方法会不会自动加单引号。

我猜是会的。
既然有 setString(),那么应该有 setInt()、setDate() 之类对应不同的数据类型,应该会拼出正确的 SQL 来的。
wtujedp 2015-12-15
  • 打赏
  • 举报
回复
?号只是个占位符,你替换的内容输入是 张 那肯定是没有单引号的。 sql="SELECT * from books WHERE name LIKE ? "; 可以改成: sql="SELECT * from books WHERE name LIKE ‘?’ "; 就是你在JAVA里拼接SQL语句的时候,先加对单引号就行了。放在占位符的两边
Yole 2015-12-15
  • 打赏
  • 举报
回复

String name="张";
sql="SELECT * from books WHERE name LIKE '' "+name+"''";
        pstmt=con.prepareStatement(sql);
pstmt.setString(1,name);
Yole 2015-12-15
  • 打赏
  • 举报
回复

declare @name varchar(10)
set @name='张'

print('SELECT   *   FROM   yourtable  WHERE   name   LIKE    '''+@name+'''')
--结果
/*
SELECT   *   FROM   yourtable  WHERE   name   LIKE     '张'
*/

Yole 2015-12-15
  • 打赏
  • 举报
回复

print('SELECT   *   FROM   yourtable  WHERE   name   LIKE     ''张''')
--结果
/*
SELECT   *   FROM   yourtable  WHERE   name   LIKE     '张'
*/

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧