jdbc基礎 (二) 通過properties配置檔案連線資料庫
阿新 • • 發佈:2019-01-01
上一篇描述了對mysql資料庫的簡單操作,下面來看一下開發中應該如何靈活應用。
因為jdbc對資料庫的驅動載入、連接獲取、釋放資源的程式碼都是相同的,為了提高程式碼的複用性,我們可以寫一個工具類,將資料庫驅動載入、獲取連線、資源釋放的程式碼封裝起來。同時,為了提高工具類的靈活性,可以將資料庫的驅動、url、使用者名稱、密碼等資訊以鍵值對的形式存放在properties檔案中,工具類初始化時從配置檔案中讀取所要連線資料庫的資訊。當需要更改連線的資料庫時,只需要更改配置檔案即可,而不必改寫工具類的程式碼。
下面是工具類程式碼的實現:
package com.cream.ice.jdbc; 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; public class JdbcUtils { private static String driverName; private static String url; private static String user; private static String password; /* * 靜態程式碼塊,類初始化時載入資料庫驅動 */ static { try { // 載入dbinfo.properties配置檔案 InputStream in = JdbcUtils.class.getClassLoader() .getResourceAsStream("dbinfo.properties"); Properties properties = new Properties(); properties.load(in); // 獲取驅動名稱、url、使用者名稱以及密碼 driverName = properties.getProperty("driverName"); url = properties.getProperty("url"); user = properties.getProperty("user"); password = properties.getProperty("password"); // 載入驅動 Class.forName(driverName); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } /* * 獲取連線 */ public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url, user, password); } /* * 釋放資源 */ public static void releaseResources(ResultSet resultSet, Statement statement, Connection connection) { try { if (resultSet != null) resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } finally { resultSet = null; try { if (statement != null) statement.close(); } catch (SQLException e) { e.printStackTrace(); } finally { statement = null; try { if (connection != null) connection.close(); } catch (SQLException e) { e.printStackTrace(); } finally { connection = null; } } } } }
這裡dbinfo.properties檔案中資訊如下,讀者可自行更改:
driverName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc
user=root
password=01050233
這裡我們來舉個例子使用工具類。我們寫一個類JdbcCURD實現對特定資料庫的增刪改查操作,並在main函式中使用。
JdbcCURD.java程式碼如下:
package com.cream.ice.jdbc; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JdbcCURD { private Connection connection; private Statement statement; private ResultSet resultSet; //更新操作 public void update(String sql) { try { connection = JdbcUtils.getConnection(); statement = connection.createStatement(); //可執行建立、修改、刪除表,新增、刪除、修改元組以及查詢sql語句 statement.execute(sql); } catch (SQLException e) { e.printStackTrace(); } finally { JdbcUtils.releaseResources(resultSet, statement, connection); } } //查詢操作 public void Query(String sql) { try { connection = JdbcUtils.getConnection(); statement = connection.createStatement(); resultSet = statement.executeQuery(sql); while(resultSet.next()){ System.out.println("name:"+resultSet.getString("name")); System.out.println("id:"+resultSet.getString("Tid")); } } catch (SQLException e) { e.printStackTrace(); } finally { JdbcUtils.releaseResources(resultSet, statement, connection); } } //新增操作 public void addElement(String sql) { update(sql); } //刪除操作 public void removeElement(String sql) { update(sql); } //建立一個表 public void createTable(String sql){ update(sql); } //刪除一個表 public void dropTable(String sql){ update(sql); } }
我們來寫一個main函式來測試:
package com.cream.ice.jdbc; import java.sql.SQLException; public class JdbcTest { public static void main(String[] args) throws ClassNotFoundException, SQLException { JdbcCURD curd=new JdbcCURD(); String sql = null; //新增表Teacher sql="create table Teacher (Tid char(9) primary key,name char(9) unique)"; curd.createTable(sql); //新增元組 sql = "insert into Teacher (Tid,name) values ('0001','Tom')"; curd.addElement(sql); //查詢Teacher表 sql="select * from Teacher"; curd.Query(sql); //刪除元組 sql="delete from Teacher where Tid='0001'"; curd.removeElement(sql); //刪除表Teacher sql="drop table Teacher"; curd.dropTable(sql); } }
經測試,將在控制檯輸出下列資訊:
name:Tom
id:0001
與上一篇中對資料庫的操作相比,從配置檔案中讀取要連線資料庫的資訊,大大提高了程式碼的複用性以及靈活性,省去了當更改資料庫時還要更改程式碼的麻煩。