1.数据库编程的必备条件
- 编程语言,如Java,C、C++、Python等
- 数据库,如Oracle,MySQL,SQL Server等
- 数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包。如:MySQL提供了Java的驱动包mysql-connector-java,需要基于Java操作MySQL即需要该驱动包。同样的,要基于Java操作Oracle数据库则需要Oracle的数据库驱动包ojdbc
2.Java的数据库编程:JDBC
JDBC,即Java Database Connectivity,Java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范,这个API由 java.sql.* , javax.sql.* 包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。
JDBC工作原理
JDBC为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它注意包含一些通用的接口类。
JDBC访问数据库层次结构如下图。
JDBC优势:
- Java语言访问数据库操作完全面向抽象接口编程
- 开发数据库应用不用限定在特定数据库厂商的API
- 程序的可移植性大大增强
JDBC使用步骤总结:
- 创建数据库连接Connection
- 创建操作命令Statement
- 使用操作命令来执行SQL
- 处理结果集ResultSet
- 释放资源
mysql> select * from student;
+----+------+--------+-----------------+------------+
| id | sn | name | qq_mail | classes_id |
+----+------+--------+-----------------+------------+
| 1 | 1 | 张三 | zhangsan@qq.com | 1 |
| 2 | 2 | 李四 | lisi@qq.com | 1 |
| 3 | 3 | 王五 | wangwu@qq.com | 1 |
| 4 | 4 | 赵六 | null | 2 |
| 5 | 5 | 陈七 | chenqi@qq.com | 3 |
+----+------+--------+-----------------+------------+
import java.sql.*;
public class DbuTil {
private static final String URL = "jdbc:mysql://localhost:3306/test1029";
private static final String USER_NAME = "root";
private static final String PASSWORD = "123456";
public static void main(String[] args) {
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
//1.加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
//2获取连接
connection = DriverManager.getConnection(URL,USER_NAME,PASSWORD);
System.out.println(connection);
//3创建执行对象
statement = connection.createStatement();
//4.执行sql
String sql = "select * from student";
resultSet = statement.executeQuery(sql);//5.结果集对象
//固定语法
while (resultSet.next()){
Integer id = resultSet.getInt(1);//从一开始第几列,id
Integer sn = resultSet.getInt(2);//sn
String name = resultSet.getString(3);//姓名
String qq = resultSet.getString(4);//邮箱
Integer class_id = resultSet.getInt(5);
System.out.println(String.format("id = %s, sn = %s,name = %s,qq = %s,classId = %s",
id,sn,name,qq,class_id));
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}finally {
//6.释放资源
//顺序和创建的时候反过来
try {
if (resultSet != null){
resultSet.close();
}
if(statement != null){
statement.close();
}
if(connection != null){
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
结果
com.mysql.jdbc.JDBC4Connection@6d4b1c02
id = 1, sn = 1,name = 张三,qq = zhangsan@qq.com,classId = 1
id = 2, sn = 2,name = 李四,qq = lisi@qq.com,classId = 1
id = 3, sn = 3,name = 王五,qq = wangwu@qq.com,classId = 1
id = 4, sn = 4,name = 赵六,qq = null,classId = 2
id = 5, sn = 5,name = 陈七,qq = chenqi@qq.com,classId = 3
释放资源:
连接要释放,执行对象要释放,结果集对象要释放
connection,statement,resultSet