1.什么是JDBC?
JDBC (Java DataBase Connectivity)是Java数据库连接技术的简称,提供连接各种常用数据库的能力。
JDBC 核心API简介
JDBC API的主要功能:与数据库建立连接、执行SQL 语句、处理结果和释放资源
API名称 | API作用 |
DriverManager | 注册驱动,获取Connection连接对象。 |
Connection | 负责连接数据库并担任传送数据的任务,最为重要的就是用来产生Statement对象。 |
Statement | 负责向数据库发送SQL语句,这样数据库就会执行发送过来的SQL语句。 |
ResultSet | ResultSet对象表示查询结果集,只有在执行查询操作后才会有结果集的产生。结果集是一个二维的表格。 |
搭建实验环境
需求说明:
编写程序从user表中读取数据,并打印在命令行窗口中。
准备步骤:
第一步:选择myschool数据库,创建users表(id,username,userpass,role)并插入测试数据。
第二步:新建一个Java工程,并导入MySQL程序驱动包。
DBC的开发步骤——1.加载驱动
DriverManager用于加载驱动,并创建与数据库的链接,这个API的常用方法:
DriverManager.registerDriver(new Driver())
DriverManager.getConnection(url, user, password)
注意:在实际开发中并不推荐采用registerDriver方法注册驱动。原因有二:
查看Driver的源代码可以看到,如果采用此种方式,会导致驱动程序注册两次,也就是在内存中会有两个Driver对象。
程序依赖mysql的api,脱离mysql的jar包,程序将无法编译,将来程序切换底层数据库将会非常麻烦。
推荐方式:Class.forName("com.mysql.jdbc.Driver");
JDBC的开发步骤——2.获取Connection对象
DriverManager.getConnection(url,username,password)
其中username和password是登录数据库的用户名和密码。
url用来找到要连接数据库的“网址”。mysql的url:
jdbc:mysql://localhost:3306/myschool
JDBC规定url的格式由三部分组成,每个部分中间使用冒号分隔。
第一部分是jdbc,这是固定的;
第二部分是数据库厂商名称;
第三部分是数据库服务器的IP地址(localhost)、端口号(3306),以及数据库名称(myschool)组成。
Connection接口的常用方法
方法名 | 方法的作用 |
createStatement() | 创建向数据库发送sql的statement对象。 |
prepareStatement(sql) | 创建向数据库发送预编译sql的PrepareSatement对象。 |
prepareCall(sql) | 创建执行存储过程的callableStatement对象。 |
setAutoCommit(boolean autoCommit) | 设置事务是否自动提交。 |
commit() | 在此连接上提交事务。 |
rollback() | 在此连接上回滚事务。 |
close() | 关闭数据库连接。 |
3.创建Statement对象,执行SQL语句
Statement对象是通过Connection对象的方法创建的。
Statement stmt = con.createStatement();//创建Statement对象
Statement对象用来向数据库发送要执行的SQL语句
String sql = “select username from users”;//发送给服务器的SQL语句
ResultSet rs = stmt.executeQuery(sql);//执行SQL语句,并返回结果集
Statement接口的常用方法
方法名 | 方法的作用 |
ResultSet executeQuery(String sql) | 用于向数据发送查询语句(select)。 |
int executeUpdate(String sql) | 用于向数据库发送insert、update或delete语句。 |
boolean execute(String sql) | 用于向数据库发送任意sql语句。 |
void addBatch(String sql) | 把多条sql语句放到一个批处理中。 |
int[] executeBatch() | 向数据库发送一批sql语句执行。 |
void close() | 释放资源。 |
4.返回Resultset对象,查询结果
String sql = “select username from users”;
ResultSet rs = stmt.executeQuery(sql);//执行SQL语句,并返回结果集
//读取结果
while(rs.next()){
String userName=rs.getString(“username”);
System.out.println(userName);}
ResultSet接口的常用方法
方法名 | 方法的作用 |
Object getObject(int index) | 根据列的索引获取任意的数据类型 |
Object getObject(string columnName) | 根据列的名称获取任意的数据类型 |
String getString(int index) | 根据列的索引获取字符串 |
String getString(String columnName) | 根据列的名称获取字符串 |
int getInt(int index) | 根据列的索引获取整数 |
int getInt(String columnName) | 根据列的名称获取整数 |
boolean next() | 将游标从当前位置向下移动一行 |
close() | 释放资源。 |
JDBC的开发步骤——5.释放资源
Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, Statement和Connection对象,特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。
为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。
try {
if(rs != null) rs.close();
if(stmt != null) stmt.close();
if(con != null) con.close();
} catch(SQLException e) {
e.printStackTrace();
}