JDBC全称Java DataBase Connectivity / java数据库连接,是使用java连接和操作数据库的最基本驱动工具。
sun公司的javasoft部门开发
最早的JDBC 1.0 随JDK1.1发布
由一组用Java语言编写的类和接口组成
用于执行SQL语句的Java API
可以为多种关系数据库提供统一访问
使用JDBC驱动的最大的好处就是可以访问不同的数据库,因为不同数据库本身提供不同的驱动以迎合JDBC驱动
流程
导入jar包:驱动jar包!
加载驱动类:Class.forname(类名)
给出url、username、password
使用DriverManager类得到Connection对象
JDBC使用流程
导入jar包:驱动jar包!
加载驱动类:Class.forname(类名)
给出url、username、password
使用DriverManager类得到Connection对象
四大参数:
driverClassName--com.mysql.jdbc.Driver(MySql数据库)
url--jdbc:mysql://localhost:3306/数据库名称(MySql数据库)
Uesrname
Password
一、加载驱动类(注册驱动)
Class.forName("com.mysql.jdbc.Driver");
反射机制创建驱动类对象
forName静态方法:返回与给定字符串名称的类或接口相关联的类对象
com.mysql.jdbc.Driver
所有java.sql.driver的实现类都提供了static代码块,代码块中代码把自己注册到DriverManage中
(向 DriverManager 注册给定驱动程序: 新加载的驱动程序类应该调用 registerDriver 方法让 DriverManager 知道自己)
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
public Driver() throws SQLException {
// Required for Class.forName().newInstance()
}
}
二、获取连接(通过DBUrl、UserName、PassWord)
Connection conn = DriverManager.getConnection( DB_URL, USER, PASS );
java.sql.DriverManager
用于管理一组 JDBC 驱动程序的基本服务
注意: JDBC 2.0 API中新增的DataSource接口提供了另一种连接到数据源的方法。 使用DataSource对象是连接到数据源的首选方法。
java.sql.Connection
与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。
三、操作数据库(CURD)
获取Statement
Statement stmt = con.createStatement();
java.sql .Statement
用于执行静态SQL语句并返回其生成的结果的对象
在默认情况下,同一时间每个 Statement 对象在只能打开一个 ResultSet 对象
2、执行execute方法(executeUpdate、executeQuery)
executeUpdate(String sql)执行给定SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句,或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)
方法返回值:
SQL语句执行后影响的数据行数
(1) 对于 SQL 数据操作语言 (DML) 语句,返回行计数
(2) 对于什么都不返回的 SQL 语句,返回 0
executeQuery(String sql)
执行给定的Query 语句语句,该语句返回单个ResultSet 对象(结果集)。
ResultSet
表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。
需解析返回的结果集
3、解析ResultSet对象(一般查询操作才存在)
ResoultSet对象中的数据存储格式:二维表格
遍历结果集方法:
ResultSet 对象具有指向其当前数据行的行光标。
最初,光标被置于第一行之前。
next 方法将光标移动到下一行;因为该方法在 ResultSet 对象没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集
next()
将光标从当前位置向下移一行。
两种获取列值方法:
1、列编号
getInt(int columnIndex)
2、列名
getInt(String columnLabel)
4、关闭连接(Connection、Statement、ResultSet)
connection.close();——必须关闭
statement.close();
resultset.close();
节省资源
在不使用数据库连接池情况下,connection.close()关闭时,statement和resoultset也会随之自动关闭
但是如果使用了数据库连接池,connection.close()不会关闭连接,只会归还给连接池,statement和resoultset对象就会不断持有
所以最好将ResultSet、Statement、Connection按顺序close