zoukankan      html  css  js  c++  java
  • 1 JDBC是什么?

    1 JDBC是什么?
        Java DataBase Connertivity(Java语言连接数据库)
        
    2 JDBC的本质是什么?
        JDBC是SUN公司制定的一套接口(Interface)
            java.sql.*;(这个软件包下有很多接口)
        
        接口都有调用者和实现者。
        面相接口调用、面相接口写实现类,这都属于面相接口编程。
        
        为什么要面相接口编程?
            解耦合:降低程序的耦合度,提高程序的扩展力。
            多态机制就是非常典型的:面相抽象编程。(不想面向具体编程)
            
            建议:
            Animal a = new Cat();
            Animal a = new Dog();
            //喂养的方法
            public void feed(Animal a){ // 面相父类编程
                
            }
            不建议:
            Dog d = new Dog();
            Cat c = new Cat();
            
        思考:为什么SUN指定一套JDBC接口呢?
            因为每一个数据库的底层实现原理都不一样。
            Orcale数据库有自己的原理。
            MySQL数据库也有自己的原理。
            MS SqlServer数据库也有自己的原理。
            ...
            每一个数据库产品都有自己独特的实现原理。
            
    3 JDBC开发前的准备工作,先从官网下载对应的驱动jar包,然后将其配置到环境变量classpath当中。
        classpath=.;C:UsersxlWuDesktop学习JDBC2-JDBC相关学习资源MySql Connector Java 5.1.23mysql-connector-java-5.1.23-bin.jar
        以上的配置是针对于文本编辑器的方式开发,使用IDEA工具的时候,不需要配置以上的环境变量。
        IDEA有自己的配置方式。
        
        
    4 JDBC变成六步(需要背会)
        
        第一步:注册驱动(告诉java程序,即将要连接的哪个品牌的数据库)
        
        第二步:获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,使用完之后一定要关闭)
        
        第三步:获取数据库操作对象(专门执行sql语句的对象)
        
        第四步:执行sql语句(DQL、DML...)
        
        第五步:处理查询结果集(只有当第四步执行的是select语句的时候,才有这第五步处理查询结果集)
        
        第六步:释放资源(使用完资源之后一定要关闭资源,java数据库属于进程间通信,开启之后一定要关闭)
     
     
     
    JDBC本质内存图
     
     
     
    案例1:JDBC的六步操作之插入:
    package com.java.JDBC;
    
    
    import java.sql.*;
    
    
    public class JDBCTest01 {
        public static void main(String[] args) {
        
            Connection conn = null;
            Statement stmt = null;
            
            try {
                // 1 注册驱动
                Driver driver = new com.mysql.jdbc.Driver(); // 多态,父类型引用执行子类型对象。
                // Driver driver = new oracle.jdbc.driver.OracleDriver(); // oracle驱动
                DriverManager.registerDriver(driver);
        
                // 2 获取连接
                /*
                    url:统一资源定位符(网络中某个资源的绝对路径)
                    https://www.baidu.com/ 这就是URL
                    URL包括哪几部分?
                        协议
                        IP
                        PORT
                        资源名
                    
                    http://14.215.177.39/index.html
                        http:// 通信协议
                        14.215.177.39 服务器IP地址
                        80 服务器上软件的端口
                        index.html 是服务上某个资源名
                        
                    jdbc:mysql://127.0.0.1:3306/mydatabase
                        jdbc:mysql:// 协议
                        127.0.0.1 IP地址
                        3306 mysql的数据库端口号
                        mydatabase 具体的数据库实例名
                        
                    说明:localhost和127.0.0.1都是本机IP地址。
                    
                    什么是通信协议,有什么用?
                        通信协议是通信之前提前定好的数据传送格式。
                        数据包具体怎么传数据,格式提前定好的。
                        
                    oracle的URL:
                        jdbc:oracle:thin:@localhost:1521:orcl
                 */
                String url = "jdbc:mysql://127.0.0.1:3306/mydatabase";
                String user = "root";
                String password = "333";
                conn = DriverManager.getConnection(url,user,password);
                // 数据库连接对象 = com.mysql.jdbc.JDBC4Connection@7bb11784
                System.out.println("数据库连接对象 = " + conn);
                
                // 3 获取数据库操作对象(Statement专门执行sql语句的)
                stmt = conn.createStatement();
                
                // 4 执行sql语句
                String sql = "insert into dept(deptno,dname,loc) values(50,'人事部','北京')";
                // 专门执行DML语句的(insert update delete)
                // 返回值是“影响数据库中的记录条数”
                int count = stmt.executeUpdate(sql);
                System.out.println(count == 1 ? "保存成功" : "保存失败");
                
                // 5 处理返回结果集
                
                
                
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                // 6 释放资源
                // 为了保证资源一定释放,在finally语句块中关闭资源
                // 并且要遵循从小到大依次关闭
                // 分别对其 try..catch
                if (stmt != null) {
                    try {
                        stmt.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
        
                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    案例2:JDBC的六步操作之删除和更新(为了巩固):

    package com.java.JDBC;
    
    
    import java.sql.*;
    
    
    public class JDBCTest02 {
        public static void main(String[] args) {
        
            Connection conn = null;
            Statement stmt = null;
            try {
                // 1 注册驱动
                DriverManager.registerDriver(new com.mysql.jdbc.Driver());
                
                // 2 获取连接
                conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydatabase","root","333");
                
                // 3 获取数据库操作对象
                stmt = conn.createStatement();
                
                // 4 执行sql语句
                // int count = stmt.executeUpdate("delete from dept where deptno = 50");
                int count = stmt.executeUpdate("update dept set deptno = 88 where deptno = 10 ");
                System.out.println(count == 1 ? "删除成功" : "删除失败");
                
                // 5 获取sql结果集
                
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                // 6 释放资源
                if (stmt != null) {
                    try {
                        stmt.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
        
                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    案例3:JDBC的六步操作之升级写法介绍(比较常用):

    package com.java.JDBC;
    
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    
    public class JDBCTest03 {
        public static void main(String[] args) {
            
            try {
                // 1 注册驱动
                // 这是比较常用的写法
                // 为什么这种方式常用?因为参数是一个字符串,字符串你可以写到xxx.properties文件中。
                // 以下方法不需要接收返回值,因为我们只想用他的类加载动作。
                Class.forName("com.mysql.jdbc.Driver");
                // 2 获取连接
                Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase","root","333");
                // com.mysql.jdbc.JDBC4Connection@3ab39c39
                System.out.println(conn);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        
        }
    }

    案例4:JDBC的六步操作升级写法案例:

    jdbc.properties

    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://127.0.0.1:3306/mydatabase
    user=root
    password=333

    代码:

    package com.java.JDBC;
    
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ResourceBundle;
    /*
        实际开发中不建议把连接数据库的信息写死到java程序中。
        写到配置文件中,方便以后的更改,并且不用重启程序。
    */
    public class JDBCTest04 {
        public static void main(String[] args) {
            
            // 使用资源绑定器绑定属性配置文件
            ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
            
            String driver = bundle.getString("driver");
            String url = bundle.getString("url");
            String user = bundle.getString("user");
            String password = bundle.getString("password");
            
            Connection conn = null;
            Statement stmt = null;
            try {
                // 1 注册驱动
                Class.forName(driver);
            
                // 2 获取连接
                conn = DriverManager.getConnection(url,user,password);
            
                // 3 获取数据库操作对象
                stmt = conn.createStatement();
            
                // 4 执行sql语句
                // int count = stmt.executeUpdate("delete from dept where deptno = 50");
                int count = stmt.executeUpdate("update dept set deptno = 88 where deptno = 10 ");
                System.out.println(count == 1 ? "更新成功" : "更新失败");
            
                // 5 获取sql结果集
            
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } finally {
                // 6 释放资源
                if (stmt != null) {
                    try {
                        stmt.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            
                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
     
  • 相关阅读:
    mysql 插入字段 字符串
    python---统计列表中数字出现的次数
    pycharm激活
    Jmeter遇到的坑
    通用接口测试用例设计【转】
    selenium系列------元素定位套路
    jmeter系列-------注意事项
    jmeter系列-------脚本编写格式
    jmeter系列------变量的提取
    jmeter系列------参数关联
  • 原文地址:https://www.cnblogs.com/xlwu/p/13654000.html
Copyright © 2011-2022 走看看