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(); } } } }
相关文章
相关标签/搜索