zoukankan      html  css  js  c++  java
  • JDBC

    JDBC

    Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标[1]。JDBC是面向关系型数据库的。(来自维基百科--Java数据库连接

    JDBC的本质:Java官方SUN公司定义的一套操作所有关系型数据库的规则,也就是接口。每个数据库厂商(MySQL、Oracle、DB2等)要去实现这套接口,提供数据库驱动的jar包,使得Java程序员可以使用这套JDBC接口编程。真正执行的是代码是驱动jar包的实现类。

    使用过程:

    1. 导入驱动jar包:
      • 在项目下建立一个libs目录用来管理jar包,将mysql-connector-java-8.0.15.jar复制到该目录下
      • 右击libs目录-->add as library,导入jar包
    2. 注册驱动
    3. 获取数据库连接对象Connection
    4. 定义SQL
    5. 获取执行SQL语句的Statement对象
    6. 执行SQL,接收执行返回结果
    7. 处理结果
    8. 释放资源

    JDBC小Demo:

    package cn.zhuobo.jdbc;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.Statement;
    
    public class JDBCDemo01 {
        public static void main(String[] args) throws Exception {
            // 注册驱动,把Drive类的字节码文件加载进内存
            Class.forName("com.mysql.cj.jdbc.Driver");
            // 获取数据库连接对象
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1", "root", "    ");
            // 定义是去了语句
            String sql = "UPDATE emp SET salary = 2 WHERE id = 1";
            // 获取执行SQL的对象
            Statement statement = connection.createStatement();
            // Statement对象执行SQL
            int count = statement.executeUpdate(sql);
    
            System.out.println(count);
    
            connection.close();
            statement.close();
        }
    }
    
    

    用到的各个对象解释:

    1. DriverManager:驱动管理对象,这是一个类。

      作用:告知程序使其知道使用的是哪一个数据库的驱动jar包

      • 注册驱动,使用DriverManager类的一个静态方法:

        static void registerDriver(Driver driver)// 注册给定的驱动程序
        
      • 但是我们写代码的时候是使用Class.forName("com.mysql.cj.jdbc.Driver");注册驱动,没有显式地调用registerDrive()方法,这是因为在加载Driver类进内存的时候,就执行了该类里的静态代码块(静态代码快可以自动执行):

        static {
                try {
                    DriverManager.registerDriver(new Driver());
                } catch (SQLException var1) {
                    throw new RuntimeException("Can't register driver!");
                }
            }
        

        在Driver类中存在着静态代码块,也就是在加载该类进内存的时候就自动执行静态代码块了,静态代码块里DriverManager类调用了静态方法registerDriver(new Driver())。也就是归根结底还是DriverManager类在注册驱动。

        注意:mysql5以后的jar包可以省略注册驱动的步骤,也就是可以不用写Class.forName("com.mysql.cj.jdbc.Driver");,但是还是建议写上。

    2. Connection:数据库连接对象

      • 获取,DriverManager类的静态方法 static Connection getConnection(String url, String user, String password);

      • 参数:

        • url:jdbc:mysql://IP地址:端口号/数据库名
        • user:用户名
        • password:密码
      • Connection对象的方法

        方法 描述
        Statement createStatement() 获取执行SQL的Statement对象
        PreparedStatement prepareStatement(String sql)
        setAutoCommit(boolean autoCommit) 调用该方法,参数为false则开启事务
        commit() 提交事务
        rollbock() 回滚事务
    3. Statement:执行SQL的对象

      • 获取:Connection对象调用createStatement()方法,获取Statement对象

      • Statement对象的方法

        方法 描述
        boolean execute(String sql) 可以执行任意的是sql语句
        int executeUpdate(String sql) 执行DML(insert、update、delete)语句,或者DDL(create、alter、drop),int的返回值是返回影响的行数,<0则失败
        ResultSet executeQuery(String sql) :执行DQL(select)语句
    4. ResultSet:结果集对象

    5. PreparedStatement:执行SQL的对象


    JDBC练习:

    package cn.zhuobo.jdbc;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class JDBCDemo02 {
        public static void main(String[] args) {
            Statement statement = null;
            Connection connection = null;
            try {
                Class.forName("com.mysql.cj.jdbc.Driver");
                String sql = "delete from emp where id = 1"; // 删除一条记录一条记录
                // String sql = "update emp set salary = 200 where id = 6";
                // String sql = "inert into emp values(NULL, '齐天大圣', '男', 1000, '2017-09-09', 2)";
                connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1", "root", "    ");
                statement = connection.createStatement();
                int count = statement.executeUpdate(sql);
                if(count > 0) {
                    System.out.println("添加成功,影响" + count + "行");
                }
                else {
                    System.out.println("添加失败");
                }
    
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                if (statement != null) {
                    try {
                        statement.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (connection != null) {
                    try {
                        connection.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    
  • 相关阅读:
    10、驱动中的阻塞与非阻塞IO
    8、Linux设备驱动的并发控制
    入职一个月考核学习
    5、映射的思考
    6、udev机制
    7、字符设备系统
    linux 内存管理之kmalloc、vmalloc、malloc、get_gree_pages的区别
    嵌入式笔试题(linux基础)
    驱动总结
    系统移植总结
  • 原文地址:https://www.cnblogs.com/zhuobo/p/10700195.html
Copyright © 2011-2022 走看看