JDBC框架(二)

2015-02-03 03:52:46 · 作者: · 浏览: 33

* */

// jdbc的封装可以用反射机制来封装:

//定义范型

public T findSimpleRefResult(String sql, List params,

Class cls) throws Exception {

T resultObject = null;//返回对象

int index = 1;

//获得sql语句执行对象

pstmt = connection.prepareStatement(sql);

//设置占位符

if (params != null && !params.isEmpty()) {

for (int i = 0; i < params.size(); i++) {

pstmt.setObject(index++, params.get(i));

}

}

resultSet = pstmt.executeQuery();

//

ResultSetMetaData metaData = resultSet.getMetaData();

//

int cols_len = metaData.getColumnCount();

while (resultSet.next()) {

// 通过反射机制创建实例

resultObject = cls.newInstance();

for (int i = 0; i < cols_len; i++) {

String cols_name = metaData.getColumnName(i + 1);

Object cols_value = resultSet.getObject(cols_name);

if (cols_value == null) {

cols_value = "";

}

//通过列名来获得类的属性字段

Field field = cls.getDeclaredField(cols_name);

field.setAccessible(true);// 打开javabean的访问private权限

//第一个参数是需要改变字段的对象(由反射机制创建的实例) 第二个参数字段改变的值

field.set(resultObject, cols_value);

}

}

return resultObject;

}

?

/**

* 通过反射机制访问数据库

*

* @param

* @param sql

* @param params

* @param cls

* @return

* @throws Exception

*/

public List findMoreRefResult(String sql, List params,

Class cls) throws Exception {

List list = new ArrayList();

int index = 1;

//获得执行SQL语句的对象

pstmt = connection.prepareStatement(sql);

//占位符

if (params != null && !params.isEmpty()) {

for (int i = 0; i < params.size(); i++) {

pstmt.setObject(index++, params.get(i));

}

}

//执行

resultSet = pstmt.executeQuery();

//获得列的相关信息

ResultSetMetaData metaData = resultSet.getMetaData();

int cols_len = metaData.getColumnCount();

//是否有下一条记录

while (resultSet.next()) {

//反射机制创建实例

T resultObject = cls.newInstance();

for (int i = 0; i < cols_len; i++) {

String cols_name = metaData.getColumnName(i + 1);

Object cols_value = resultSet.getObject(cols_name);

if (cols_value == null) {

cols_value = "";

}

//通过列名来获得类的属性字段

Field field = cls.getDeclaredField(cols_name);

// 打开javabean的访问private权限

field.setAccessible(true);

//设置反射对象的字段对应的值

field.set(resultObject, cols_value);

}

list.add(resultObject);

}

return list;

}

//数据库释放连接

public void releaseConn() {

//判断结果集是否为空

if (resultSet != null) {

try {

//不为空关闭结果集合

resultSet.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//判断SQL执行语句的对象是否为空

if (pstmt != null) {

try {

//不为空关闭

pstmt.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//判断连接是否为空

if (connection != null) {

try {

//不为空关闭

connection.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

?

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

JdbcUtils jdbcUtils = new JdbcUtils();

jdbcUtils.getConnection();

// String sql = "insert into userinfo(username,pswd) values(?,?)";

// List params = new ArrayList();

// params.add("rose");

// params.add("123");

// try {

// boolean flag = jdbcUtils.updateByPreparedStatement(sql, params);

// System.out.println(flag);

// } catch (SQLException e) {

// // TODO Auto-generated catch block

// e.printStackTrace();

// }

String sql = "select * from userinfo ";

//List params = new ArrayList();

//params.add(1);

try {

List list = jdbcUtils.findMoreRefResult(sql,

null, UserInfo.class);

System.out.println(list);

} catch (Exception e) {

// TODO: handle exception

} finally {

jdbcUtils.releaseConn();

}

}

?

}

?

?

实体类用于j