JDBC連接數據庫基本的步驟是固定的,這樣就可以考慮封裝一個工具類來簡化數據庫操作。
封裝時用到了Java中的properties配置文件,是以一種鍵值對的形式存在的,可以把連接數據庫要動態的信息保存到里面,這樣比較直觀,不容易出錯,而且容易維護。
把配置文件放到src下就可以,如果要放到包下面就配置文件的相對路徑就必須從包名開始。
Demo :
db.properties
mysqlDriver=com.mysql.jdbc.Driver mysqlURL=jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8 mysqlUser=root mysqlPwd=1234 oracleDriver=oracle.jdbc.driver.OracleDriver oracleURL=jdbc\:oracle\:thin\:@localhost\:1521\:orcl oracleUser=scott oraclePwd=tiger
JDBCUtil.java
package com.wxisme.jdbcutil; import java.io.Closeable; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; /** * JDBC數據庫操作工具類 簡化數據庫操作 * @author wxisme * */ public class JDBCUtil { //資源文件 static Properties pros = null; //靜態初始化 當加載JDBCUtil類時調用 static { pros = new Properties(); try { //加載資源文件 InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"); if(in == null) { throw new FileNotFoundException("配置文件未找到"); } pros.load(in); } catch (IOException e) { e.printStackTrace(); } } /** * 獲取數據庫連接 * @return Connection */ public static Connection getMySQLConnection() { Connection conn = null; try { //加載數據庫驅動 Class.forName(pros.getProperty("mysqlDriver")); //獲取數據庫連接 conn = DriverManager.getConnection(pros.getProperty("mysqlURL"), pros.getProperty("mysqlUser"),pros.getProperty("mysqlPwd")); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } public static Connection getOracleConn(){ try { Class.forName(pros.getProperty("oracleDriver")); return DriverManager.getConnection(pros.getProperty("oracleURL"), pros.getProperty("oracleUser"),pros.getProperty("oraclePwd")); } catch (Exception e) { e.printStackTrace(); return null; } } /** * 關閉io資源 * @param io */ public static void closeFile(Closeable ... io) { for(Closeable temp : io) { if(temp != null) { try { temp.close(); } catch (IOException e) { System.out.println("文件關閉失敗"); e.printStackTrace(); } } } } //關閉JDBC資源 注意順序 public static void close(ResultSet rs,Statement ps,Connection conn) { try { if(rs!=null){ rs.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if(ps!=null){ ps.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if(conn!=null){ conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } public static void close(Statement ps,Connection conn){ try { if(ps!=null){ ps.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if(conn!=null){ conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } public static void close(Connection conn){ try { if(conn!=null){ conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } }
UtilTest.java
package com.wxisme.jdbcutil; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class UtilTest { public static void main(String[] args) { Connection conn = JDBCUtil.getMySQLConnection(); PreparedStatement ps = null; ResultSet rs = null; String sql = "select * from student where id = ?"; try { ps = conn.prepareStatement(sql); ps.setInt(1, 1); rs = ps.executeQuery(); while(rs.next()) { System.out.println(rs.getString("name")); } } catch (SQLException e) { e.printStackTrace(); } } }
還可以進一步封裝成線程安全的工具類。