14、JDBC数据库编程

14、JDBC数据库编程

14.1、为什么需要JDBC

当前所有的B/S系统无一不和数据库之间有交互

JDBC(Java Database Connectivity)是一种可用于执行SQL语句的 Java API

JDBC的应用模型如下图所示:



 14.2、JDBC驱动

JDBC 驱动的4种类型

TYPE 1: JDBC-ODBC桥驱动程序

适用于快速的原型系统,没有提供JDBC驱动的数据库如Access

TYPE 2: Native-API驱动程序

利用开发商提供的本地库来直接与数据库通信。比Type1性能略好

TYPE 3: JDBC通过网络的纯Java驱动程序

具有最大的灵活性,通常由那些非数据库厂商提供,是四种类型中最小的

TYPE 4: 原生协议以及纯Java驱动程序

最高的性能,通过自己的本地协议直接与数据库引擎通信,具备在Internet装配的能力

14.3、JDBC实现以下目标

通过使用SQL语句,程序员可以利用java语言开发访问数据库的应用。

数据库供应商和数据库工具开发商可以提供底层的驱动程序。因此他们有能力优化各自的数据库产品的驱动程序。

14.4、JDBC的工作原理

JDBC API 供程序员调用的类和接口被包装在java.sql包中如:

DriverManager类

Connection接口

Statement接口

ResultSet接口

DriverManager 

作用:管理不同的JDBC驱动

JDBC驱动

作用:负责连接各种不同的数据库

JDBC API类和接口均在Java.sql和javax.sql程序包中提供。

JDBC API中常使用的类和接口是:

DriverManager 类:为数据库加载驱动程序。

驱动程序接口:提供一个数据库驱动程序。所有的JDBC驱动程序类必须执行驱动程序接口。

连接接口: 使你可以建立Java应用程序与数据库之间的连接。

语句接口:使你可以执行SQL语句。

ResultSet 接口:提供从数据库检索的信息。

SQLException 类:提供与数据库互动时发生的异常的有关信息。



 14.5、JDBC接口类和对象

DriverManager类

Class.forName() 显式加载并注册驱动程序类

驱动程序被加载后就出现在DriverManager的驱动程序列表中,并可用于创建连接

Connection对象

建立连接

DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);

JDBC URL

jdbc:< 子协议 >:< 子名称 > 

如:jdbc:mysql://localhost:3306/test

发送SQL语句

Statement

PreparedStatement

Statement对象

创建Statement对象

Statement stmt = conn.createStatement();

使用Statement对象执行语句

ResultSet executeQuery()参数是查询语句(select)

Int executeUpdate()参数是DML或DDL语句(insert, update, delete or DDL)

boolean execute()执行可能返回多种结果的语句(任何sql)

ResultSet getResultSet() 获取当前的结果集

int getUpdateCount() 以更新计数的形式获取当前结果;如果结果为 ResultSet 对象或没有更多结果,则返回 -1。

关闭Statement对象

作为一种良好的编程风格,应在不需要的时候显式关闭他们,stmt.close()

ResultSet对象

ResultSet对象又称结果集

行和光标

初始光标停在第一行之前,rs.next() 会使光标向下移一行列

resultSet中的getXxx()方法提供了对当前行某列值的访问

getXxx(String 列名) 列名不区分大小写

getXxx(int 列编号) 编号从 1 开始

 

14.6、JDBC访问数据库的基本步骤

①注册JDBC驱动程序;

注册驱动程序有三种方式:

JAVA规范中明确规定:所有的驱动程序必须在静态初始化代码块中将驱动注册到驱动程序管理器中。

方式一:Class.forName(“oracle.jdbc.driver.OracleDriver”);

 

方式二:Driver drv = new oracle.jdbc.driver.OracleDriver();

 DriverManager.registerDriver(drv);

方式三:编译时在虚拟机中加载驱动

javac –Djdbc.drivers = oracle.jdbc.driver.OracleDriver xxx.java

java –D jdbc.drivers=驱动全名 类名

使用系统属性名,加载驱动 -D表示为系统属性赋值

附?: mysql的Driver的全名com.mysql.jdbc.Driver                 

SQLServer的Driver的全名com.microsoft.jdbc.sqlserver.SQLServerDriver

②建立到DB连接;

conn=DriverManager.getConnection(“jdbc:oracle:thin:@192.168.0.1:1521:test”,  ” User”,” Pasword”);

IP地址及端口号和数据库实例名

用户名密码码

 

Connection连接是通过DriverManager的静态方法getConnection(.....)来得到的,这个方法的实质是把参数传到实际的Driver中的connect()方法中来获得数据库连接的。

Oracle URL的格式:

jdbc:oracle:thin:(协议)@XXX.XXX.X.XXX:XXXX(IP地址及端口号):XXXXXXX(所使用的库名)

MySql URL的写法    例: jdbc:mysql://192.168.0.1:3306/test

 

③获得Statement对象;

stat = conn.createStatement();

 

④通过Statement执行Sql语句;

sta.executeQuery(String sql);返回一个查询结果集。

sta.executeUpdate(String sql);返回值为int型,表示影响记录的条数。

将sql语句通过连接发送到数据库中执行,以实现对数据库的操作。

 

⑤处理结果(有的话);

使用Connection对象获得一个Statement,Statement中的executeQuery(String sql) 方法可以使用select语句查询,并且返回一个结果集 ResultSet通过遍历这个结果集,可以获得select语句的查寻结果,ResultSet的next()方法会操作一个游标从第一条记录的前面开始读取,直到最后一条记录。executeUpdate(String sql) 方法用于执行DDL和DML语句,比如可以update,delete操作。

只有执行select语句才有结果集返回。

 

⑥与数据库断开连接。

关闭数据库连接(释放资源)  调用.close()

rs.close();            sta.close();              con.close();

ResultSet  Statement  Connection是依次依赖的。

注意:要按先ResultSet结果集,后Statement,最后Connection的顺序关闭资源,因为Statement和ResultSet是需要连接时才可以使用的,所以在使用结束之后有可能其它的Statement还需要连接,所以不能现关闭Connection。


 14.7、实例

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;



public class JDBCTest {
	
	public static final String DB_DRIVER = "com.mysql.jdbc.Driver";
	public static final String DB_URL = "jdbc:mysql://localhost:3306/test";
	public static final String DB_USERNAME = "root";
	public static final String DB_PASSWORD = "root";
	
	public static void main(String[] args){
		
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		
		try{
			//1、装载JDBC驱动
			Class.forName(DB_DRIVER);
			//2、获取数据库连接
			conn = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);
			//3、创建数据库语句
			String sql = "seletc * from users";
			stmt = conn.createStatement();
			//执行数据库操作
			rs = stmt.executeQuery(sql);
			//从结果集中获取数据
			while(rs.next()){
				int id = rs.getInt("id");
				String name = rs.getString("name");
				int age = rs.getInt("age");
				System.out.println("id = " + id +" name = " + name +" age="+age);
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			//6、释放资源
			if(rs != null){
				try{
					rs.close();
				}catch(SQLException e){
					e.printStackTrace();
				}
			}
			
			if(stmt != null){
				try{
					stmt.close();
				}catch(SQLException e){
					e.printStackTrace();
				}
			}
			
			if(conn != null){
				try{
					conn.close();
				}catch(SQLException e){
					e.printStackTrace();
				}
			}
		}
	}
}

 14.8、JDBC连接几种常见数据库



 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值