Java面向对象笔记 • 【第9章 JDBC编程】

全部章节   >>>>


本章目录

9.1 JDBC基础

9.1.1 JDBC简介

9.1.2 JDBC常用API简介

JDBC 常用API功能说明

9.1.3 JDBC编程步骤

9.1.4 实践练习

9.2 PreparedStatement执行DML语句

9.2.1 PreparedStatement接口

9.2.2 使用PreparedStatement执行insert操作

9.2.3 实践练习

9.3 数据库操作封装类DBConnection

9.3.1 定义数据库操作封装类

9.3.2 实践练习

9.4 PreparedStatement执行查询语句

9.4.1 ResultSet对象

ResultSet类常用方法

9.4.2 操作ResultSet对象

9.4.3 实践练习

总结:


9.1 JDBC基础

9.1.1 JDBC简介

JDBCJava Database ConnectivityJava数据库连接是一种可以执行SQL语句的Java API

  • 通过JDBC API连接到数据库,并使用结构查询语句实现对数据库的查询、更新等操作
  • 使用JDBC开发数据库应用可以跨平台运行并且可以数据库
  • 通过JDBC API,不必为访问SybaseDB2等数据库学习新的API,从而极大的简化了开发人员使用Java语言对数据库的操作。
  • 为使JDBC程序可以跨平台,需要不同的数据库厂商提供相应的驱动程序。

9.1.2 JDBC常用API简介

JDBC提供了独立于数据库的统一API,用于帮助用户建立与数据库的连接、执行SQL语句和检索结果集等JDBC API位于java.sql包。

JDBC 常用API功能说明

类和接口

功能

java.sql.DriverManager

管理JDBC驱动程序,使用它可以获取Connection对象

java.sql.Connection

建立与特定数据库的连接(会话),建立后可以执行SQL语句

java.sql.Statement

用于执行SQL语句

java.sql.PreparedStatement

预编译的Statement,它是Statement的子接口

java.sql.CallableStatement

用于执行存储过程的Statement,它是Statement的子接口

java.sql.ResultSet

结果集对象。该对象包含访问查询结果的方法,Result可以通过索引或列名获得列数据

9.1.3 JDBC编程步骤

1、加载数据库驱动

将数据库驱动文件(jar文件拷贝到classpath路径

加载驱动代码Class.forName("com.mysql.jdbc.Driver");

2、获得数据库连接

Connection conn=DriverManager.getConnection(URL, USER, PASSWORD)

示例:

Connection conn = DriverManager.getConnection("jdbc:mysql:///localhost:3306/data","root", "root");

3、通过Connection实例获取Statement对象

Statement  stmt = conn.createStatement()

4、使用Statement实例执行SQL语句

int executeUpdate(String sql) throws SQLException

用于执行 INSERTUPDATE DELETE 语句以及 SQL DDL语句(例如 CREATE TABLE DROP TABLE)。

INSERTUPDATE DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数。

对于 CREATE TABLE DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。

5、使用Statement实例执行SQL语句

ResultSet executeQuery(String sql) throws SQLException

用于产生单个结果集的语句,例如 SELECT 语句

boolean execute(String sql) throws SQLException

运行可返回多个结果的SQL语句。如果结果是 ResultSet 对象,则方法 execute 返回 true;如果结果是 Java int,则返回 false

6、处理ResultRest结果

如果执行的SQL语句是查询语句,则执行结果将返回一个ResultSet对象,该对象保存了与SQL语句查询的结果

7、回收数据库资源

回收数据库资源,包括关闭ResultSetStatementConnection资源

示例:演示JDBC编程步骤

public class DbConnection {
	private static final String DRIVERNAME="com.mysql.jdbc.Driver"; //驱动类的类名
	private static final String URL="jdbc:mysql://localhost:3306/data"; //连接数据的URL路径
	private static final String USER="root"; //数据库登录账号
	private static final String PASSWORD="root"; //数据库登录密码
	static{ //1.加载驱动,驱动仅需加载一次即可
		try {
			Class.forName(DRIVERNAME);
		} catch (ClassNotFoundException e) {
		    e.printStackTrace();
		}
	}
	 //2.获取数据库连接
	public static Connection getConnection()  {
		Connection conn=null;
		try {
			return conn= DriverManager.getConnection(URL, USER,PASSWORD);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
	public static void main(String[] args) {
		Connection conn=DbConnection.getConnection();
		System.out.println("数据库连接="+conn);
	} 	
}

9.1.4 实践练习

 

9.2 PreparedStatement执行DML语句

9.2.1 PreparedStatement接口

  • PreparedStatement接口继承自Statement接口Statement使用更为灵活高效
  • PreparedStatement接口提供了更为安全的预处理功能,此功能可以有效防止SQL注入
  • PreparedStatement接口sql语句进行预编译处理(如果JDBC驱动支持的话)。预编译的sql查询语句能在将来的查询中重用,因此查询速度更快。
  • Connection实例生成PreparedStatement 实例时,对于SQL语句中输入参数的值,创建被指定,而是保留问号“?”作为占位符。
PreparedStatement pst = conn.prepareStatement("update Emp set name=?,address=? ,phone=?,Where no=?");
/* 输入参数赋值时使用setXxx(index,value)方法,其中Xxx为参数数据类型,index为参数编号,
    value为参数值 */
pst.setString(1,"李彦宏");
pst.setString(2,"中国北京");
pst.setInt(3,17710398436);
pst.setString(4,"EMP-001" );

9.2.2 使用PreparedStatement执行insert操作

示例: 新增一条员工数据

public class Emp { //员工实体类
	private String no;//员工编号
	private String name;//姓名
	private String birthday;//生日
	private String address;//住址 
	private String post;//职务
	
	//省略属性的getter和setter方法
}
public class ExecuteStatement {
	public boolean insertData(Emp emp){//向数据库中插入员工数据
		...
		try {
			String sql=" insert into t_emp(no,name,birthday,address,post) 						values(?,?,?,?,?)";
			conn=getConnection();//获取数据库连接
			//获取PraparedStatement对象
			pStmt=conn.prepareStatement(sql);
			//将占位符“?”使用预处理的方式替换成员工的账号,1表示第一个“?”占位符
			pStmt.setString(1, emp.getNo());
			pStmt.setString(2, emp.getName());
			...
			//执行SQL语句
			return pStat.executeUpdate()>0?true:false;
		} catch (Exception e) {
			e.printStackTrace();
		}finally{ //关闭相关资源 }
		return false;
	}
	public static void main(String[] args) { //测试新增一条员工数据 }
}
public class ExecuteStatement {
	public boolean updateData(Emp emp){//更新员工数据
		...
		try {
			String sql=" update t_emp set name=?,birthday=?,address=?,post=?"   
                  				 +" where no=?";
			conn=getConnection();//获取数据库连接
			//获取PraparedStatement对象
			pStmt=conn.prepareStatement(sql);
			pStmt.setString(1, emp.getName());
			...
			pStmt.setString(5, emp.getNo());
			//执行SQL语句
			return pStat.executeUpdate()>0?true:false;
		} catch (Exception e) {
			e.printStackTrace();
		}finally{ //关闭相关资源 }
		return false;
	}
	public static void main(String[] args) { //测试更新一条员工数据 }
}

9.2.3 实践练习

 

9.3 数据库操作封装类DBConnection

9.3.1 定义数据库操作封装类

数据连接与关闭操作封装成工具类DbConnection
 

public class DbConnection {
	//驱动类的类名
	private static final String DRIVERNAME="com.mysql.jdbc.Driver";
	//连接数据的URL路径
	private static final String URL="jdbc:mysql://localhost:3306/data";
	//数据库登录账号
	private static final String USER="root";
	//数据库登录密码
	private static final String PASSWORD="root";
	//1.加载驱动,驱动仅需加载一次即可
	static{
		try {
			Class.forName(DRIVERNAME);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
    //获取数据库连接
	public static Connection getConnection() throws Exception  {
	          try {
		return DriverManager.getConnection(URL, USER,PASSWORD);
	           } catch (SQLException e) {	
		e.printStackTrace(); throw new Exception();	
	           }
	}
	//关闭连接
	public  static  void colse(ResultSet rs,Statement stmt,Connection  conn) throws Exception{
	          try { if (rs != null){ rs.close(); }
                         	 if (stmt != null) { stmt.cancel(); }
		 if (conn != null) { conn.close(); }
	   } catch (Exception e) {
		   e.printStackTrace(); throw new Exception();
	   }
	}
}	

9.3.2 实践练习

 

9.4 PreparedStatement执行查询语句

9.4.1 ResultSet对象

  • Statement对象的executeQuery()方法的返回值为ResultSet对象,该对象保存了与SQL语句查询的结果
  • JDBC使用ResultSet封装查询到的结果,然后通过ResultSet记录的指针来获取结果集合的内容

ResultSet类常用方法

方法名

作用

boolean  next()

判断Result结果集中是否还有数据,如果有返回true,没有返回false

String getString(Stirng columnName)

按照查询表的列名,获取该列所对应的列值

String getString(int columnIndex)

按照查询表的列的序号,获取该列所对应的列值

9.4.2 操作ResultSet对象

示例:操作员工的ResultSet结果集获取员工信息

public List<Emp> queryEmp(){
	Connection conn=null;
	PreparedStatement pStmt=null;
	ResultSet rs=null;
	try {
		String sql="select * from t_emp";
		conn=DbConnection.getConnection();
		pStmt=conn.prepareStatement(sql);
		rs=pStat.executeQuery(); //返回ResultSet实例
		List<Emp> empList=new ArrayList<Emp>();
		//判断结果集中是否还有数据
		while(rs.next()){
			String no=rs.getString("no"); //通过列名为no获取对应的列值
			String name=rs.getString("name"); //通过列名为name获取对应的列值
            			...
			Emp emp=new Emp();
           			 //将从ResultSet结果集获取到信息封装至emp对象中
			emp.setNo(no);
			emp.setName(name);
			...
		}
		return empList;
	} catch (Exception e) {e.printStackTrace();}
	finally{
		try { DbConnection.colse(rs, pStat, conn); //释放资源 }
		catch (Exception e) {e.printStackTrace();}
	}
	return null;
}	

9.4.3 实践练习

 

总结:

  • 通过JDBC API可连接到数据库,并使用结构化查询语句实现对数据库的查询、更新等操作。使用JDBC开发数据库应用可以跨平台运行,并且可以跨数据库
  • JDBC编程步骤:1.加载数据库驱动  2.获得数据库连接  3.通过Connection实例获取Statement对象 4.使用Statement实例执行SQL语句  5.处理ResultRest结果集 6.回收数据库资源
  • PreparedStatement接口继承自Statement接口,该接口会对sql语句进行预编译处理,因此查询速度更快Connection实例生成PreparedStatement 实例时,对于SQL语句中输入参数的值,创建时并未被指定,而是保留问号“?”作为占位符
  • Statement对象的executeUpdate(String sql) 返回受影响的行数,Statement对象的executeQuery(String sql) 返回查询结果集,即ResultSet对象。
  • 可以通过ResultSet记录的指针来获取结果集合的内容。
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java面向对象程序设计第三版耿祥义第一主要介绍了Java的基础知识和面向对象的概念。 1. Java语言的特点 Java语言是一种面向对象编程语言,具有以下特点: - 简单易学:Java语言的语法似C++,但是去掉了C++中比较难理解的特性,使得Java更加容易学习和使用。 - 面向对象Java语言是一种纯面向对象编程语言,所有的程序都是由对象组成的。 - 平台无关性:Java语言可以在不同的操作系统和硬件平台上运行,只需要安装相应的Java虚拟机即可。 - 安全性:Java语言的安全性非常高,可以在不信任的环境下运行程序,避免了一些安全漏洞。 - 高性能:Java语言的运行速度比较快,且可以通过各种优化技术来提高性能。 2. 面向对象的概念 面向对象是一种软件设计的思想,其核心是将问题看作是由对象组成的。对象是指具有一定属性和行为的实体,属性是对象的特征,行为是对象的动作。 在面向对象的设计中,需要考虑以下几个方面: - 的设计:是创建对象的模板,需要定义的属性和方法。 - 对象的创建:创建对象时,需要使用new关键字来调用的构造方法。 - 对象的访问:访问对象的属性和方法时,需要使用点号操作符来进行访问。 - 继承和多态:继承是指一个可以继承另一个的属性和方法,多态是指同一种行为可以用不同的方式实现。 3. Java的基础知识 Java语言的基础知识包括数据型、运算符、流程控制语句等。 - 数据型:Java语言的数据型包括基本数据型和引用数据型。基本数据型包括整型、浮点型、字符型和布尔型,引用数据型包括、接口、数组等。 - 运算符:Java语言的运算符包括算术运算符、关系运算符、逻辑运算符、位运算符等。 - 流程控制语句:Java语言的流程控制语句包括if语句、switch语句、for循环、while循环、do-while循环等。 4. Java程序的基本结构 Java程序的基本结构包括的定义、方法的定义和语句块的定义。 - 的定义:Java程序的基本组成单元,需要使用class关键字来定义。 - 方法的定义:方法是中的一个函数,用于实现特定的功能,需要使用方法名、参数列表和返回值型来定义方法。 - 语句块的定义:语句块是一组语句的集合,需要使用大括号来定义语句块。 总的来说,Java面向对象程序设计第三版耿祥义第一介绍了Java语言的基础知识和面向对象的概念,为后续的学习打下了基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明金同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值