zoukankan      html  css  js  c++  java
  • JDBC连接MySQL操作数据_封装工具类

    数据库驱动

    安装数据库后,我们的程序是不可以直接进行数据库连接的,需要对应的数据驱动(就像我们电脑的声卡、网卡也不是插上就能用的,也需要驱动),通过驱动去和数据库打交道,如图:
    

    JDBC

    SUN 公司为了简化、统一对数据的凑在哦、定义了一套 Java 操作数据库的规范(接口),称之为 JDBC(Java DataBase Connection)。这套接口由数据库厂商去实现,这样开发人员只需学习 jdbc 接口,并通过 jdbc 加载具体的驱动,就可以操作数据库。
    

    相关API

    • DriverManager驱动管理类
    • Connection连接对象接口(通过 DriverManager 获取对象)
      • createStatement():生成命令对象
      • preparedStatement():生成预编译命令对象
    • Statement命令对象接口(通过 Connection 获取对象)
      • executeQuery():执行SQL增删改查语句,返回首影响行数
      • executeUpdate():执行SQL查询语句,返回结果集
      • execure():执行任何SQL语句,返回boolean
    • prearedStatement预编译命令对象接口(Statement 子类,也通过 Connection 获取对象)
      • executeQuery():执行SQL增删改查语句,返回首影响行数
      • executeUpdate():执行SQL查询语句,返回结果集
      • execure():执行任何SQL语句,返回boolean
      • setXxxx(占位符索引,占位符的值):设置对应索引的占位符的值,类型为XX类型
      • setObject(占位符索引,占位符的值):设置对应索引的占位符的值,类型为Object类型
    • CallableStatement : 调用数据库中的 存储过程/存储函数(Statement 子类,也通过 Connection 获取对象)
    • ResultSet结果集对象接口(通过 Statement 获取对象)
      • next():下移一行返回当前行是否有值(类似java迭代器)
      • previous():上移一行,返回当前行是否有值
      • getXX(列索引|列名|别名):返回对应列的值,接收类型为XX
      • getObject(列索引|列名|别名):返回对应列的值,接收类型为Object
        afterLast() :移动到resultSet的最后面。
    • 释放资源
        Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, Statement和Connection对象,特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。
        为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。

    JDBC连接步骤:

    1. 读取配置文件
    2. 注册加驱动
    3. 创建连接
    4. 执行增删改查
    5. 关闭资源

    将其中1/2/3/5封装成工具类

    对JDBC连接过程通用部分封装为工具类:

    /**
     * @author YH
     * 功能:
     * 1.获取连接
     * 2.释放资源
     * @create 2020-03-04 15:27
     */
    public class JDBCUtils {
        static String user;
        static String password;
        static String url;
        static String driver;
        //读取配置属于共有操作,且执行一次即可,所以可以放入static代码块,随着工具类加载执行一次即可,提升效率
        static{
            //使用try-catch方式处理异常,免去调用者再次处理
            try {
                //读取配置文件
                Properties properties = new Properties();
                properties.load(new FileInputStream("JDBC\src\JDBCTest2\jdbc2.properties"));
                user = properties.getProperty("user");
                password = properties.getProperty("password");
                url = properties.getProperty("url");
                driver = properties.getProperty("driver");
                //注册驱动
                Class.forName(driver);
            } catch (Exception e) {
                //编译时异常转为运行时异常
                throw new RuntimeException(e);
            }
        }
    /**功能:用于获取连接
     * @return Connection连接对象
     * @ throws Exception
     *
     * */
        public static Connection getConnection(){
            //获取连接
            try {
                return DriverManager.getConnection(url,user,password);
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
        /**功能:释放资源
         * 通用的释放资源方法,无用参数留null
         * @param connection
         * @param statement PreparedStatement是其子类,使用多态,也可引用
         * @param resultSet
         */
        public static void close(Connection connection, Statement statement, ResultSet resultSet){
            //使用try-catch方式处理异常,免去调用者再次处理
            try {
                if(connection != null){
                    connection.close();
                }
                if(statement != null){
                    statement.close();
                }
                if(resultSet != null){
                    resultSet.close();
                }
            } catch (SQLException e) {
                //编译时异常转为运行时异常
                throw new RuntimeException(e);
            }
        }
    }
    

    JDBC连接MySQL操作数据实例:

    public class Customers {
    
        public static void main(String[] args) throws SQLException, IOException, ClassNotFoundException {
            Customers customers = new Customers();
            customers.select();//查询数据
        }
        public void select() {
            Scanner info = new Scanner(System.in);
            System.out.print("请输入姓名:");
            String info_id = info.next();
            //调用工具类
            Connection connection = JDBCUtils.getConnection();
    
            System.out.println("连接成功");
    
            //执行增删改操作
            PreparedStatement statement = null;
            try {
                String sql = "select * from customers where name=?;";
                statement = connection.prepareStatement(sql);
                statement.setString(1,info_id);
                ResultSet set = statement.executeQuery();
                while(set.next()){
                    String id =  set.getString(1);
                    String name = set.getString(2);
                    String email = set.getString(3);
                    String birth = set.getString(4);
    
                    System.out.println("编号	姓名	邮箱	生日");
                    System.out.println(id + "	" + name + "	" + email + "	" + birth+"	");
                }
            } catch (SQLException e) {
                throw new RuntimeException(e);
            } finally {
                //调用工具类,关闭资源
                JDBCUtils.close(connection,statement,null);
            }
        }
    }
    
  • 相关阅读:
    ----Vue 单页应用的首屏优化----
    ----小程序之rich-text图片宽度自适应----
    ----vue-router 如何在新窗口打开页面----
    ----element-ui实现时间控件开始时间和结束时间关联----
    ----element-ui自定义表单验证----
    ----js中的every和some----
    「Linux学习」之挂载访问samba服务
    「Linux学习」之samba和nfs共享服务搭建
    「Linux学习」之防火墙服务设置
    「linux学习」之批量创建用户脚本
  • 原文地址:https://www.cnblogs.com/csyh/p/12410528.html
Copyright © 2011-2022 走看看