java 通过元数据改写jdbcUtil访问jar

来源:互联网 发布:语音速记软件 编辑:程序博客网 时间:2024/05/22 11:52

直接上代码:

package com.dsp.dbAssist;


import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.DataSource;
public class DBAssist {
private DataSource dataSource;
public DBAssist(DataSource dataSource) {
this.dataSource = dataSource;
}


/**
* 增删改数据库

* @param sql
* @param params
*/
public void Update(String sql, Object... params) {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;


try {
conn = this.dataSource.getConnection();
stmt = conn.prepareStatement(sql);
ParameterMetaData pmd = stmt.getParameterMetaData();
int num = pmd.getParameterCount();
if (num > 0) {
if (params == null) {
throw new IllegalArgumentException("没有传入参数");
}
if (params.length != num) {
throw new IllegalArgumentException("传入的参数个数不正确");
}
for (int i = 0; i < num; i++) {
stmt.setObject(i, params[i]);
}
}
stmt.executeUpdate();
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
release(rs, stmt, conn);
}


}


public Object Query(String sql, ResultSetHandler Handle, Object... params) {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;


try {
conn = this.dataSource.getConnection();
stmt = conn.prepareStatement(sql);
ParameterMetaData pmd = stmt.getParameterMetaData();
int num = pmd.getParameterCount();
if (num > 0) {
if (params == null) {
throw new IllegalArgumentException("没有传入参数");
}
if (params.length != num) {
throw new IllegalArgumentException("传入的参数个数不正确");
}
for (int i = 0; i < num; i++) {
stmt.setObject(i, params[i]);
}
}
rs = stmt.executeQuery();
return Handle.handle(rs);
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
release(rs, stmt, conn);
}
}


/**
* 释放资源

* @param rs
* @param stmt
* @param conn
*/
private void release(ResultSet rs, Statement stmt, Connection conn) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
rs = null;
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
stmt = null;
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

如果要获取一个对象绑定

package com.dsp.dbAssist;


import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;


public class BeanHandler implements ResultSetHandler {
private Class clazz;


public BeanHandler(Class clazz) {
this.clazz = clazz;
}


public Object handle(ResultSet rs) {
try {
if (rs.next()) {
Object beanclazz = this.clazz.newInstance();
ResultSetMetaData rmd = rs.getMetaData();
int count = rmd.getColumnCount();
for (int i = 0; i < count; i++) {
String fieldName = rmd.getColumnName(i);
Object fieldValue = rs.getObject(i);
Field f = this.clazz.getField(fieldName);
f.setAccessible(true);
f.set(beanclazz, fieldValue);
}
return beanclazz;
}
return null;


} catch (Exception e) {
throw new RuntimeException("绑定数据出错");
}
}


}

如果要获取list 那么匿名类如下:

package com.dsp.dbAssist;


import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;


public class BeanListHandler implements ResultSetHandler {
private Class clazz;


public BeanListHandler(Class clazz) {
this.clazz = clazz;
}


public Object handle(ResultSet rs) {
try {
List list = new ArrayList();
while (rs.next()) {
Object beanclazz = this.clazz.newInstance();
ResultSetMetaData rmd = rs.getMetaData();
int count = rmd.getColumnCount();
for (int i = 0; i < count; i++) {
String fieldName = rmd.getColumnName(i);
Object fieldValue = rs.getObject(i);
Field f = this.clazz.getField(fieldName);
f.setAccessible(true);
f.set(beanclazz, fieldValue);
}
list.add(beanclazz);
}
return list;


} catch (Exception e) {
throw new RuntimeException("绑定数据出错");
}
}


}

0 0
原创粉丝点击