本章目标
掌握PreparedStatement接口的工作原理
可以使用PreparedStatement进行数据库的更新及查询操作

 

PreparedStatement简介
PreparedStatement是Statement的子接口,属于预处理操作,与直接使用Statement不同的是,PreparedStatement在操作时,是先在数据表之中准备好了一条SQL语句,但是此SQL语句的具体内容暂时不设置,而是之后再进行设置,以插入数据为例,使用PreparedStatement插入数据时,数据表中的指针首先指向最后一条数据之后,但是里面的内容是不知道的,而是等待用户分别设置。

 

PreparedStatement的基本操作方法

PreparedStatement接口_sql


 

执行插入操作

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%'
 * */