您的位置:首页 > 其它

自己实现的JDBC工具类

2015-09-17 17:42 330 查看
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();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: