zoukankan      html  css  js  c++  java
  • 原生态JDBC

    原生态JDBC

      JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API.JDBC是java访问数据库的标准规范,可以为不同的关系型数据库提供统一访问,它由一组用java语言编写的接口和类组成.

      JDBC需要连接驱动,驱动是两个设置要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信.今天我们使用的是mysql的驱动mysql-connector-java-5.1.37-bin.java

    JDBC规范(掌握四个核心对象)

    1.DriverManager:用于注册驱动

    2.Connection:标识与数据库创建的连接

    3.Statement:操作数据库sql语句的对象

    4.:ResultSet :结果集或者是一张虚表.

    JDBC的原理:

    java提供访问数据库规范称为JDBC,而生产厂商提供规范的实现类称为驱动.

    JDBC是接口,驱动是接口的实现,没有驱动将无法完成数据库的连接,从而不能操作数据库,每个数据库厂商都需要提供自己的驱动,用来连接自己公司的数据库,也就是说驱动一般都是有数据库生产商提供.

    JDBC入门案例 

    执行的sql语句

    CREATE DATABASE qingmu;
    USE qingmu;
    CREATE TABLE category(
    cid INT PRIMARY KEY AUTO_INCREMENT,
    cname VARCHAR(100)
    )
    
    INSERT INTO category (cname) VALUES('家电');
    INSERT INTO category (cname) VALUES('服饰');
    INSERT INTO category (cname) VALUES('化妆品');

    导入驱动

    创建lib目录,存放mysql的驱动mysql-connector-java-5.1.37-bin.jar
    选中mysql的jar包,右键选择“ Add as Library...” 完成jar导入

     

    开发步骤和案例实现:

    package com.qingmu.test;
    
    import org.junit.Test;
    
    import java.sql.*;
    
    /**
     * @Auther:qingmu
     * @Description:脚踏实地,只为出人头地
     * @Date:Created in 21:50 2019/3/24
     */
    public class JdbcTest {
        /**
         * 使用原生态Jdbc时,
         * 1.注册驱动
         * 2.获取连接
         * 3.获取执行sql语句的对象
         * 4.获取结果集
         * 5.处理结果集
         * 6.关闭资源
         * @throws ClassNotFoundException
         * @throws SQLException
         */
        @Test
        public void test1() throws ClassNotFoundException, SQLException {
    //        注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/qingmu";
            String username = "root";
            String password = "root";
    //        获取连接
            Connection connection = DriverManager.getConnection(url, username, password);
    
            String sql = "select * from category";
    //        获取执行sql语句的对象
            Statement statement = connection.createStatement();
    //        获取结果集
            ResultSet resultSet = statement.executeQuery(sql);
    //        处理结果集
            while (resultSet.next()) {
                int id = resultSet.getInt("cid");
                String username1 = resultSet.getString("cname");
                System.out.println(id + username1);
            }
    //        关闭资源
            resultSet.close();
            statement.close();
            connection.close();
        }
    }

    API详解:

    1.注册驱动

        告诉JVM,我们要使用的是那个数据库      

              DriverManager.registerDriver(new con.mysql.jdbc.Driver());不建议使用,

        因为:java.sql.DriverManager类:管理一组JDBC驱动程序的基本服务

        静态方法:

          static void registerDriver(Driver driver):向DriverManager注册给定驱动程序.

           参数:java.sql.Driver接口:每个驱动程序类必须实现的接口.

             mysql的驱动程序中,必然有一个实现了java.sql.Driver接口

             1.在Driver中有静态代码块,是用来进行注册驱动的

                而我们的代码一旦被执行,Driver类中静态代码块也会被执行

            相当于被注册了两次.

            所以不建议

            2.如果只是使用静态代码块进行注册时候,代码就会被写死,失去了灵活性,所以也不建议使用.

             原因:导致驱动被注册两次

        强烈依赖数据库的驱动jar.

        解决办法:

        3.class.forName("com.mysql.jsbc.Driver")

    Driver源码:
    package com.mysql.jdbc;
    
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    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!");
            }
        }
    }

    获取连接:

    static Connection getConnection(String url,String user,String password):试图建立到给定数据库URL的连接

    参数说明:

      url:需要连接数据库的位置(网址)

      user用户名

      password密码

    扩展:
    URL:SUN公司与数据库厂商之间的一种协议。
    协议子协议 IP :端口号数据库 mysql: jdbc:mysql://localhost:3306/day04 或者 jdbc:mysql:///day04(默认
    本机连接) oracle数据库: jdbc:oracle:thin:@localhost:1521:sid

    API详解:java.sql.Connection接口:一个连接
    接口的实现在数据库驱动中。所有与数据库交互都是基于连接对象的。
    Statement createStatement(); //创建操作sql语句的对象

    API详解:java.sql.Statement接口: 操作sql语句,并返回相应结果

    String sql = "某SQL语句";
    获取Statement语句执行平台:Statement stmt =con.createStatement();

    常用方法:

    int executeUpdate(String sql); --执行insert update delete语句.
    ResultSet executeQuery(String sql); --执行select语句.
    boolean execute(String sql); --仅当执行select并且有结果时才返回true,执行其他的语句返回false.

    API详解:处理结果集(注:执行insert、update、delete无需处理)

    ResultSet实际上就是一张二维的表格,我们可以调用其 boolean next() 方法指向某行记录,当第一次调用
    next() 方法时,便指向第一行记录的位置,这时就可以使用ResultSet提供的 getXXX(int col) 方法来获取指
    定列的数据:(与数组索引从0开始不同,这里索引从1开始)

    rs.next();//指向第一行
    rs.getInt(1);//获取第一行第一列的数据

    常用方法:

    Object getObject(int index) /  Object getObject(String name) 获得任意对象
    String getString(int index) /  String getString(String name) 获得字符串
    int getInt(int index) /  int getInt(String name) 获得整形
    double getDouble(int index) /  double getDouble(String name) 获得双精度浮点型

    API详解:释放资源

    与IO流一样,使用后的东西都需要关闭!关闭的顺序是先得到的后关闭,后得到的先关闭。

    rs.close();
    stmt.close();
    con.close();

    3.5 JDBC工具类

    使用工具类对数据库进行增删改查

    
    
    package com.qingmu.test;

    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;

    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;

    /**
    * @Auther:qingmu
    * @Description:脚踏实地,只为出人头地
    * @Date:Created in 12:51 2019/3/25
    */
    public class UtilsTest {

    private Connection connection = null;
    private Statement statement = null;
    private ResultSet resultSet = null;

    // 获取连接,执行sql的语句
    @Before
    public void before() throws SQLException {
    connection = JDBCUtils.getConnection();
    statement = connection.createStatement();
    }

    /**
    * 对数据库进行更新
    *
    * @throws SQLException
    */
    @Test
    public void updateTest() throws SQLException {
    String sql = "update category set cname = '钢铁侠' where cid = 1";
    int i = statement.executeUpdate(sql);
    System.out.println(i);
    // 关闭资源
    }

    /**
    * 对数据库进行删除
    */
    @Test
    public void deleteTest() throws SQLException {

    String sql = "delete from category where cname = '钢铁侠'";
    int i = statement.executeUpdate(sql);
    System.out.println(i);
    // 关闭资源
    }

    /**
    * 向数据库中增加一条数据
    */
    @Test
    public void insertTest() throws SQLException {

    String sql = "insert into category values(4,'猪猪侠')";
    int i = statement.executeUpdate(sql);
    System.out.println(i);
    // 关闭资源
    }

    /**
    * 从数据库中查询出一条语句
    */
    @Test()
    public void queryTest() throws SQLException {
    String sql = "select * from category";
    ResultSet resultSet = statement.executeQuery(sql);
    while (resultSet.next()) {
    int cid = resultSet.getInt("cid");
    String cname = resultSet.getString("cname");
    System.out.println(cid + "=======" + cname);
    }
    // 关闭资源
    }

    //在这里进行关闭资源
    @After
    public void after() {
    JDBCUtils.closeResource(connection, statement, resultSet);
    }
    }

    在这里本人只是进行了简单的 测试

  • 相关阅读:
    如何判断两个数组是否相等?
    正则表达式
    开发板 Linux驱动视频 驱动是什么
    关于模型的评估
    Python画图参数设置
    Python图片的横坐标汉字
    矩阵的点成和叉乘
    svd 奇异值分解
    Python的主成分分析PCA算法
    论文参考文献格式
  • 原文地址:https://www.cnblogs.com/qingmuchuanqi48/p/10593447.html
Copyright © 2011-2022 走看看