• MySQL笔记--JDBC


    MySQL笔记--JDBC

    一、基本概念

    Java database connection java 连接数据库
    Sun公司定义个用java连接所有数据库的一组接口
    不同数据库厂商根据自己的数据库 提供jdbc的实现类 用于实现与java连接---数据库驱动


    图片

    二、步骤

    1. 导入驱动 jar 包
    2. 准备 JDBC 四大参数
      • 驱动类
      • 账号
      • 密码
      • 数据库服务器的 URL
        • URL 格式: 协议名称/主机名:端口号/目录/资源?请求参数
        • JDBC 的 URL : jdbc:mysql://localhost:3306/db_26
      String name ="root";
      // MySQL 用户名
      String pwd = "root";
      	// MySQL 密码
      String driverClass="com.mysql.jdbc.Driver";
      // 驱动
      String url="jdbc:mysql://127.0.0.1:3306/db_26"
      // URL
      
    3. 加载驱动类 com.sql.jabc.Driver
      Class.forName(URL);
      # 驱动类的全称
      
    4. 获取链接 Connection
      Connection con = DriverManager.getConneretcion(url,name,pwd);
      
    5. 通过 Statement 获取 SQL 语句的发送器对象
      Statement sta = con.createStatement();
      
    6. 准备 SQL 语句
      String sql = "select * from student";
      
    7. 通过 Statement 发送 SQL 语句
      ResultSet set = sta.executeQuery(sql);
      
    8. 解析结果集
      // 通过 next 方法判断 set 是否还有元素可以遍历
      while(set.next()){
      // 获取本行每列的数据
      
      // 指定列的索引,索引从 1 开始
      int sid  = set.getInt(1);
      // 指定列名
      String sname = set.getString("sname");
      }
      
    9. 关闭 连接
      set.close();
      sta.close();
      con.close();
      

    三、常用的接口

    1. Class 对类和字节码文件的封装
      • 静态方法:Class.forName("com.mysql.jdbc.Driver"); 于加载参数字符表示的类 类名必须是类的全称
        • 可能抛出异常: ClassNotFoundException
    2. DriverManager 驱动管理类
      • riverManager.getConnection(url,username,userPwd); 取url指定的数据库服务器的连接
        • 可能抛出异常:QLException
    3. Connection 封装连接的接口
      • 实例方法:onnection.createStatement();取sql语句发生器对象
      • 实例方法:onnection.close(); 关闭连接
    4. Statement 用于 Java 给 数据库 发送 SQL 语句
      • 实例方法:sultSet Statement.executeQuery(sql)执行select查询 获取结果集
      • 实例方法:nt Statement.executeUpdate(sql)执行dml/ddl查询 获取影响的行数
      • 实例方法:tatement.close(); 关闭
    5. ResultSet 封装 select 的结果集
      • 实例方法:ResultSet Statement.executeQuery(sql) 执行select查询 获取结果集
      • 实例方法:int Statement.executeUpdate(sql) 执行dml/ddl查询 获取影响的行数
      • 实例方法:Statement.close();关闭
    6. 练习 通过 JDBC 实现 增删更改查
    Static ArrayList<Student> getAll();
    Static Student getOne(int sid);
    Static boolean addOne(Student s);
    Static boolean UpdateOne(Student s);
    Static boolean deleteOne(int sid); 
    

    四、JDBC 工具类

    package com.zhiyou100.javawebreview.jdbc.learn;
    
    import java.sql.*;
    
    /**
     * @packageName: MyUtilOfMySQL
     * @className: com.zhiyou100.javawebreview.jdbc.learn
     * @Description: TODO JDBC 工具类
     * @author: yang
     * @date: 7/14/20
     */
    public class MyTool {
        {
            try {
                Class.forName(DRIVER_CLASS);
            } catch (ClassNotFoundException e) {
                throw new RuntimeException("加载驱动失败");
            }
        }
    
        private static final String IP = "192.168.217.82";
        private static final String PORT = "3306";
        private static final String DATABASE_NAME = "db_26";
        private static final String USER_NAME = "root";
        private static final String USER_PASSWORD = "1";
        private static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";
        private static final String URL = "jdbc:mysql://" + IP + ":" + PORT + "/" + DATABASE_NAME;
    
        /**
         * @Description: TODO 获取连接
         * @name: getConnection
         * @param: []
         * @return: java.sql.Connection
         * @date: 7/14/20 17:55
         * @author: yang
         */
        public static Connection getConnection() {
            try {
                return DriverManager.getConnection(URL, USER_NAME, USER_PASSWORD);
            } catch (SQLException throwable) {
                throw new RuntimeException("获取连接失败");
            }
        }
    
        /**
         * @Description: TODO 关闭  JDBC
         * @name: close
         * @param: [resultSet, statement, connection]
         * @return: void
         * @date: 7/14/20 19:07
         * @author: yang
         */
        public static void close(ResultSet resultSet, Statement statement, Connection connection) {
            if (resultSet == null) {
                // 如果 resultSet 为 null,关闭 后两个
                close(statement, connection);
                return;
            }
            if (statement == null || connection == null) {
                throw new RuntimeException("statement 或者 connection 为 null");
            }
            try {
                resultSet.close();
            } catch (SQLException throwable) {
                throw new RuntimeException("resultSet 关闭失败");
            }
            try {
                statement.close();
            } catch (SQLException throwable) {
                throw new RuntimeException("statement 关闭失败");
            }
            try {
                connection.close();
            } catch (SQLException throwable) {
                throw new RuntimeException("connection 关闭失败");
            }
        }
    
    
        /**
         * @Description: TODO 关闭 JDBC
         * @name: close
         * @param: [statement, connection]
         * @return: void
         * @date: 7/14/20 19:07
         * @author: yang
         */
        public static void close(Statement statement, Connection connection) {
            try {
                statement.close();
            } catch (SQLException throwable) {
                throw new RuntimeException("statement 关闭失败");
            }
            try {
                connection.close();
            } catch (SQLException throwable) {
                throw new RuntimeException("connection 关闭失败");
            }
        }
    
    
        public static void main(String[] args) throws SQLException {
    //        Connection connection = getConnection();
    //        Statement statement = connection.createStatement();
    //        String sql = "select  * from student";
    //        ResultSet resultSet = statement.executeQuery(sql);
    //        while (resultSet.next()) {
    //            int sid = resultSet.getInt("sid");
    //            String sname = resultSet.getString("sname");
    //            char sex = resultSet.getString("sex").charAt(0);
    //            int sage = resultSet.getInt("sage");
    //            int scid = resultSet.getInt("scid");
    //            Student student = new Student(sid, sname, sex, sage, scid);
    //            System.out.println(student);
    //        }
    //        close(resultSet, statement, connection);
    
            Connection connection = getConnection();
            Statement statement = connection.createStatement();
            String sql = "alter table tab_3 drop tname ";
            int i = statement.executeUpdate(sql);
            System.out.println(i);
            close(statement, connection);
    
        }
    }
    

    五、预编译对象 preparedStatement

    private static Student getOne(int sid) throws SQLException {
            Student student = new Student();
            Connection connection = getConnection();
            // 准备 sql 模版
            String sql = "select * from student where sid=?";
            // 发送 sql 模版,获取预编译对象
            PreparedStatement statement = connection.prepareStatement(sql);
            // 设置 模版的的参数
            statement.setInt(1, sid);
            // 执行查询语句,获取结果集
            ResultSet resultSet = statement.executeQuery();
            // 处理结果集
            while (resultSet.next()) {
                sid = resultSet.getInt("sid");
                String sname = resultSet.getString("sname");
                char sex = resultSet.getString("sex").charAt(0);
                int sage = resultSet.getInt("sage");
                int scid = resultSet.getInt("scid");
                student = new Student(sid, sname, sex, sage, scid);
    
            }
            // 关闭连接
            close(resultSet, statement, connection);
            return student;
        }
    

    六、其他

  • 相关阅读:
    linq to access 简单实现 实例demo
    FCKEDITOR中文使用说明 js调用
    asp.net mvc 随想
    fccms 小型简单个人blog源码
    PHP文件上传路径
    前端优化技巧(一)
    会话框拖拽效果实现
    phpmailer配置
    上传图片动态预览(兼容主流浏览器)
    Java将多个list对象根据属性分组后合并成一个新的集合
  • 原文地址:https://www.cnblogs.com/javayanglei/p/13305260.html
Copyright © 2020-2023  润新知