将JDBC冗余的代码进行封装,此处的冗余特指每次操作数据库必然建立连接和关闭流操作!代码注释很详细,此处不过多解释,直接进入代码部分:
1 package edu.aeon.jdbc; 2 import java.io.IOException; 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.SQLException; 7 import java.util.Properties; 8 /** 9 * 类作用:该类用于封装jdbc对数据库(打开、关流)操作! 10 * @author lzj 11 * @create 2017年11月15日 下午5:53:43 12 */ 13 public class JdbcUtil { 14 static Properties prs=null; 15 //加载资源文件处理类、只加载一次、且最先要加载到内存堆中 16 /* 17 * static{}(静态代码块)与{}(非静态代码块)的异同点 18 相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个, 19 一般在代码块中对一些static变量进行赋值。 20 不同点:静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。 21 静态代码块只在第一次new执行一次,之后不再执行,而非静态代码块在每new 22 一次就执行一次。非静态代码块可在普通方法中定义(不过作用不大);而静态代码块不行。*/ 23 static { 24 prs=new Properties(); 25 try { 26 //加载数据库配置文件,如果加载xml,可用loadXML() 27 prs.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("database.properties")); 28 } catch (IOException e) { 29 e.printStackTrace(); 30 } 31 } 32 /** 33 * @describe 用于建立与mysql数据库之间的连接 34 * @create at 2017年11月15日 下午6:51:35 by lzj 35 * @Parameters1 无 36 * @Returns Connection 数据库连接对象 37 */ 38 public static Connection getMysqlConnection(){ 39 try { 40 //注册mysql驱动类 41 Class.forName(prs.getProperty("mysql.driver")); 42 //将根据所传入url,用户名,密码所建立的mysql数据库连接对象返回 43 return DriverManager.getConnection( 44 prs.getProperty("mysql.url"), 45 prs.getProperty("mysql.username"), 46 prs.getProperty("mysql.password")); 47 } catch (ClassNotFoundException e) { 48 e.printStackTrace(); 49 System.out.println("加载mysql驱动类时出错!"); 50 return null; 51 } catch (SQLException e) { 52 e.printStackTrace(); 53 System.out.println("建立数据库连接时出错!"); 54 return null; 55 } 56 } 57 /** 58 * @descibe 该静态方法用于关闭对数据库的流操作!(可重载) 59 * 此处为了简单演示只写了一个关闭类,实际开发中该类重载很多次! 60 * @create at 2017年11月15日 下午6:54:45 by lzj 61 * @Parameters1 ps 数据库操作对象 、预编译 62 * @Parameters2 conn 数据库连接对象 63 * @Returns void 64 */ 65 public static void closeResource(PreparedStatement ps,Connection conn){ 66 try { 67 if(ps!=null) { 68 ps.close(); 69 } 70 } catch (Exception e) { 71 e.printStackTrace(); 72 System.out.println("ps流关闭异常!"); 73 } 74 try { 75 if(conn!=null) { 76 conn.close(); 77 } 78 } catch (Exception e) { 79 e.printStackTrace(); 80 System.out.println("conn流关闭异常!"); 81 } 82 } 83 }
配置文件database.properties:
1 ####################[mysql]#################### 2 mysql.driver = com.mysql.jdbc.Driver 3 mysql.url = jdbc:mysql://localhost:3306/student 4 mysql.username = root 5 mysql.password = lzj_aeon+ 6 ####################[oracle]#################### 7 oracle.driver = 8 oracle.url = 9 oracle.username = 10 oracle.userpw =
封装好了之后我们写个测试类:
1 package edu.aeon.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.SQLException; 6 7 /** 8 * @author lzj 9 * @create 2017年11月15日 下午6:40:39 10 * @describe 11 */ 12 public class Test { 13 14 /** 15 * at 2017年11月15日 下午6:40:39 by lzj 16 * @Parameters1 String[] args 17 * @Returns void 18 */ 19 public static void main(String[] args) throws SQLException { 20 Connection conn = JdbcUtil.getMysqlConnection(); 21 PreparedStatement ps=null; 22 String sql="insert into student (id,name) values (?,?)"; 23 try { 24 ps = conn.prepareStatement(sql); 25 ps.setInt(1, 666); 26 ps.setString(2, "lzj"); 27 ps.execute(); 28 System.out.println("数据插入成功!"); 29 } catch (SQLException e) { 30 e.printStackTrace(); 31 conn.rollback(); 32 System.out.println("数据插入失败!"); 33 }finally { 34 JdbcUtil.closeResource(ps, conn); 35 } 36 } 37 }
测试结果截图:
数据库相应信息截图:
为了方便大家共同学习,源码已打包上传至我的网盘:http://pan.baidu.com/s/1eS8LhAE 密码:z60x