自己实现的JDBC工具类

public class DBConnUtil
{
// 数据库用户名
private String dbUsername = "c##hello";
// 数据库密码
private String dbPassword = "123456";
// 驱动信息
private String dbDriver = "oracle.jdbc.OracleDriver";
// 数据库地址
private String dbUrl = "jdbc:oracle:thin:@localhost:1521:orcl";
// db
private Connection db;
private PreparedStatement pstmt;
private ResultSet resultSet;


public String getDbUsername()
{
return dbUsername;
}


public void setDbUsername(String dbUsername)
{
this.dbUsername = dbUsername;
}


public String getDbPassword()
{
return dbPassword;
}


public void setDbPassword(String dbPassword)
{
this.dbPassword = dbPassword;
}


public String getDbDriver()
{
return dbDriver;
}


public void setDbDriver(String dbDriver)
{
this.dbDriver = dbDriver;
}


public String getDbUrl()
{
return dbUrl;
}


public void setDbUrl(String dbUrl)
{
this.dbUrl = dbUrl;
}


public DBConnUtil()
{
}


public DBConnUtil(String dbUsername, String dbPassword, String dbDriver,
String dbUrl)
{
this.dbUsername = dbUsername;
this.dbPassword = dbPassword;
this.dbDriver = dbDriver;
this.dbUrl = dbUrl;
}


/**
* 获得数据库的连接

* @return
*/
public Connection getConnection()
{
try
{
db = DriverManager.getConnection(getDbUrl(), getDbUsername(),
getDbPassword());
} catch (SQLException e)
{
e.printStackTrace();
}
return db;
}


/**
* 增删改

* @param sql
* @param params
* @return
* @throws SQLException
*/
public boolean execute(String sql, List<Object> params) throws SQLException
{
boolean isRollback = false;
try
{
db.setAutoCommit(isRollback);
setObject(sql, params);
pstmt.executeUpdate();
} catch (Exception ex)
{
isRollback = true;
} finally
{
if (isRollback)
{
db.rollback();
} else
{
db.commit();
}
db.close();
}
return !isRollback;
}


/**
* 查询单条记录 多条数据时,获得排序后的第一条记录

* @param sql
* @param params
* @return
* @throws SQLException
*/
public Map<String, Object> getFirstMapFromSql(String sql,
List<Object> params) throws SQLException
{
Map<String, Object> map = new HashMap<String, Object>();
setObject(sql, params);
resultSet = pstmt.executeQuery();
ResultSetMetaData colNames = resultSet.getMetaData();
int col_len = colNames.getColumnCount();
while (resultSet.next())
{
for (int i = 0; i < col_len; i++)
{
String cols_name = colNames.getColumnName(i + 1);
Object cols_value = resultSet.getObject(cols_name);
if (cols_value == null)
{
cols_value = "";
}
map.put(cols_name, cols_value);
}
break;
}
return map;
}


/**
* 查询多条记录

* @param sql
* @param params
* @return
* @throws SQLException
*/
public List<Map<String, Object>> getListMapFromSql(String sql,
List<Object> params, boolean isGetNullVal) throws SQLException
{
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
setObject(sql, params);
resultSet = pstmt.executeQuery();
ResultSetMetaData colNames = resultSet.getMetaData();
int colNamesLen = colNames.getColumnCount();
while (resultSet.next())
{
Map<String, Object> map = new HashMap<String, Object>();
for (int i = 0; i < colNamesLen; i++)
{
String cols_name = colNames.getColumnName(i + 1);
Object cols_value = resultSet.getObject(cols_name);
if (isGetNullVal || null != cols_value)
{
map.put(cols_name, cols_value);
}
}
list.add(map);
}
return list;
}


public Map<String, List<Map<String, Object>>> getMapListByKey(String sql,
String keyColumnList, List<Object> params)
{
Map<String, List<Map<String, Object>>> resultMap = new HashMap<>();
try
{
if (null == keyColumnList || keyColumnList.length() <= 0)
{
return resultMap;
}
setObject(sql, params);
resultSet = pstmt.executeQuery();
if (null == resultSet)
{
return resultMap;
}
String[] keyColumnArray = keyColumnList.split(",");
ResultSetMetaData colNames = resultSet.getMetaData();
int colNamesLen = colNames.getColumnCount();
while (resultSet.next())
{
String key = null;
for (String columnName : keyColumnArray)
{
Object tempVal = resultSet.getObject(columnName);
String colsValue = null == tempVal ? null
: tempVal.toString();
key = (null != key && colsValue != null)
? key + "@" + colsValue
: null != key ? key : colsValue;
}
List<Map<String, Object>> rowListData = resultMap.get(key);
if (null == rowListData)
{
rowListData = new ArrayList<>();
}
Map<String, Object> rowMapData = new HashMap<>();
for (int i = 0; i < colNamesLen; ++i)
{
String colName = colNames.getColumnName(i);
rowMapData.put(colName, resultSet.getObject(colName));
}
rowListData.add(rowMapData);
resultMap.put(key, rowListData);
}
} catch (Exception ex)
{
ex.printStackTrace();
}
return resultMap;
}


/**
* Wt 默认不排序

* @param sql
* @param keyColumnList
*            支持逗号分隔多个字符串
* @param params
* @return 返回一个 字符串中间有@符号做为KEY的Map
*/
public Map<String, Map<String, Object>> getMapByKey(String sql,
String keyColumnList, List<Object> params, boolean isSort)
{


if (keyColumnList == null || keyColumnList.length() == 0)
{
return null;
}
Map<String, Map<String, Object>> result = null;
try
{
if (isSort)
{
result = new LinkedHashMap<String, Map<String, Object>>();
} else
{
result = new HashMap<String, Map<String, Object>>();
}
setObject(sql, params);
resultSet = pstmt.executeQuery();
ResultSetMetaData colNames = resultSet.getMetaData();
int colNamesLen = colNames.getColumnCount();
String[] keyColumnArray = keyColumnList.split(",");
while (resultSet.next())
{
String key = null;
for (String keyColumn : keyColumnArray)
{
Object tempVal = resultSet.getObject(keyColumn);
String colsValue = null != tempVal ? tempVal.toString()
: null;
key = (null != key && colsValue != null)
? key + "@" + colsValue
: null != key ? key : colsValue;
}
Map<String, Object> rowDataMap = result.get(key);
if (null == rowDataMap)
{
if (isSort)
{
rowDataMap = new LinkedHashMap<String, Object>();
} else
{
rowDataMap = new HashMap<String, Object>();
}
for (int i = 0; i < colNamesLen; i++)
{
String columnName = colNames.getColumnName(i + 1);
rowDataMap.put(columnName,
resultSet.getObject(columnName));
}
result.put(key, rowDataMap);
}
}
} catch (Exception ex)
{
ex.printStackTrace();
}
return result;


}


/**
* 通过反射机制查询单条记录,返回bean对象

* @param sql
* @param params
* @param cls
* @return
* @throws Exception
*/
public <T> T getFirstObject(String sql, List<Object> params, Class<T> cls)
throws Exception
{
T resultObject = null;
setObject(sql, params);
resultSet = pstmt.executeQuery();
while (resultSet.next())
{
// 通过反射机制创建一个实例
resultObject = cls.getDeclaredConstructor(new Class[]
{}).newInstance(new Object[]
{});
Field[] fields = cls.getDeclaredFields();
if (null == fields || fields.length <= 0)
{
break;
}


for (Field f : fields)
{
f.setAccessible(true);
String colName = f.getName();
Object colVal = resultSet.getObject(colName);
if (null == colVal)
{
continue;
}
final Class<?> colType = f.getType();
// bean中必有set方法
StringBuilder methodName = new StringBuilder(colName.length());
methodName.append("set")
.append(Character.toUpperCase(colName.charAt(0)));
methodName.append(colName.substring(1).toLowerCase());
Method method = cls.getMethod(methodName.toString(), new Class[]
{ colType });
if (null == method)
{
continue;
}
method.invoke(resultObject, typeConvert(colType, colVal));
}
break;


}
return resultObject;


}


/**
* 通过反射机制查询多条记录 返回bean对象

* @param sql
* @param params
* @param cls
* @return
* @throws Exception
*/
public <T> List<T> getListObject(String sql, List<Object> params,
Class<T> cls) throws Exception
{
List<T> list = new ArrayList<T>();
setObject(sql, params);
resultSet = pstmt.executeQuery();
while (resultSet.next())
{


// 通过反射机制创建一个实例
T resultObject = cls.getDeclaredConstructor(new Class[]
{}).newInstance(new Object[]
{});
Field[] fields = cls.getDeclaredFields();
if (null == fields || fields.length <= 0)
{
break;
}


for (Field f : fields)
{
f.setAccessible(true);
String colName = f.getName();
Object colVal = resultSet.getObject(colName);
if (null == colVal)
{
continue;
}
final Class<?> colType = f.getType();
// bean中必有set方法
StringBuilder methodName = new StringBuilder(colName.length());
methodName.append("set")
.append(Character.toUpperCase(colName.charAt(0)));
methodName.append(colName.substring(1).toLowerCase());
Method method = cls.getMethod(methodName.toString(), new Class[]
{ colType });
if (null == method)
{
continue;
}
method.invoke(resultObject, typeConvert(colType, colVal));
}
list.add(resultObject);
}
return list;
}


private void setObject(String sql, List<Object> params) throws SQLException
{
pstmt = db.prepareStatement(sql);
int index = 0;
if (params != null && !params.isEmpty())
{
for (int i = 0; i < params.size(); ++i)
{
pstmt.setObject(index++, params.get(i));
}
}
}


/**
* 数据类型转换 oracle中float、int、integer、REAL、DECIMAL、NUMBER类型都返回提BigDecimal类型

* @param colType
* @param colVal
* @return
*/
private Object typeConvert(Class<?> colType, Object colVal)


{
if (colVal instanceof BigDecimal)
{
BigDecimal bigVal = new BigDecimal(((Number) colVal).toString());


// 整型
if (int.class.isAssignableFrom(colType)
|| Integer.class.isAssignableFrom(colType))
{
colVal = bigVal.intValue();
} else if (long.class.isAssignableFrom(colType)
|| Long.class.isAssignableFrom(colType))
{
colVal = bigVal.longValue();
} else if (double.class.isAssignableFrom(colType)
|| Double.class.isAssignableFrom(colType))
{
colVal = bigVal.doubleValue();
} else if (float.class.isAssignableFrom(colType)
|| Float.class.isAssignableFrom(colType))
{
colVal = bigVal.floatValue();
}
}
return colVal;
}


/**
* 释放数据库连接
*/
public void releaseConn()
{
if (resultSet != null)
{
try
{
resultSet.close();
} catch (SQLException e)
{
e.printStackTrace();
}
}
}
package com.hexiang.utils.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; import org.apache.log4j.Logger; public class DBConnection { /** * 获得与数据库的连接 * * @param path * @return Connection */ public static Connection getConn(String classDriver, String url, String user, String pwd) { try { Class.forName(classDriver); return DriverManager.getConnection(url, user, pwd); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } catch (SQLException ex) { ex.printStackTrace(); } return null; } public static Connection getConn(DataSource dataSource) { try { return dataSource.getConnection(); } catch (SQLException ex) { ex.printStackTrace(); } return null; } public static Connection getConn(String jndiName) { try { Context ctx; ctx = new InitialContext(); DataSource dataSource = (DataSource) ctx.lookup("java:comp/env/" + jndiName); return dataSource.getConnection(); } catch (NamingException ex) { ex.printStackTrace(); } catch (SQLException ex) { ex.printStackTrace(); } return null; } public static Connection getConn(Properties properties) { try { String driver = properties.getProperty("jdbc.driverClassName"); String url = properties.getProperty("jdbc.url"); String user = properties.getProperty("jdbc.username"); String password = properties.getProperty("jdbc.password"); Class.forName(driver); return DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } catch (SQLException ex) { ex.printStackTrace(); } return null; } /** * oracle连接 * * @param path * @return Connection */ public static Connection getOracleConn(String
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值