用Select*from where like。Java

在Java语句中,使用SECLET*FROM 图书表 WHERE 作者 LIKE ‘%刘%’
的语句中,引号内的那一部分能不能是变量呢,我想找与个外界输入的字符串相同的,语句该怎么写呢
QQ1325489414,高手有可能的话能不能在线谈。。。
最新回答
思檀郎

2024-06-21 04:42:00

假如你要接受用户的输入,让他可以查询一些数据,支持模糊查找的,所以他输入一些字符,你要把包含这些字符的返回,所以用户的输入当作一个函数的参数被传入,你用String userInput接收,例如用户输入"刘"
public List<User> searchUsers(String userInput) {
... 获得Connection conn
PreparedStatement pstmt = conn.prepareStatement("SECLET*FROM 图书表 WHERE 作者 LIKE ?");
pstmt .setString(1,"%" + userInput + "%");
获得结果集,返回。
}
注意通过pstmt .setString和直接把这个userInput写到SQL语句里的效果不一样,写到SQL语句里用户的输入就当成SQL语句的一部分了,用户的输入还能包含sql语句,虽然用户不这写,而且用户如果输入一些特殊的字符会把你的sql语句破坏掉,而pstmt .setString是不一样的,他是预编译的,会把 ? 留一个位置(占位)然后完全按照你输入的string进行匹配。你自己理解一下吧

楼上两位的很有可能造成SQL注入式攻击, 如果用户查找时这么输入
String strInput = "刘%' or 1=1 --"; 则执行后所有结果都将被查出来。

PreparedStatement 实例包含已编译的 SQL 语句。这就是使语句“准备好”。包含于 PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数。IN参数的值在 SQL 语句创建时未被指定。相反的,该语句为每个 IN 参数保留一个问号(“?”)作为占位符。每个问号的值必须在该语句执行之前,通过适当的setXXX 方法来提供。 由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement 对象。因此,多次执行的 SQL 语句经常创建为 PreparedStatement 对象,以提高效率。 作为 Statement 的子类,PreparedStatement 继承了 Statement 的所有功能。另外它还添加了一整套方法,用于设置发送给数据库以取代 IN 参数占位符的值。同时,三种方法 execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要参数。这些方法的 Statement 形式(接受 SQL 语句参数的形式)不应该用于 PreparedStatement 对象。
仙味萝莉

2024-06-21 15:39:22

String strInput = "刘";
String strSQL = "SECLET * FROM 图书表 WHERE 作者 LIKE '%" + strInput + "%'";
未央几寒

2024-06-21 14:28:30

肯定可以是变量的啦。。。不过我不懂java。。。懂asp,asp中就可以的嘛。。。

sql="SECLET*FROM 图书表 WHERE 作者 LIKE '%刘%'"

dim zuozhe
zhuozhe="作者"
sql="SECLET*FROM 图书表 WHERE "&zuozhe&" LIKE '%刘%'"