详解JDBC对象

1. DriverManager

  (1) 注册驱动

    Class.forName("com.mysql.cj.jdbc.Driver");

    

    真正注册驱动的是驱动包下 jdbc 文件夹中 Driver 类的 "DriverManager.registerDriver(Driver driver)"方法。

    告诉程序使用哪个数据库驱动 jar 包。

    注意:MySQL 5及以后的注册驱动的语句可以不用写的,因为驱动 jar 包的 META-INF -- services -- java.sql.Driver 文件中记录着加载驱动的位置和文件。如果没有手动注册,则会自动读取这个文件然后注册驱动。建议还是手动注册比较稳妥。

    

  (2) 获取数据库链接

    public static Connection getConnection(String url,String user,String password)

    尝试建立与给定数据库URL连接,不同的数据库有不同的URL语句。

    "jdbc:mysql://IP地址:端口/数据库"    // MySQL数据库URL
    "jdbc:oracle:thin:@//IP地址:端口/数据库"  // Oracle数据库URL
    "jdbc:sqlserver://IP地址:端口;DatabaseName=数据库" // SQL Server数据库URL

     如果MySQL使用本地数据库和默认端口,则可以使用简写 "jdbc:mysql:///数据库"。

 

2. Connection

  (1) 获取执行sql的对象

    createStatement() 
    prepareStatement(String sql) 

  (2) 管理事务

    setAutoCommit(boolean autoCommit) // 设值为false开启事务
    commit() // 提交事务
    rollback() // 回滚事务

 

3. Statement

  (1) int executeUpdate(String sql)

    执行DML语句增删改表和DDL语句操作数据库,返回影响行数,判断DML语句执行是否成功。

  (2) ResultSet executeQuery(String sql)

    执行DQL语句查询表中数据,返回查询结果集。

  (3) boolean execute(String sql)

    可以执行任意SQL语句,但不常用。

4. ResultSet

  这是结果集对象,封装了查询结果。要做的就是将结果集中的数据取出来。

  这里面有一个抽象的东西,叫游标。就像数组中的下标一样,游标从一开始指向的是结果集的列名一行,不指向任何一行数据。通过方法,可以移动游标,指向数据读取数据。

  (1) boolean next()

    这个方法可以使游标向下移动一行,返回一个布尔类型数据,告诉这行是否有数据,也就是是否移动到最后一行末尾(移动到表外面了)。如果移出去了,就返回false,如果没移出去就返回true。

  (2) get数据类型(参数)

    例如:int getInt(int columnIndex)     String getString(int columnIndex)

    注意:参数有两种:

    1) int:代表列的编号,从最左边的第一列开始为1。

      例如:getInt(1) 

    2) String:代表列的名称,这样更精确更直观一些,用的比较多。

      例如:getString("name")

  示例:

import java.sql.*;

public class JDBCSelect {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/" +
                    "db?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false",
                    "root","saqwedcxz");
            String sql = "SELECT * FROM user";
            stmt = conn.createStatement();
            rs = stmt.executeQuery(sql);
            while(rs.next()) {
                int id = rs.getInt(1);
                String name = rs.getString("name");
                int age = rs.getInt(3);
                System.out.println(id + " - " + name + " - " + age);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if(rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/NyanKoSenSei/p/11524937.html