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("编号\t姓名\t邮箱\t生日");
                System.out.println(id + "\t" + name + "\t" + email + "\t" + birth+"\t");
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            //调用工具类,关闭资源
            JDBCUtils.close(connection,statement,null);
        }
    }
}
posted @ 2020-03-04 16:58  "无问西东"  阅读(439)  评论(0编辑  收藏  举报
网络创业项目 123how出海导航