第五周收获

为了查询方便,做了一个工具包,里面有集中对于jdbc使用起来比较方便的方法

package com.softeem.utils;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
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;
import java.util.Properties;
import java.util.Set;
 
public class DBUtils {
 
 public static  String driver;
 public static  String url;
 public static  String username;
 public static  String password;
 
//在javaproject中先创建一个文件,里面写入
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://127.0.0.1/test
jdbc.username = root
jdbc.password = 123456
然后通过下面的方法静态块读取文件内容。
 static{
  try {
   //读取属性文件输入流
   InputStream is = DBUtils.class.getResourceAsStream("jdbc.properties");
   //创建properties对象
   Properties p = new Properties();
   p.load(is);
   driver = p.getProperty("jdbc.driver");
   url = p.getProperty("jdbc.url");
   username = p.getProperty("jdbc.username");
   password = p.getProperty("jdbc.password");
   
   Class.forName(driver);
  } catch (IOException e) {
   e.printStackTrace();
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  }
 }
 /**
  * 连接方法
  *
  * @return
  */
 public static Connection getconn(){
  try {
   return DriverManager.getConnection(url,username,password);
  } catch (SQLException e) {
   e.printStackTrace();
  }
  return null;
 }
 /**
  * 回收资源
  * @param stmt
  * @param conn
  */
 public static void close(Statement stmt,Connection conn){
  try {
   if (stmt != null) {
    stmt.close();
   }
   if (conn != null) {
    conn.close();
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }
 /**
  * 对更新操作的通用方法
  * @param sql
  * @param obj
  * @return
  */
 public static boolean exeUpdate(String sql,Object[] obj){
  Connection conn = null;
  PreparedStatement ps = null;
  try {
   conn = DBUtils.getconn();
   ps = conn.prepareStatement(sql);
   for (int i = 0; i < obj.length; i++) {
    ps.setObject(i+1, obj[i]);
   }
   return ps.executeUpdate()>0;
  } catch (SQLException e) {
   e.printStackTrace();
  }
  return false;
 }
 /**
  * 查询全部数据
  * @param t
  * @param sql
  * @param params
  * @return
  */
 public static<T> List<T> queryList(Class<T> t,String sql,Object...params){
  T obj = null;
  List<T> list = new ArrayList<>();
  Connection conn = null;
  PreparedStatement ps = null;
  
  try {
   conn = getconn();
   ps = conn.prepareStatement(sql);
   for (int i = 0; i < params.length; i++) {
    ps.setObject(i+1, params[i]);
   }
   ResultSet  rs = ps.executeQuery();
   //获取查询结果中的元素数据(获取列类型,数量以及长度等信息)
   ResultSetMetaData rsmd = rs.getMetaData();
   //声明一个map集合,用于临时存储查询的一条数据(key:列名 value:列值)
   Map<String, Object> map = new HashMap<>();
   //遍历结果集
   while (rs.next()) {
    //防止缓存上一条的数据,不清除也行,会把上一行数据覆盖掉,不影响结果,只是这样更加准确
    map.clear();
    //遍历所有的列
    for (int i = 0; i < rsmd.getColumnCount(); i++) {
     //获取列名
     String cname = rsmd.getColumnLabel(i+1);
     //获取列值(根据列名获取列值)
     Object value = rs.getObject(cname);
     //将列名与列值存储到map中
     map.put(cname, value);
    }
    //利用反射将map中的数据注入到java对象中,并将对象存入集合
    if (!map.isEmpty()) {
     //获取map集合中的键集(列名集合)
     Set<String> columnNames = map.keySet();
     //创建对象
     obj = t.newInstance();
     for (String column : columnNames) {
      //根据键获取值
      Object value = map.get(column);
      //获取属性对象
      Field f = t.getDeclaredField(column);
      //设置属性为可访问状态
      f.setAccessible(true);
      //为属性设值
      f.set(obj, value);
     }
     list.add(obj);
    }
   }
  } catch (SQLException e) {
   e.printStackTrace();
  } catch (InstantiationException e) {
   e.printStackTrace();
  } catch (IllegalAccessException e) {
   e.printStackTrace();
  } catch (NoSuchFieldException e) {
   e.printStackTrace();
  } catch (SecurityException e) {
   e.printStackTrace();
  }
  
  
  return list;
  
 }
 
 
 public static void main(String[] args) {
  System.out.println(getconn());
 }
}

猜你喜欢

转载自www.cnblogs.com/zt-bk/p/9454665.html
今日推荐