| 
                        
                         JDBC的全称是Java数据库连接(Java Database connect),它是一套用于执行SQL语句的Java API。它是Java和数据库之间的一个桥梁,是一个规范而不是一个实现,能够通过执行SQL语句来完成对数据库中数据的查询、更新和删除等操作。 
应用程序使用JDBC访问数据库的方式如下图所示: 
  
? 
从上图可以看出,应用程序使用JDBC访问特定的数据库时,需要与不同的数据库驱动进行连接。由于不同数据库厂商提供的数据库驱动不同,因此,为了使应用程序与数据库真正建立连接,JDBC不仅需要提供访问数据库的API,还需要封装与各种数据库服务器通信的细节,不同厂商的数据库都有相应的实现。 
下面通过一张图来描述JDBC的具体实现细节,如下图: 
  
从上图中可以看出,JDBC的实现包括三部分。 
(1)JDBC驱动管理器:负责注册特定的JDBC驱动器,主要通过java.sql.DriverManager类实现; 
(2)JDBC驱动器API:由Sun公司负责制定,其中最主要的接口是java.sql.Driver接口; 
(3)JDBC驱动器:它是一种数据库驱动,由数据库厂商创建,也称为JDBC驱动程序,负责与特定的数据库连接,以及处理通信细节。 
JDBC编程步骤 
各种不同厂商的数据库都有相应的实现,本文中的代码都是针对MySQL数据库实现的。 
1、注册驱动 
在编写代码前,你需要安装MySQL第三方类库,mysql-connector-java-8.0.29-bin.jar包可以在网上下载,或者在MySQL的安装目录下找到。 
    try {
        Driver driver = new com.mysql.cj.jdbc.Driver();
        DriverManager.registerDriver(driver);
    } catch (SQLException e) {
        throw new RuntimeException(e);
    } 
以下是com.mysql.cj.jdbc.Driver类的源代码 
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    public Driver() throws SQLException {
    }
    static {
        try {
            DriverManager.registerDriver(new Driver());
        } catch (SQLException var1) {
            throw new RuntimeException("Can't register driver!");
        }
    }
} 
加载驱动程序也可以通过Class.forName方法,该方法将这个类加载到JVM中,加载的时候,就会执行其中的静态初始化块,完成驱动的初始化的相关工作。 
    try {
        Class.forName("com.mysql.cj.jdbc.Driver");
    } catch (ClassNotFoundException e) {
        throw new RuntimeException(e);
    } 
2、建立连接 
    String url = "jdbc:mysql://localhost:3306/jdbc"; // 数据库URL
    String user = "root"; // 数据库用户名
    String password = "123456"; // 数据库密码
    Connection conn = null;
    try {
        conn= = DriverManager.getConnection(url, user, password);
    } catch (SQLException e) {
        throw new RuntimeException(e);
    } 
3、获取数据库操作对象(预编译对象) 
获取数据库操作对象,实现数据库插入操作 
public class JDBC {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
        String user = "root";
        String password = "123456";
        Connection conn = null;
        Statement stmt = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, password);
            stmt = conn.createStatement();
            String sql= "insert into user(id, name, gender, age) values(2, '张三', '男', 18)"; 
            
            stmt.executeUpdate(sql);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
} 
获取数据库操作对象,实现数据库更新操作 
public class JDBC {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
        String user = "root";
        String password = "123456";
        Connection conn = null;
        Statement stmt = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, password);
            stmt = conn.createStatement();
            String sql = "update user set name = '张三' where age = 20"; // 修改SQL语句
            
            stmt.executeUpdate(sql);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
} 
获取数据库操作对象,并实现数据库删除操作 
public class JDBC {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
        String user = "root";
        String password = "123456";
        Connection conn = null;
        Statement stmt = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, password);
            stmt = conn.createStatement();
            String sql = "delete from user where name = '张三'"; // 删除SQL语句
            
            stmt.executeUpdate(sql);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
} 
获取数据库预编译对象,实现数据库插入操作 
public class JDBC {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
        String user = "root";
        String password = "123456";
        Connection conn = null;
        PreparedStatement pre = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, password);
            String sql = "insert into user(id, name, gender, age) values (?, ?, ?, ?)";
            pre = conn.prepareStatement(sql);
            pre.setInt(1,1);
            pre.setString(2,"张三");
            pre.setString(3,"男");
            pre.setInt(4,18);
            pre.executeUpdate();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
} 
4、处理查询结果集 
获取数据库操作对象,实现数据库查询操作,并打印结果集 
public class JDBC {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
        String user = "root";
        String password = "123456";
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, password);
            stmt = conn.createStatement();
            String select = "select * from user where name = '张三'";
            rs = stmt.executeQuery(select);
            while (rs.next()) {
                System.out.println(rs.getString("id") + "," + rs.getString("name")
                + "," + rs.getString("gender") + "," + rs.getString("age"));
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
} 
获取数据库预编译对象,实现数据库查询操作,并打印结果集 
public class JDBC {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
        String user = "root";
        String password = "123456";
        Connection conn = null;
        PreparedStatement pre = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, password);
            String sql = "select * from user where name = ?";
            pre = conn.prepareStatement(sql);
            pre.setString(1,"藏三");
            rs = pre.executeQuery();
            while (rs.next()) {
                System.out.println(rs.getString("id") + "," + rs.getString("name")
                + "," + rs.getString("gender") + "," + rs.getString("age"));
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
} 
5、释放资源 
    try {
        if (rs != null) {
            rs.close();
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    try {
        if (statement != null) {
            statement.close();
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    try {
        if (conn != null) {
            conn.close();
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } 
Statement和PreparedStatement的异同及优缺点 
相同点:两者都是用来执SQL语句的 
不同点:PreparedStatement需要根据SQL语句来创建,它能够通过设置参数,指定相应的值,不是像Statement那样使用字符串拼接的方式。 
PreparedStatement的优点 
1、其使用参数设置,可读性好数据库更新操作,不易记错。在statement中使用字符串拼接,可读性和维护性比较差。 
2、其具有预编译机制,性能比statement更快。 
3、其能够有效防止SQL注入攻击。 
execute和executeUpdate的区别 
相同点:二者都能够执行增加、删除、修改等操作。 
不同点:1、execute可以执行查询语句,然后通过getResult把结果取出来。executeUpdate不能执行查询语句;2、execute返回Boolean类型,true表示执行的是查询语句,false表示执行的insert、delete、update等。executeUpdate的返回值是int,表示有多少条数据受到了影响。 
关于JDBC基础介绍就到这里啦,欢迎大家在评论区讨论。 
                                                (编辑:滁州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |