为了查询方便,做了一个工具包,里面有集中对于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;
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
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());
}
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());
}
}