代码如下:
用法是:传入一个类名 ,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));
}
}
}
分享到:
相关推荐
JDBC代码 JDBC代码JDBC代码 JDBC代码
自己写的一个使用jdbc连接mysql的源代码,暂时未补充其他的方法,其中内置一个字符串MD5算法的类
经典的 JDBC代码, 好好学习
JavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源...
JDBC代码手册JDBC代码手册JDBC代码手册JDBC代码手册
使用spring jdbc template简化jdbc数据库操作实例代码,简化操作,包括详细测试例子。
jdbc核心代码,恰同学少年,风华正茂,挥斥方遒
java jdbc oracle代码
基于MysqlJDBC编程代码示例,包括配置文件读取,连接对象的创建,查询,增加,修改,元数据的使用方法,图片数据数据库存储读取,存储过程的SQL创建语句和java使用存储过程进行增删改查的调用代码,还有可以更新结果...
shardingJdbc
JDBC java 连接数据库的所有代码,Spring框架哦!
•创建一个以JDBC连接数据库的程序,包含7个步骤: 1、加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的静态方法forName(String ...
JDBC驱动和测试代码
jdbc 连接数据库 增删改查的代码。
jdbc连接sql sever2005的简单代码,仅做保存
逐步深入jdbc编程很好的代码及代码讲解ppt
SUN公司为java程序员们给出的JAVA连接数据库方法,其中有代码实例
jdbc连接池代码详解
spring 整合JDBC 原创代码 自己导入Jar 文件
jdbc连接测试代码,本人手写,测试通过,能查出数据,直接copy即用,省时间经历