briup_jdbc自建工具類終極版

總結:這次構建工具類,難點在於查詢,所須要的功能是 無論是 oracle仍是mysql 均可以鏈接,而且 提供所須要的實體類,均可以將查詢內容封裝到實體類中去java

遇到的難點  鏈接時,是從prpperties.txt文件中讀取驅動url等 時,怎麼將它加載進來 此時可使用類加載器 來加載相應的文件  當前類.class.classloader().getResourceAsStream(文件地址:注意此時不是從src了s 是從 包名 開始寫路徑)mysql

 

 

 

第二個難點:時在構建查詢時,使用的數據庫是oracle 查詢到的列名是大寫的,須要進行轉換成小寫的sql

      oracle 的 number 類型 在java中會解析成 BigDecimal,須要將它進行轉換,而後轉換成int 數據庫

 

代碼:oracle

 

package com.briup.jdbc;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;

import oracle.net.aso.l;

public class JDBCUtils3 {
    // 得到連接
    public static Connection getConnection(String str, String filePath) {
        if ("mysql".equals(str)) {
            try {

                Properties properties = new Properties();
                FileInputStream fis = null;
                try {
                    fis = new FileInputStream(new File(filePath));
                } catch (FileNotFoundException e2) {
                    e2.printStackTrace();
                }
          // 自定義輸入流能夠替代類加載器加載(須要把文件放在包下) // InputStream in = // JdbcUtils2.class.getClassLoader().getResourceAsStream("com/briup/jdbc/properties.txt"); try { properties.load(fis); } catch (IOException e1) { e1.printStackTrace(); } String driver = (String) properties.get("driver"); String url = (String) properties.get("url"); String username = (String) properties.get("username"); String password = (String) properties.get("password"); Class.forName(driver); try { Connection conn = DriverManager.getConnection(url, username, password); // System.out.println("鏈接到mysql數據庫" + conn); return conn; } catch (SQLException e) { e.printStackTrace(); } } catch (ClassNotFoundException e) { e.printStackTrace(); } } if ("oracle".equals(str)) { Properties properties = new Properties(); FileInputStream fis = null; try { fis = new FileInputStream(new File(filePath)); } catch (FileNotFoundException e2) { e2.printStackTrace(); } try { properties.load(fis); } catch (IOException e1) { e1.printStackTrace(); } String driver = (String) properties.get("driver"); String url = (String) properties.get("url"); String username = (String) properties.get("username"); String password = (String) properties.get("password"); try { Class.forName(driver); try { Connection conn = DriverManager.getConnection(url, username, password); System.out.println("鏈接到orcle數據庫"); return conn; } catch (SQLException e) { e.printStackTrace(); } } catch (ClassNotFoundException e) { e.printStackTrace(); } } return null; } // 通用的查詢方法 public static
<T> List<T> query2(Connection conn, String ss,String sql, Object... args) { List<T> list = null; try { // 獲取prepareStatement對象 PreparedStatement prepareStatement = conn.prepareStatement(sql); // 經過傳進來的參數(佔位符),將整個sql語句補充好 for (int i = 0; i < args.length; i++) { // 注:這裏須要+1 prepareStatement.setObject(i + 1, args[i]); } // 得到結果集 ResultSet resultSet = prepareStatement.executeQuery(); // 這裏準備獲取結果集裏面的全部的列名 List<String> labels = new ArrayList<String>(); // 獲取數據庫中列名的所有集合(元數據) ResultSetMetaData metaData = resultSet.getMetaData(); for (int i = 0; i < metaData.getColumnCount(); i++) { // 這裏一樣要加1,從1開始計數的 labels.add(metaData.getColumnLabel(i + 1)); } // 建立一個map,將查詢到的字段名,和它的值存到map中,以便取出 // key:列名,value:字段的值 HashMap<String, Object> map = new HashMap<String, Object>(); // 建立一個list,存儲數據 list = new ArrayList<T>(); // s是列名 while (resultSet.next()) { map.clear(); for (String s : labels) { map.put(s, resultSet.getObject(s)); } // 若是map不爲空,遍歷map,將它的值存到實體類中去 if (!map.isEmpty()) { Set<Entry<String, Object>> entrySet = map.entrySet(); for (Entry<String, Object> entry : entrySet) { System.out.print(entry.getKey()+":"+entry.getValue()+" "); if(entry.getKey().equals(ss)) { System.out.println(); } } } } } catch (SQLException e) { e.printStackTrace(); } return list; } // 通用的查詢方法 public static <T> List<T> query(Class<T> tClass, Connection conn, String sql, Object... args) { List<T> list = null; try { // 獲取prepareStatement對象 PreparedStatement prepareStatement = conn.prepareStatement(sql); // 經過傳進來的參數(佔位符),將整個sql語句補充好 for (int i = 0; i < args.length; i++) { // 注:這裏須要+1 prepareStatement.setObject(i + 1, args[i]); } // 得到結果集 ResultSet resultSet = prepareStatement.executeQuery(); // 這裏準備獲取結果集裏面的全部的列名 List<String> labels = new ArrayList<String>(); // 獲取數據庫中列名的所有集合(元數據) ResultSetMetaData metaData = resultSet.getMetaData(); for (int i = 0; i < metaData.getColumnCount(); i++) { // 這裏一樣要加1,從1開始計數的 labels.add(metaData.getColumnLabel(i + 1)); } // 建立一個map,將查詢到的字段名,和它的值存到map中,以便取出 // key:列名,value:字段的值 HashMap<String, Object> map = new HashMap<String, Object>(); // 建立一個list,存儲數據 list = new ArrayList<T>(); // s是列名 while (resultSet.next()) { map.clear(); for (String s : labels) { map.put(s, resultSet.getObject(s)); } // 若是map不爲空,遍歷map,將它的值存到實體類中去 if (!map.isEmpty()) { try { // 建立一個實例,這裏開始利用反射了 T newInstance = tClass.newInstance(); Set<Entry<String, Object>> entrySet = map.entrySet(); for (Entry<String, Object> entry : entrySet) { String name = entry.getKey(); Object value = entry.getValue(); if(value instanceof BigDecimal) { value=((BigDecimal) value).intValue(); } try { // 獲取屬性,給屬性賦值 Field field = tClass.getDeclaredField(name.toLowerCase()); field.setAccessible(true); field.set(newInstance, value); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } } list.add(newInstance); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } } catch (SQLException e) { e.printStackTrace(); } return list; } // 刪除數據 public static void delete(Connection conn, String sql) { try { Statement statement = conn.createStatement(); try { statement.execute(sql); System.out.println("刪除數據成功!"); } catch (Exception e) { System.err.println("出現問題了" + e.getMessage()); e.printStackTrace(); } } catch (SQLException e) { e.printStackTrace(); } } // 修改一條數據 public static void Update(Connection conn, String sql) { try { Statement statement = conn.createStatement(); try { statement.execute(sql); System.out.println("修改數據成功"); } catch (Exception e) { System.err.println("出現問題了" + e.getMessage()); e.printStackTrace(); } } catch (SQLException e) { e.printStackTrace(); } } // 添加一條數據 public static void add(Connection conn, String sql) { try { Statement statement = conn.createStatement(); try { statement.execute(sql); System.out.println("插入數據成功!"); } catch (Exception e) { System.err.println("出現問題了" + e.getMessage()); e.printStackTrace(); } } catch (SQLException e) { e.printStackTrace(); } } // 關閉鏈接 public static void close(Statement st, ResultSet rs, Connection conn) { if (st != null) { try { st.close(); } catch (SQLException e) { e.printStackTrace(); } } if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
相關文章
相關標籤/搜索