今天,在百度知道 ,一位网友问到jdbc代码简化,今天花了2个小时间给他写了个。。...

代码如下:
用法是:传入一个类名 ,sql语句,参数是可变的

package org.ywq.common.utils;

import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.ywq.entity.User;

/**
* @author ai5qiangshao E-mail:ai5qiangshao@163.com
* @version 创建时间:Aug 22, 2009 5:44:43 PM
* @Package org.ywq.common.utils
* @Description 类说明
*/
public class DBUtis<T> {

private PreparedStatement psmt;

private Connection conn;

public DBUtis() {
this.getConnection();
}

public Connection getConnection() {
Connection conn = null;
String className = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/hibernate";
try {
Class.forName(className);
conn = DriverManager.getConnection(url, "root", "root");

} catch (Exception e) {
e.printStackTrace();
}

return conn;
}

public static void main(String[] args) throws Exception {
DBUtis<User> db = new DBUtis<User>();
List<User> usList = db.executeQuery(User.class,
"select * from user limit 10");
for (User user : usList) {
System.out.println(user.getUname());
}

DBUtis<User> db2 = new DBUtis<User>();
User u = db2.executeQueryByPk(User.class,
"select * from user where uid=?", 33);
System.out.println(u.getUname());

}

public List<T> executeQuery(Class<T> clazz, String sql, Object... params) {
List<T> list = new ArrayList<T>();
ResultSet rs = null;
try {
this.preparedStatement(sql, params);
rs = this.psmt.executeQuery();
while (rs.next()) {
ResultSetMetaData table = rs.getMetaData();
T o = clazz.newInstance();
invokeSetter(clazz, rs, table, o);
list.add(o);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
close(rs);
}
return list;
}

/***************************************************************************
* 根据主键查询
*
* @param clazz
* @param sql
* @param params
* 查询参数
* @return
*/
public T executeQueryByPk(Class<T> clazz, String sql, Object... params) {
T o = null;
ResultSet rs = null;
try {
this.preparedStatement(sql, params);
rs = this.psmt.executeQuery();
o = null;
if (rs.next()) {
ResultSetMetaData table = rs.getMetaData();
o = clazz.newInstance();
invokeSetter(clazz, rs, table, o);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
this.close(rs);
}
return o;
}

public Integer exucuteUpdate(String sql, Object... params) {
Integer result = 0;
try {
this.preparedStatement(sql, params);
result = this.psmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
this.close();
}
return result;
}

private void close(ResultSet rs) {
try {
if (rs != null)
rs.close();
if (this.psmt != null)
psmt.close();
if (this.conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

private void close() {
this.close(null);
}

private void preparedStatement(String sql, Object... params)
throws SQLException {
this.psmt = this.getConnection().prepareStatement(sql);
setParams(params);
}

private void setParams(Object[] params) throws SQLException {
if (params != null) {
for (int i = 0; i < params.length; i++) {
this.psmt.setObject(i + 1, params[i]);
}
}
}

/***************************************************************************
* 核心代码
*
* @param clazz
* @param rs
* @param table
* //表结构
* @param o
* @throws Exception
*/
private void invokeSetter(Class<?> clazz, ResultSet rs,
ResultSetMetaData table, Object o) throws Exception {
for (int i = 0; i < table.getColumnCount(); i++) {
String column = table.getColumnName(i + 1);
String setter = "set" + column.substring(0, 1).toUpperCase()
+ column.substring(1);
String getter = "get" + column.substring(0, 1).toUpperCase()
+ column.substring(1);
Method getterM = clazz.getDeclaredMethod(getter);
Method setterM = clazz.getDeclaredMethod(setter,
new Class[] { getterM.getReturnType() });
setterM.invoke(o, rs.getObject(column));
}
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值