* */
// jdbc的封装可以用反射机制来封装:
//定义范型
public
Class
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
Class
List
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.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.add(1);
try {
List
null, UserInfo.class);
System.out.println(list);
} catch (Exception e) {
// TODO: handle exception
} finally {
jdbcUtils.releaseConn();
}
}
?
}
?
?
实体类用于j