您的位置:首页 > 编程语言 > Java开发

java JDBC(二):Statement、ResultSet、PreparedStatement

2014-05-07 12:44 471 查看
一、利用Statement执行增加、删除、修改操作

要想对数据库进行操作,则需要使用Statement接口完成,此接口可以使用Connection中的createStatement
()方法实例化。此接口定义了以下的常用方法:



范例:像数据库中增加数据
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.Statement ;
public class InsertDemo01{
	// 定义MySQL的数据库驱动程序
	public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
	// 定义MySQL数据库的连接地址
	public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
	// MySQL数据库的连接用户名
	public static final String DBUSER = "root" ;
	// MySQL数据库的连接密码
	public static final String DBPASS = "mysqladmin" ;
	public static void main(String args[]) throws Exception {	// 所有的异常抛出
		Connection conn = null ;		// 数据库连接
		Statement stmt = null ;			// 数据库操作
		Class.forName(DBDRIVER) ;	// 加载驱动程序
		String sql = "INSERT INTO user(name,password,age,sex,birthday) "+
			" VALUES ('李兴华','www.mldn.cn',30,'男','2008-08-27')" ;
		conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
		stmt = conn.createStatement() ;	// 实例化Statement对象
		stmt.executeUpdate(sql) ;		// 执行数据库更新操作
		stmt.close() ;					// 关闭操作
		conn.close() ;			// 数据库关闭
	}
};


范例:执行更新操作,值用变量传入
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.Statement ;
public class UpdateDemo{
	// 定义MySQL的数据库驱动程序
	public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
	// 定义MySQL数据库的连接地址
	public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
	// MySQL数据库的连接用户名
	public static final String DBUSER = "root" ;
	// MySQL数据库的连接密码
	public static final String DBPASS = "mysqladmin" ;
	public static void main(String args[]) throws Exception {	// 所有的异常抛出
		Connection conn = null ;		// 数据库连接
		Statement stmt = null ;			// 数据库操作
		int id = 2 ;
		Class.forName(DBDRIVER) ;	// 加载驱动程序
		String name = "李华" ;			// 姓名
		String password = "mldn"	;	// 密码
		int age = 25 ;		// 年龄
		String sex = "男" ;	 // 性别
		String birthday = "2001-09-13" ;
		String sql = "UPDATE user SET name='"+name+"',password='"
			+password+"' , age=" + age + ",sex='"+sex+"',birthday='"
			+birthday+"' WHERE id="+id  ;
		conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
		stmt = conn.createStatement() ;	// 实例化Statement对象
		stmt.executeUpdate(sql) ;		// 执行数据库更新操作
		stmt.close() ;					// 关闭操作
		conn.close() ;			// 数据库关闭
	}
};
删除操作:
public class DeleteDemo{
	// 定义MySQL的数据库驱动程序
	public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
	// 定义MySQL数据库的连接地址
	public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
	// MySQL数据库的连接用户名
	public static final String DBUSER = "root" ;
	// MySQL数据库的连接密码
	public static final String DBPASS = "mysqladmin" ;
	public static void main(String args[]) throws Exception {	// 所有的异常抛出
		Connection conn = null ;		// 数据库连接
		Statement stmt = null ;			// 数据库操作
		int id = 2 ;
		Class.forName(DBDRIVER) ;	// 加载驱动程序
		String sql = "DELETE FROM user WHERE id="+id  ;
		conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
		stmt = conn.createStatement() ;	// 实例化Statement对象
		stmt.executeUpdate(sql) ;		// 执行数据库更新操作
		stmt.close() ;					// 关闭操作
		conn.close() ;			// 数据库关闭
	}
};


二、ResultSet

使用SQL中的Select语句可以将数据库中的全部结果查询出来,在JDBC的操作中,所有的查询结果将使用ResultSet接口进行接收,并使用ResultSet显示内容。
public class ResultSetDemo01{
	// 定义MySQL的数据库驱动程序
	public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
	// 定义MySQL数据库的连接地址
	public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
	// MySQL数据库的连接用户名
	public static final String DBUSER = "root" ;
	// MySQL数据库的连接密码
	public static final String DBPASS = "mysqladmin" ;
	public static void main(String args[]) throws Exception {
		Connection conn = null ;		// 数据库连接
		Statement stmt = null ;		// 数据库的操作对象
		ResultSet rs = null ;		// 保存查询结果
		String sql = "SELECT id,name,password,age,sex,birthday FROM user" ;
		Class.forName(DBDRIVER) ;	// 加载驱动程序
		conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
		stmt = conn.createStatement() ;
		rs = stmt.executeQuery(sql) ;
		while(rs.next()){	// 依次取出数据
			int id = rs.getInt("id") ;	// 取出id列的内容
			String name = rs.getString("name") ;	// 取出name列的内容
			String password = rs.getString("password") ; // 取出password列的内容
			int age = rs.getInt("age") ;	// 取出age列的内容
			String sex = rs.getString("sex") ;	// 取出sex列的内容
			java.util.Date d = rs.getDate("birthday") ; // 取出birthday列的内容
			System.out.print("编号:" + id + ";") ;
			System.out.print("姓名:" + name + ";") ;
			System.out.print("密码:" + password + ";") ;
			System.out.print("年龄:" + age + ";") ;
			System.out.print("性别:" + sex + ";") ;
			System.out.println("生日:" + d + ";") ;
			System.out.println("-----------------------") ;
		}
		rs.close() ;
		stmt.close() ;
		conn.close() ;			// 数据库关闭
	}
};


对于以上的操作代码,如果假设列的名称过长的话,则取值的时候显得不便,此时可以采用顺序的编号取得。
public class ResultSetDemo02{
	// 定义MySQL的数据库驱动程序
	public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
	// 定义MySQL数据库的连接地址
	public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
	// MySQL数据库的连接用户名
	public static final String DBUSER = "root" ;
	// MySQL数据库的连接密码
	public static final String DBPASS = "mysqladmin" ;
	public static void main(String args[]) throws Exception {
		Connection conn = null ;		// 数据库连接
		Statement stmt = null ;		// 数据库的操作对象
		ResultSet rs = null ;		// 保存查询结果
		String sql = "SELECT id,name,password,age,sex,birthday FROM user" ;
		Class.forName(DBDRIVER) ;	// 加载驱动程序
		conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
		stmt = conn.createStatement() ;
		rs = stmt.executeQuery(sql) ;
		while(rs.next()){	// 依次取出数据
			int id = rs.getInt(1) ;	// 取出id列的内容
			String name = rs.getString(2) ;	// 取出name列的内容
			String password = rs.getString(3) ; // 取出password列的内容
			int age = rs.getInt(4) ;	// 取出age列的内容
			String sex = rs.getString(5) ;	// 取出sex列的内容
			java.util.Date d = rs.getDate(6) ; // 取出birthday列的内容
			System.out.print("编号:" + id + ";") ;
			System.out.print("姓名:" + name + ";") ;
			System.out.print("密码:" + password + ";") ;
			System.out.print("年龄:" + age + ";") ;
			System.out.print("性别:" + sex + ";") ;
			System.out.println("生日:" + d + ";") ;
			System.out.println("-----------------------") ;
		}
		rs.close() ;
		stmt.close() ;
		conn.close() ;			// 数据库关闭
	}
};


三、PreparedStatement






得到PreparedStatement:

PreparedStatement prepareStatement(String sql) throws SQLException

之后使用一系列的setXxx()方法设置内容,根据位置设置。

如果执行更新语句的话,则会返回更新数据的记录数。

注意日期设置问题:



范例:使用PrepareStatement进行插入
public class PreparedStatementDemo01 {
	// 定义MySQL的数据库驱动程序
	public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
	// 定义MySQL数据库的连接地址
	public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
	// MySQL数据库的连接用户名
	public static final String DBUSER = "root" ;
	// MySQL数据库的连接密码
	public static final String DBPASS = "mysqladmin" ;
	public static void main(String args[]) throws Exception{	// 所有异常抛出
		Connection conn = null ;		// 数据库连接
		PreparedStatement pstmt = null ;	// 数据库操作
		String name = "李兴华" ;	// 姓名
		String password = "www.mldnjava.cn" ;	// 密码
		int age = 30 ;	// 年龄
		String sex = "男" ;	 // 性别
		String birthday = "2007-08-27" ;	// 生日
		java.util.Date temp = null ;
		temp = new SimpleDateFormat("yyyy-MM-dd").parse(birthday) ;
		java.sql.Date bir = new java.sql.Date(temp.getTime()) ;
		String sql = "INSERT INTO user(name,password,age,sex,birthday) VALUES (?,?,?,?,?) " ;
		Class.forName(DBDRIVER) ;	// 加载驱动程序
		conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
		pstmt = conn.prepareStatement(sql) ;	// 实例化PreapredStatement对象
		pstmt.setString(1,name) ;
		pstmt.setString(2,password) ;
		pstmt.setInt(3,age) ;
		pstmt.setString(4,sex) ;
		pstmt.setDate(5,bir) ;
		int t = pstmt.executeUpdate() ;	// 执行更新
		System.out.println(t);
		pstmt.close() ;
		conn.close() ;			// 数据库关闭
	}
};


范例:使用该接口完成查询操作
public class PreparedStatementDemo02 {
	// 定义MySQL的数据库驱动程序
	public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
	// 定义MySQL数据库的连接地址
	public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
	// MySQL数据库的连接用户名
	public static final String DBUSER = "root" ;
	// MySQL数据库的连接密码
	public static final String DBPASS = "mysqladmin" ;
	public static void main(String args[]) throws Exception{	// 所有异常抛出
		Connection conn = null ;		// 数据库连接
		PreparedStatement pstmt = null ;	// 数据库操作
		String keyWord = "李" ;	 // 设置查询关键字
		ResultSet rs = null ;	// 接收查询结果
		String sql = "SELECT id,name,password,age,sex,birthday " +
				" FROM user WHERE name LIKE ? OR password LIKE ? OR sex LIKE ?" ;
		Class.forName(DBDRIVER) ;	// 加载驱动程序
		conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
		pstmt = conn.prepareStatement(sql) ;	// 实例化PreapredStatement对象
		pstmt.setString(1,"%"+keyWord+"%") ;
		pstmt.setString(2,"%"+keyWord+"%") ;
		pstmt.setString(3,"%"+keyWord+"%") ;
		rs = pstmt.executeQuery() ;	// 执行查询
		while(rs.next()){
			int id = rs.getInt(1) ;
			String name = rs.getString(2) ;
			String pass = rs.getString(3) ;
			int age = rs.getInt(4) ;
			String sex = rs.getString(5) ;
			java.util.Date d = rs.getDate(6) ;
			System.out.print("编号:" + id + ";") ;
			System.out.print("姓名:" + name + ";") ;
			System.out.print("密码:" + pass + ";") ;
			System.out.print("年龄:" + age + ";") ;
			System.out.print("性别:" + sex + ";") ;
			System.out.println("生日:" + d + ";") ;
			System.out.println("-------------------------") ;
		}
		rs.close() ;
		pstmt.close() ;
		conn.close() ;			// 数据库关闭
	}
};


在真正工作当中使用PreparedStatement是比较多的,因为这个可以避免SQL注入风险。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: