• JDBC封装学习笔记(一)


    这几天一直在研究JDBC,相比于之前那种简单的代码,更需要追求封装性更好的代码,这样耦合度才会降低,比如,各种数据库的配置都放在一个properties文件中,这样在维护时就可以不用修改代码,直接修改配置文件的数据库信息即可。这个例子我用的是Mysql数据库,首先目录结构如下图所示:

    jdbc.properties中的主要内容如下图所示,localhost:3306/后面是数据库的名称

    然后接下来就到了重头戏了,代码部分,这里我封装了一个公共类,然后里面暂时写了两个方法,连接数据库和释放资源,当然这一次的实例不涉及到select操作,所以释放资源没有,不过道理是一样的,不过释放资源时,相比statement,connection。ResultSet对象是要先释放的

     1 公共类:JDBCUtils
     2 
     3 package com.jdbc.basedemo;
     4 
     5 import java.io.IOException;
     6 import java.io.InputStream;
     7 import java.sql.Connection;
     8 import java.sql.DriverManager;
     9 import java.sql.ResultSet;
    10 import java.sql.SQLException;
    11 import java.sql.Statement;
    12 import java.util.Properties;
    13 
    14 /*
    15 * 操作数据库的公共类,里面是一些公共方法
    16 * */
    17 public class JDBCUtils {
    18 // 获取数据库连接
    19 // 连接数据库
    20 
    21 public static Connection getConnection() throws ClassNotFoundException, IOException, SQLException {
    22 // 定义相关变量
    23 String driverClass = null;
    24 String jdbcUrl = null;
    25 String user = null;
    26 String password = null;
    27 
    28 // 读取配置文件jdbc.properties
    29 InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
    30 
    31 Properties properties = new Properties();
    32 properties.load(in);
    33 driverClass = properties.getProperty("driver");
    34 jdbcUrl = properties.getProperty("jdbcUrl");
    35 user = properties.getProperty("user");
    36 password = properties.getProperty("password");
    37 // 加载数据库驱动
    38 Class.forName(driverClass);
    39 // 获取连接
    40 Connection conn = DriverManager.getConnection(jdbcUrl, user, password);
    41 return conn;
    42 }
    43 
    44 // 释放资源的方法
    45 
    46 public static void closeSource(ResultSet rs, Statement statement, Connection conn) {
    47 if (rs != null) {
    48 try {
    49 rs.close();
    50 } catch (Exception e) {
    51 // TODO: handle exception
    52 e.printStackTrace();
    53 }
    54 }
    55 if (statement != null) {
    56 try {
    57 statement.close();
    58 } catch (Exception e) {
    59 // TODO: handle exception
    60 e.printStackTrace();
    61 }
    62 }
    63 if (conn != null) {
    64 try {
    65 conn.close();
    66 } catch (Exception e) {
    67 // TODO: handle exception
    68 e.printStackTrace();
    69 }
    70 }
    71 }
    72 
    73 }

    然后写了一个测试类,里面封装了一个公共的执行SQL的方法:

     1 TestJDBCDemo文件:
     2 
     3 package com.jdbc.basedemo;
     4 
     5 import java.io.IOException;
     6 import java.sql.Connection;
     7 import java.sql.SQLException;
     8 import java.sql.Statement;
     9 
    10 import org.junit.Test;
    11 
    12 public class TestJDBCDemo {
    13 
    14 public static void main(String[] args) {
    15 // TODO Auto-generated method stub
    16 
    17 }
    18 
    19 // 封装一个通用的更新方法,适用于INSERT,UPDATE,DELETE
    20 public void updateData(String sql) {
    21 // 获取连接
    22 Connection conn = null;
    23 Statement statement = null;
    24 try {
    25 conn = JDBCUtils.getConnection();// 获得连接
    26 statement = conn.createStatement(); // 创建statement对象
    27 statement.executeUpdate(sql);
    28 System.out.println(sql);
    29 System.out.println("SQL执行成功");
    30 } catch (ClassNotFoundException e) {
    31 // TODO Auto-generated catch block
    32 e.printStackTrace();
    33 } catch (IOException e) {
    34 // TODO Auto-generated catch block
    35 e.printStackTrace();
    36 } catch (SQLException e) {
    37 // TODO Auto-generated catch block
    38 e.printStackTrace();
    39 } finally {
    40 JDBCUtils.closeSource(rs,statement, conn);
    41 System.out.println("资源关闭成功");
    42 }
    43 
    44 }

    // 测试方法

    //这里用的是Junit框架,需要Junit的jar包
    @Test
    public void test01() {
    String sql = "UPDATE userinfo SET username='伊戈达拉' WHERE username like '%杜兰特%'";
    updateData(sql);
    }

    }

    最后控制台运行结果截图附上:

  • 相关阅读:
    async/await语法
    generator生成器函数
    数组练习
    解决异步(重点promise函数)
    iterator遍历器
    各种遍历方法(重点for....of)
    ES6代理proxy
    Symbol新数据类型
    函数(rest 箭头)
    ES6常用方法(字符串,数字,数组,对象)
  • 原文地址:https://www.cnblogs.com/yaoruozi/p/8506058.html
Copyright © 2020-2023  润新知