自定义Dbutils
来源:互联网 发布:mysql数据库忘记密码 编辑:程序博客网 时间:2024/06/03 15:41
1、
package cn.itcast.frame.utils;
import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
/*
* "select * from account where id=?"--> 一条记录
Java中: Account a
情况二: ResultSet只有一条记录,将这条记录封装到一个JavaBean中
处理器: BeanHandler implements ResultSetHandler
*/
public class BeanHandler implements ResultSetHandler {
private Class clazz;
/**
*
* @param clazz: 将结果集中的记录封装到该类的一个实例中
*/
public BeanHandler(Class clazz){
this.clazz = clazz;
}
@Override
public Object handler(ResultSet rs) {
if(rs == null){
return null;
}
//定义该类的一个实例
Object instance = null;
try {
//创建该类的实例
instance = clazz.newInstance();
//取出结果集中元数据(结果集的元数据)
ResultSetMetaData metaData = rs.getMetaData();
//结果集中的列数
int columnCount = metaData.getColumnCount();
if(rs.next()){
//取出该行上的每个列
for(int i=0;i<columnCount;i++){
//该列的名字
String columnName = metaData.getColumnName(i+1);
//取该列的值
Object value = rs.getObject(columnName);
//得到该类clazz的某个属性
Field f = clazz.getDeclaredField(columnName);
//暴力反射
f.setAccessible(true);
//将该值放到该属性上
//将value放到instance对象的f属性上
f.set(instance, value);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return instance;
}
}
2、
package cn.itcast.frame.utils;
import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;
/*
* "select * from account" --> 集合
Java中: List<Account>
情况一:把ResultSet集合中每条记录封装到一个JavaBean中,然后将这些JavaBean加入一个集合中
处理器: BeanListHandler implements ResultSetHandler
*/
public class BeanListHandler implements ResultSetHandler {
private Class clazz;
public BeanListHandler(Class clazz){
this.clazz = clazz;
}
@Override
public Object handler(ResultSet rs) {
if(rs == null){
return null;
}
List list = new ArrayList();
try {
//取出结果集的元数据
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
while(rs.next()){
//取一条记录,生成该类的实例
Object instance = clazz.newInstance();
//取出该行上的每个列
for(int i=0;i<columnCount;i++){
String columnName = metaData.getColumnName(i+1);
Object value = rs.getObject(columnName);
//适用于反射得到类的属性
Field f = clazz.getDeclaredField(columnName);
//设置暴力反射
f.setAccessible(true);
//将value放到instance的f属性上
f.set(instance, value);
}
//将该对象加入集合中
list.add(instance);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
}
3、
package cn.itcast.frame.utils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class JDBCUtils {
//创建一个基于配置文件的C3P0数据库连接池
private static ComboPooledDataSource ds = new ComboPooledDataSource("");
//连接oracle
//private static ComboPooledDataSource ds = new ComboPooledDataSource("oracle");
public static Connection getConnection(){
try {
return ds.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//释放资源
public static void release(Connection conn,Statement st,ResultSet rs){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
rs = null;
}
}
if(st != null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
st = null;
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
conn = null;
}
}
}
//作用:支持insert update delete
/* insert:
* sql: insert into account values(?,?,?)
* args: new Object[]{3,"Mary",1000}
*
* update:
* sql: update account set money=? where id=?
* args: new Object[]{4000,1}
*/
public static void update(String sql,Object[] args){
Connection conn = null;
PreparedStatement pst = null;
try {
conn = getConnection();
pst = conn.prepareStatement(sql);
//为sql中的参数赋值
for(int i=0;i<args.length;i++){
pst.setObject(i+1, args[i]);
}
//执行SQL
pst.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally{
release(conn, pst, null);
}
}
//需要支持所有的查询
// public static Object query1(String sql,Object[] args,Class clazz){
// return null;
// }
public static Object query(String sql,Object[] args,ResultSetHandler rh){
Connection conn = null;
PreparedStatement pst = null;
ResultSet rs = null;
try {
conn = getConnection();
pst = conn.prepareStatement(sql);
for(int i=0;i<args.length;i++){
pst.setObject(i+1, args[i]);
}
//执行查询
rs = pst.executeQuery();
//处理结果集
//调用者知道如何处理结果
return rh.handler(rs);
} catch (Exception e) {
e.printStackTrace();
}finally{
release(conn, pst, rs);
}
return null;
}
}
4、package cn.itcast.frame.utils;
import java.sql.ResultSet;
/*
* 作用:由客户端程序传递一个该接口的实现,用于处理结果集
*/
public interface ResultSetHandler {
public Object handler(ResultSet rs);
}
- 自定义dbutils
- 自定义Dbutils
- DBUtils框架(自定义)
- Dbutils
- dbutils
- DbUtils
- DBUtils
- DBUtils
- DBUtils
- DBUtils
- DBUtils
- DBUtils
- Dbutils
- DBUtils
- dbutils
- dbutils
- DbUtils
- DbUtils
- 排序算法--希尔排序
- 关于javascript函数带不带括号的问题
- 热爱生命使用SSD
- 1 单例模式 SingleTon
- SlidingMenu的简介
- 自定义Dbutils
- 数据结构—栈(一)
- mysql show processlist命令 详解
- 【C语言】将一个数组进行初始化、清空、逆序、显示。
- 高并发处理方案
- 技术和资金非瓶颈 宽带提速进展缓慢三大主因
- javascript继承模式原理与示例深入剖析
- ArcGIS Server REST服务学习
- leetcode--Linked List Cycle &Linked List Cycle II