PreparedStatement以及模糊查找的个人经验谈
本篇博客分享我个人的一些PreparedStatement和模糊查找的个人使用经验以及我个人对PreparedStatement和模糊查找的一些理解,我也会引用一些我在网上找来的概念方便读者理解。
PreparedStatement
该 PreparedStatement接口继承Statement,并与之有所不同:
- PreparedStatement 实例包含已编译的 SQL 语句。这就是使语句“准备好”。包含于 PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数。IN参数的值在 SQL 语句创建时未被指定。相反的,该语句为每个 IN 参数保留一个问号(“?”)作为占位符。每个问号的值必须在该语句执行之前,通过适当的setXXX 方法来提供。
- 由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement 对象。因此,多次执行的 SQL 语句经常创建为 PreparedStatement 对象,以提高效率。
- 作为 Statement 的子类,PreparedStatement 继承了 Statement 的所有功能。另外它还添加了一整套方法,用于设置发送给数据库以取代 IN 参数占位符的值。同时,三种方法 execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要参数。这些方法的 Statement 形式(接受 SQL 语句参数的形式)不应该用于 PreparedStatement 对象。
以上是我摘自百度百科的对PreparedStatement的定义,在我个人的理解来看,PreparedStatement对输入的sql语句提前进行编译,不仅提高了运行和处理的效率,也提高了一定的安全性,使得我们对数据库的操作更加安全,而PreparedStatement和Statement的使用方法也有所不同,具体使用方法如下
PreparedStatement:
Connection con;//用Drive驱动对con赋值
PreparedStatement st = con.prepareStatement("select * from table_a");
ResultSet rs = st.executeQuery();
Statement
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("select * from table_a");
具体使用区别和感觉,还是需要读者自己回去测试,这里我只给出一些例子来给读者示例。但是尽量使用PreparedStatement在我看来是比较合适现代编程的。
模糊查找
对于模糊查找就是对关键字进行查询,sql语句与一般查询语句差别并不大,具体如下:
一般模糊查询语句如下:SELECT 字段 FROM 表 WHERE 某字段 Like 条件。
其中关于条件,SQL提供了四种匹配模式:
-
% :表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示;
-
_ : 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句;
-
[ ] :表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个;
-
[^ ] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
-
查询内容包含通配符时,由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”的语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。
具体语句我举个例子
select * from table_a where name like '%黄%'
//表示姓名中有黄的都搜索出来
select * from table_a where name like '黄%'
//表示姓名中姓黄的都搜索出来
select * from table_a where name like '黄_'
//表示姓名中姓黄的且只有两个字的都搜索出来
以上便是我对模糊查询的个人理解与经验还有引用,相信通过以上读者能对模糊查询有个基本的了解。
我希望我的这篇博客能给需要的读者提供些许帮助,谢谢阅读。