本章目标
掌握PreparedStatement接口的工作原理
可以使用PreparedStatement进行数据库的更新及查询操作
PreparedStatement简介
PreparedStatement是Statement的子接口,属于预处理操作,与直接使用Statement不同的是,PreparedStatement在操作时,是先在数据表之中准备好了一条SQL语句,但是此SQL语句的具体内容暂时不设置,而是之后再进行设置,以插入数据为例,使用PreparedStatement插入数据时,数据表中的指针首先指向最后一条数据之后,但是里面的内容是不知道的,而是等待用户分别设置。
PreparedStatement的基本操作方法
执行插入操作
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class PreparedStatementDemo01 { public static void main(String[] args) throws Exception { Connection conn=null; //数据库连接 PreparedStatement pstmt = null;//数据库操作 String name = "ichaoyi";//姓名 int age = 35;//年龄 String sex ="男";//性别 String birthday = "2014-07-02";//生日 String sql =" insert into consumer (ID, NAME, AGE, SEX, BIRTHDAY)" + "values (id_seq.nextval, ?, ?, ?, to_date(?, 'yyyy-mm-dd'))";//编写预处理 SQL Class.forName("oracle.jdbc.driver.OracleDriver"); //加载驱动程序 //连接数据库 conn=DriverManager.getConnection("jdbc:oracle:thin:gome/gome@localhost:1521:oracle11"); pstmt = conn.prepareStatement(sql);//实例化 PreparedStatement pstmt.setString(1, name);//设置第一个 “?”的内容 pstmt.setInt(2, age);//设置第二个 “?”的内容 pstmt.setString(3, sex);//设置第三个 “?”的内容 pstmt.setString(4, birthday);//设置第四个 “?”的内容 pstmt.executeUpdate();//执行数据库更新操作,不需要 SQL pstmt.close();//操作关闭 conn.close(); //数据库关闭 } /* 结果:使用 PreparedStatement 完成数据插入操作 * */ } /*备注: * 创建序列号 * create sequence id_seq -- 尽量使用统一前缀命名,方便管理 建议使用table名+_seq 例如:gome_user_seq * increment by 1 -- 自增步长 这里设置为1 * start with 10 -- 计数起点 这里设置为1 * nomaxvalue -- 不设置最大值 可选项 maxvalue|minvalue * nocycle -- 一直累加,不循环 * cache 10; * * 插入数据 * insert into consumer (ID, NAME, AGE, SEX, BIRTHDAY) * values (id_seq.nextval, 'chaoyi', 40, '男', to_date('1991-10-16', 'yyyy-mm-dd')); * */
模糊查询
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class PreparedStatementDemo02 { public static void main(String[] args) throws Exception { Connection conn=null; //数据库连接 PreparedStatement pstmt = null;//数据库操作 String keyWord = "c";//设置查询关键字 ResultSet rs = null;//保存查询结果 String sql = "select id, name, age, sex, birthday from consumer where name like ? or sex like ?"; Class.forName("oracle.jdbc.driver.OracleDriver"); //加载驱动程序 //连接数据库 conn=DriverManager.getConnection("jdbc:oracle:thin:gome/gome@localhost:1521:oracle11"); pstmt = conn.prepareStatement(sql);//实例化对象 pstmt.setString(1, "%"+keyWord+"%");//设置第一个 “?”的内容,要使用模糊查询 pstmt.setString(2, "%"+keyWord+"%");//设置第二个 “?”的内容,要使用模糊查询 rs = pstmt.executeQuery();//实例化 ResultSet 对象 while(rs.next()){//指针向下移动 int id = rs.getInt(1);//取得 id 内容 String name = rs.getString(2);//取得 name 内容 int age = rs.getInt(3);//取得 age 内容 String sex = rs.getString(4);//取得 sex 内容 java.util.Date d = rs.getDate(5);//取得 生日 内容 System.out.print("编号:"+id+"; ");//输出编号 System.out.print("姓名:"+name+"; ");//输出姓名 System.out.print("年龄:"+age+"; ");//输出年龄 System.out.print("性别:"+sex+"; ");//输出性别 System.out.print("生日:"+d);//输出生日 System.out.println("\n-----------------------------");//换行 } rs.close();//关闭结果集 pstmt.close();//操作关闭 conn.close(); //数据库关闭 } /* 结果:模糊查询 * 编号:6; 姓名:chaoyi; 年龄:30; 性别:男; 生日:2009-10-16 * ----------------------------- * 编号:8; 姓名:chaoyi; 年龄:30; 性别:男; 生日:1992-10-10 * ----------------------------- * 编号:7; 姓名:ichaoyi; 年龄:35; 性别:男; 生日:2014-07-02 * ----------------------------- * 编号:16; 姓名:chaoyi; 年龄:30; 性别:c; 生日:2014-07-03 * ----------------------------- * 编号:17; 姓名:yike; 年龄:30; 性别:c; 生日:2014-07-03 ----------------------------- * */ } /*备注:模糊查询语句 * select id, name, age, sex, birthday from consumer where name like '%c%' or sex like '%c%' * */
相关推荐
JDBC 中 PreparedStatement 接口提供的 execute、executeQuery 和 executeUpdate 之间的区别及用法 JDBC 中的 PreparedStatement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。...
在Java编程中,PreparedStatement是Java SQL API中的一个接口,它是Statement接口的子接口。这个练习主要涉及如何使用PreparedStatement来插入宠物信息到数据库中。PreparedStatement的主要优势在于它的预编译能力和...
PreparedStatement接口实现了预编译功能,允许我们在SQL语句中使用占位符(如`?`),然后在执行时动态设置参数。这有以下优点: - 提高性能:预编译的SQL语句可以重复使用,避免了每次执行时的编译过程。 - 防止...
jdbc2.0版 PreparedStatement接口的用法
2. **PreparedStatement接口** `PreparedStatement`是`Statement`的子接口,用于预编译SQL语句。预编译的SQL语句在数据库端进行处理,提高了执行效率,特别是当同一个SQL语句被多次执行时。此外,`...
总的来说,`PreparedStatement`接口提供了一种更高效、更安全的方式来执行SQL语句,而`ResultSet`接口则用于存储和处理查询结果。在实际开发中,这两个接口是JDBC编程中不可或缺的部分,它们可以帮助我们更好地与...
2.5 PreparedStatement接口 2.6 ResultSet接口 2.7 DataSource接口 三、JDBC操作数据库的步骤 四、编写第一个JDBC程序 五、注册案例 六、登录案例 6.1 Statement 七、SQL注入 7.1 SQL注入 7.2 出现SQL注入的原因 7.3...
这个问题其实也很简单,因为PreparedStatement接口必须通过Connection接口来获取实例,而ResultSet接口又必须从Statement或者PreparedStatement接口来获取实例,有了这样的级联关系,问题也就迎刃而解了。...
为防止SQL注入,Java提供了PreparedStatement接口。PreparedStatement是Statement的子接口,它的主要特点是预编译SQL语句。在创建PreparedStatement对象时,我们会提供一个包含占位符(如?)的SQL模板,然后在执行时...
在JDBC中,PreparedStatement接口是Statement接口的一个子接口,它提供了预编译的SQL语句,这对于处理动态参数和提高性能非常关键。下面将详细讨论PreparedStatement接口的高级特性以及如何在应用程序中使用它们。 ...
PreparedStatement接口是JDBC API的核心组件,提供了预编译SQL语句的方法。PreparedStatement接口包括执行SQL语句、获取执行结果等方法。 CallableStatement接口: CallableStatement接口是JDBC API的核心组件,...
#### 18.2.4 PreparedStatement接口 `PreparedStatement`接口继承自`Statement`,主要用于执行参数化的SQL语句。相比`Statement`,使用`PreparedStatement`可以避免SQL注入攻击,并提高性能。 - **作用**: 发送包含...
PreparedStatement接口提供了设置参数的方法,如`setXXX(int index, value)`系列方法,其中XXX代表不同的数据类型。 6. **ResultSet接口**:表示SQL查询的结果集,提供了遍历查询结果的方法,如`next()`、`...
- PreparedStatement接口:设置预编译SQL语句中的参数,执行SQL。 - CallableStatement接口:用于调用存储过程,设置输入/输出参数。 4. JDBC最佳实践: - 使用try-with-resources语句处理资源关闭,确保异常...
**PreparedStatement** 是 `Statement` 的子接口,用于执行预编译 SQL 语句。这种类型的语句可以包含占位符(?),这些占位符在执行前会被具体的值替换。这不仅提高了 SQL 语句的执行效率,还增加了应用程序的安全性...
PreparedStatement接口是为了提高SQL语句执行的效率和安全性而设计的。当你需要多次执行相同的SQL语句,比如插入、更新或删除数据,使用PreparedStatement可以避免SQL注入攻击,并且因为预编译的过程,性能通常优于...
PreparedStatement接口是Statement接口的子接口,使用它可以执行带参数的SQL语句。CallableStatement接口是Statement接口的子接口,使用它可以执行存储过程。 在上面的代码中,我们定义了一个JdbcDemo类,该类提供...