JDBC基础实现方法
一、 JDBC的概述
JDBC(Java DataBase Connection)即Java数据库连接技术,是指一整套用于执行SQL语句的Java API和技术,主要存放在java.sql包中,Java程序可通过这套API连接一个关系型数据库,并进行操作。
由于不同厂商的数据库产品的内部原理不同,如果直接用不同厂商提供的API操作数据库,Java程序的可移植性非常差。所以JDBC要求各个厂商统一按照Java提供的规范来设计数据库驱动,使它们都能够与Java提供的API兼容,使得代码通用性增强。
如图,JDBC是Java程序与数据库系统之间的缓冲层。
 
二、 JDBC的主要API
1. Driver接口
- 实现数据库驱动程序的接口,又厂商负责实现并提供,开发者只需引入驱动不同数据库的jar包。
2. DriverManager类
- 
用于加载JDBC驱动程序,并建立与数据库的连接。 
- 
有两个重要的静态方法: 方法 功能 void registerDriver (Driver driver) 用于加载数据库驱动程序。 Connection getConnection(String url, String user, String password) 连接数据库并返回连接对象。 
3. Connection接口
| 方法 | 功能 | 
|---|---|
| Statement createStatement () | 获取一个陈述器对象 | 
| PreparedStatement prepareStatement (String sql) | 获取一个SQL预编译的陈述器 | 
| CallableStatement prepareCall (String sql) | 获取SQL操作的储存过程 | 
| DatabaseMetaData getMetaData() | 获取数据库元数据的对象。 | 
4. Statement接口
| 方法 | 功能 | 
|---|---|
| boolean execute (String sql) | 可执行任何SQL语句,有结果集时为true,否则为false。 | 
| ResultSet executeQuery (String sql) | 执行select语句,返回结果集 | 
| int executeUpdate (String sql) | 执行insert、update、delete语句,返回受影响行数 | 
5. ResultSet接口
- 
用于存放和解析结果集,对象初始化时游标在第一行,调用next()方法换行。 
- 
数据获取方法 方法 功能 getXXX (int index) 以索引方式获取某字段的数据。 getXXX (String field) 以字段名获取某字段的数据。 
- 
游标操作方法 方法 功能 void next() 游标移动到下一行 void previout () 游标移动到上一行 void absolute (int row) 游标移动到指定行 void afterLast () 游标移动到尾行之后 void beforeFirst () 游标移动到首行之前 void last () 游标移动到尾行 
6. PreparedStatement接口
实际开发中往往需要将程序的变量作为SQL语句的参数,PreparedStatement是Statement的子接口,可预编译SQL语句,用占位符“?”代替参数进行预编译,之后在用 setXXX()方法给参数赋值。示例:
String sql = "insert into tab_user(id, name, birthday) value(?, ?, ?)";
PreparedStatement ps = connection.preparedStatement(sql);
ps.setInt(1, 101);            //第一个参数是字段索引,第二个是数据。
ps.setString(2, "King");
ps.setDate(3, "2020-1-1");
ps.executeUpdate();
具体方法列表请查看帮助文档。
三、实现JDBC的基本步骤
- 
将数据库驱动的 jar包(mysql-connector-java.jar)放到 lib目录,并右键引用 jar包,确认MySQL服务正在运行。 
- 
加载并注册驱动,有两种方式: - 
Class.forName("com.mysql.jdbc.Driver"); 该方法作用是加载并初始化一个指定的类。 
- 
DriverManager.registerDriver(new com.mysql.jdbc.Driver() ); 由于Driver对象源码中默认存在一段静态代码自动执行 Class.forName("driverName"),所以此方法会使驱动重复注册。
 
- 
- 
连接数据库时,其中参数 URL="jdbc:mysql://hostName:port/databaseName?useUnicode=true&characterEncoding=utf-8&useSSL=true";- jdbc:mysql://是规定格式;
- hostName:port 是主机地址和端口号;
- databaseName 是MySQL服务中必须已经存在的一个数据库对象的名称。
- ?后面用来设置一些参数,必须设置useSSL=true,否则会报警,原因是MySQL版本高于JDBC驱动版本时,需要指明是否进行SSL连接。
 
import java.sql.*;
public class DataBaseConn {
    public static void main(String[] args) {
        // 先声明JDBC的工具对象
        Connection connection;
        Statement statement;
        ResultSet resultSet;
        // 连接数据库所需的参数
        String url = "jdbc:mysql://localhost:3306/db_practice?useUnicode=true&characterEncoding=utf-8&useSSL=true";
        String user = "root";
        String password = "123456";
        
        try {
            // 1. 注册使用数据库的驱动
            Class.forName("com.mysql.jdbc.Driver");
            // 2. 通过DriverManager获取数据库连接。
            connection = DriverManager.getConnection(url, user, password);
            // 3. 通过connection建立陈述器对象。
            statement = connection.createStatement();
            // 4. 通过statement对数据库陈述SQL,并返回结果集。
            resultSet = statement.executeQuery("select * from tab_student");
            // 5. 解析结果集。
            System.out.println("id | name | address | password");
            while (resultSet.next()) {
                int id = resultSet.getInt("Sno");
                String name = resultSet.getString("Sname");
                String address = resultSet.getString("address");
                String psw = resultSet.getString("password");
                System.out.printf("%d | %s | %s | %s \n", id, name, address, psw);
            }
            // 6. 使用后,释放资源。
            resultSet.close();
            statement.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        } 
    }
}
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号