sql中带有like时如何使用预编译。

本文通过一个具体的Java代码示例,介绍了如何使用PreparedStatement来执行SQL查询。示例中展示了如何设置参数并执行一个带有通配符的LIKE查询。

Java代码如下:

String str = "长江";
Connection conn = null; 
//比较preparestatement和statement 
PreparedStatement ps = null; 
ResultSet rs = null; 
try { 
//2.建立连接 
conn = JdbcUtils.getConnection(); 
//3.创建语句 
String stl = "SELECT * FROM jeesci WHERE title like ?"; 
ps = conn.prepareStatement(stl); 
//将第一个问号替换成str
ps.setString(1, "%"+str+"%");

//4.执行语句 
rs = ps.executeQuery();

 

普通Statement和预编译Statement(PreparedStatement)存在多方面的区别: - **定义及创建方式**:Statement由方法`createStatement`所创建,用于发送简单的SQL语句;而PreparedStatement由方法`prepareStatement`所创建,用于发送带有一个或多个输入参数的SQL语句[^3]。 - **SQL语句处理**:普通Statement在执行SQL语句,若执行过长语句,拼接字符串很繁琐,还容易出错;预编译Statement使用占位符(如`?`),避免了繁琐的字符串拼接。例如,创建预编译语句对象可通过`Connection`对象来实现,如`PrepareStatement ps = conn.prepareStatement("select * from student where num = ? and name = ?")`,后续只需设置占位符的内容即可 [^2]。 - **编译情况**:普通Statement每次执行SQL语句都需要DBMS进行编译;而PreparedStatement对象不仅包含了SQL语句,并且大多数情况下这个语句已经被预编译过,执行只需DBMS运行SQL语句,无需再次编译 [^1][^3]。 - **执行效率**:当需要多次执行相同句法的SQL语句,且两次之间的差别仅仅是变量不同预编译Statement会大大降低运行间,加快访问数据库的速度;若仅执行一次SQL语句,预编译Statement和普通Statement在效率上无明显差异,体现不出预编译的优越性 [^1][^3]。 - **使用场景**:普通Statement适用于简单的、一次性执行的SQL查询;预编译Statement适用于多次执行相同结构但参数不同的SQL语句的场景 [^1][^3]。 以下是两者的代码示例对比: ```java // 普通Statement示例 import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class StatementExample { public static void main(String[] args) { try { Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/yourdb", "username", "password"); Statement stmt = con.createStatement(); String updateString = "UPDATE COFFEES SET SALES = 75 " + "WHERE COF_NAME LIKE 'Colombian'"; stmt.executeUpdate(updateString); } catch (Exception e) { e.printStackTrace(); } } } // 预编译Statement示例 import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class PreparedStatementExample { public static void main(String[] args) { try { Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/yourdb", "username", "password"); PreparedStatement updateSales = con.prepareStatement("UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ? "); updateSales.setInt(1, 75); updateSales.setString(2, "Colombian"); updateSales.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值