用Select*from where like。Java

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Select*from where like。Java相关的知识,希望对你有一定的参考价值。

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

假如你要接受用户的输入,让他可以查询一些数据,支持模糊查找的,所以他输入一些字符,你要把包含这些字符的返回,所以用户的输入当作一个函数的参数被传入,你用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 对象。
参考技术A String strInput = "刘";
String strSQL = "SECLET * FROM 图书表 WHERE 作者 LIKE '%" + strInput + "%'";本回答被提问者和网友采纳
参考技术B 肯定可以是变量的啦。。。不过我不懂java。。。懂asp,asp中就可以的嘛。。。

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

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

sql语句

SQL常用命令使用方法:
(1) 数据记录筛选:
sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]"
sql="select * from 数据表 where 字段名 like ‘%字段值%‘ order by 字段名 [desc]"
sql="select top 10 * from 数据表 where 字段名 order by 字段名 [desc]"
sql="select * from 数据表 where 字段名 in (‘值1‘,‘值2‘,‘值3‘)"
sql="select * from 数据表 where 字段名 between 值1 and 值2"

(2) 更新数据记录:
sql="update 数据表 set 字段名=字段值 where 条件表达式"
sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式"

(3) 删除数据记录:
sql="delete from 数据表 where 条件表达式"
sql="delete from 数据表" (将数据表所有记录删除)

(4) 添加数据记录:
sql="insert into 数据表 (字段1,字段2,字段3 …) values (值1,值2,值3 …)"
sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表)

(5) 数据记录统计函数:
AVG(字段名) 得出一个表格栏平均值
COUNT(*&brvbar;字段名) 对数据行数的统计或对某一栏有值的数据行数统计
MAX(字段名) 取得一个表格栏最大的值
MIN(字段名) 取得一个表格栏最小的值
SUM(字段名) 把数据栏的值相加
引用以上函数的方法:
sql="select sum(字段名) as 别名 from 数据表 where 条件表达式"
set rs=conn.excute(sql)
用 rs("别名") 获取统的计值,其它函数运用同上。

(5) 数据表的建立和删除:
CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… )
例:CREATE TABLE tab01(name varchar(50),datetime default now())

DROP TABLE 数据表名称 (永久性删除一个数据表)


2. 记录集对象的方法:
rs.movenext 将记录指针从当前的位置向下移一行
rs.moveprevious 将记录指针从当前的位置向上移一行
rs.movefirst 将记录指针移到数据表第一行
rs.movelast 将记录指针移到数据表最后一行
rs.absoluteposition=N 将记录指针移到数据表第N行
rs.absolutepage=N 将记录指针移到第N页的第一行
rs.pagesize=N 设置每页为N条记录
rs.pagecount 根据 pagesize 的设置返回总页数
rs.recordcount 返回记录总数
rs.bof 返回记录指针是否超出数据表首端,true表示是,false为否
rs.eof 返回记录指针是否超出数据表末端,true表示是,false为否
rs.delete 删除当前记录,但记录指针不会向下移动
rs.addnew 添加记录到数据表末端
rs.update 更新数据表记录

 
 

以上是关于用Select*from where like。Java的主要内容,如果未能解决你的问题,请参考以下文章

string SQL="select * from where "+searchtype+" like '%"+searchkey+"%

模糊查询与分组查询

如何在 Mysql 中通过 LIKE 使用嵌套的 SELECT?

SQL语句中模糊查询中不区分大小写怎么写?如:select × from table where number like‘%PK%’

MySQL单表查询

mysql 多个 like 查询优化