一、JDBC入门
1.jdbc的概念
JDBC(Java DataBase Connectivity:java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问,它是由一组用Java语言编写的类和接口组成的。
JDBC的作用:可以通过java代码操作数据库
2.jdbc的本质
其实就是java官方提供的一套规范(接口)。用于帮助开发人员快速实现不同关系型数据库的连接!
3.jdbc的快速入门程序
导入jar包
注册驱动
Class.forName("com.mysql.jdbc.Driver");
获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db2", "root", "root");
获取执行者对象
Statement stat = conn.createStatement();
执行sql语句,并接收返回结果
String sql = "SELECT * FROM user";
ResultSet rs = stat.executeQuery(sql);
处理结果
while(rs.next()) {
System.out.println(rs.getInt("id") + "\t" + rs.getString("name"));
}
释放资源
rs.close();
stat.close();
conn.close();
创建一个java项目:JDBC基础
将jar包导入,并添加到引用类库
一.JDBC操作数据库的步骤
1.首先在项目根目录创建lib文件夹,放入jdbc驱动程序,然后Add As Library
2.加载数据库驱动
3.使用驱动管理器来获得连接---获得 一个数据库连接对象Connectiion
4.使用Connection创建PreparedStatement语句对象---PreparedStatement对象可以执行sql语句
5.使用PreparedStatement对象执行sql语句
6.操作判断---增删改返回的是影响行数,只有查询获得结果
@Test
public void testSelectAll() throws ClassNotFoundException, SQLException {
//1.加载数据库驱动
Class.forName(driver);
//2.使用驱动管理器来获得链接---获得一个数据库连接对象Connection
Connection con = DriverManager.getConnection(url, username, password);
//3.使用Connection创建PreparedStatement预处理对象---PreparedStatement对象可以
//执行带 ? 的sql语句
String sql="select * from student";
PreparedStatement ps = con.prepareStatement(sql);
//4.使用PreparedStatement对象执行SQL语句,获得ResultSet结果集对象
ResultSet rs = ps.executeQuery();
//5.操作判断--增删改返回的是影响的行数(返回值是int),只有查询获得结果集(返回值
//ResultSet)
List<Student> studentList=new ArrayList<>();
while(rs.next()){
//更具字段名城获取表中的数据
int stuId=rs.getInt("stuId");
String stuName = rs.getString("stuName");
String stuSex = rs.getString("stuSex");
int stuAge = rs.getInt("stuAge");
String stuAddr = rs.getString("stuAddr");
//把以上数据封装到Student对象中
Student student=new Student();
student.setStuId(stuId);
student.setStuName(stuName);
student.setStuSex(stuSex);
student.setStuAge(stuAge);
student.setStuAddr(stuAddr);
//把当前行封装后的student 对象装在到list集合中
studentList.add(student);
}
System.out.println("studentList");
//6.关闭资源
if(rs!=null){
rs.close();
}
if(ps!=null){
ps.close();
}
if(con!=null){
con.close();
}
}
7.回收资源
二.什么是JDBC
概念:Java数据库连接,(Java Database Connectivity,简称JDBC)是ava语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。我们通常说的jDBC是面向关系型数据库的。
各数据库厂商根据IDBC的规范,实现自身数据库操作的功能代码,然后以jar包(数据库厂商提供的驱动包)的形式提供给开发人员使用,开发人员使用反射的机制创建这些具体实现类的兑现完成数据库的操作。
二、JDBC各个功能类详解
1.DriverManager
DriverManager:驱动管理对象
注册驱动(告诉程序该使用哪一个数据库驱动)
注册给定的驱动程序:static void registerDriver(Driver driver) (DriverManager的方法)
我们在刚刚的入门案例中并没有注册驱动,也成功了,咋回事呢
这是因为我们使用了Class.forName:Class.forName(“com.mysql.jdbc.Driver”)
我们通过了给forName指定了是mysql的驱动
它会帮助我们注册驱动,如下:
在com.mysql.jdbc.Driver类中存在静态代码块(通过查看源码发现)
//这是com.mysql.jdbc.Driver的静态代码块,只要使用这个类,就会执行这段代码
//而Class.forName("com.mysql.jdbc.Driver")就正好使用到了这个类
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
注意:我们不需要通过DriverManager调用静态方法registerDriver(),因为只要Driver类被使用,则会执行其静态代码块完成注册驱动
mysql5之后可以省略注册驱动的步骤。在jar包中,存在一个java.sql.Driver配置文件,文件中指定了com.mysql.jdbc.Driver
所以后边我们其实可以省略注册驱动的步骤(可以注释掉上个案例的注册驱动的步骤,也可以查询到数据)
获取数据库连接(获取到数据库的连接并返回连接对象)
static Connection getConnection(String url, String user, String password);
返回值:Connection数据库连接对象
参数
url:指定连接的路径。语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
user:用户名
password:密码
2.Connection
Connection:数据库连接对象
获取执行者对象
获取普通执行者对象:Statement createStatement();
获取预编译执行者对象:PreparedStatement prepareStatement(String sql);
管理事务
开启事务:setAutoCommit(boolean autoCommit); 参数为false,则开启事务。
提交事务:commit();
回滚事务:rollback();
释放资源
立即将数据库连接对象释放:void close();