简单数据库操作类
来源:互联网 发布:newblue mac 编辑:程序博客网 时间:2024/06/05 22:59
package xl.dao;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class BaseDAO {
//数据库连接对象
protected Connection conn=null;
//数据库操作对象
protected PreparedStatement pstmt=null;
//结果集对象
protected ResultSet rs=null;
//获得数据库连接
protected Connection getConn(){
try {
Context context=new InitialContext();
Context envCtx=(Context)context.lookup("java:comp/env");
DataSource dataSource=(DataSource)envCtx.lookup("jdbc/sqlserver");
conn=dataSource.getConnection();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
/*
* 公共查询方法返回集合
*/
public List querSqls(String objectDTO,String strSql,Object [] prep){
//此数组用于存放所有列名
String [] columnNames=null;
//此数组用于存放所有set方法名
String [] methodNames=null;
ResultSetMetaData meta;
//存放需要返回的对象
List<Object> list=new ArrayList<Object>();
Map map=new HashMap();
try{
conn=this.getConn();
pstmt=conn.prepareStatement(strSql);
if(prep!=null){
for(int i=0;i<prep.length;i++){
pstmt.setObject(i+1, prep[i]);
}
}
rs=pstmt.executeQuery();
meta=rs.getMetaData();
int columnCount=meta.getColumnCount();
//分别初始化两个数组
columnNames=new String[columnCount];
methodNames=new String[columnCount];
//获得每列的列名
for(int i=0;i<columnCount;i++){
columnNames[i]=meta.getColumnName(i+1);
}
while(rs.next()){
String columnName=null;
Object objValue=null;
//查询生成的列名与值存入map中
for(int i=0;i<columnCount;i++){
columnName=columnNames[i];
objValue=rs.getObject(columnName);
map.put(columnName, objValue);
}
//使用实体类名生成实体类
Class cl=Class.forName(objectDTO);
Object object=cl.newInstance();
//获得实体类的所有字段
Field [] field=object.getClass().getDeclaredFields();
//获得每个字段的名称和set方法
for(int i=0;i<field.length;i++){
String str=field[i].getName();
String methodstr="set"+str.substring(0,1).toUpperCase()+str.substring(1);
methodNames[i]=methodstr;
}
//设置bean的值
for(int i=0;i<methodNames.length;i++){
Method method=null;
if(field[i].getType().getName().equals("java.lang.String")){
method=object.getClass().getMethod(methodNames[i],String.class);
method.invoke(object, map.get(columnNames[i]));
}
if(field[i].getType().getName().equals("int")){
method=object.getClass().getMethod(methodNames[i],int.class);
method.invoke(object, map.get(columnNames[i]));
}
}
list.add(object);
map.clear();
}
}catch(Exception ex){
ex.printStackTrace();
}finally{
close();
}
return list;
}
}
- 简单数据库操作类
- 数据库操作类,可执行数据库简单操作
- 简单的数据库操作类
- 简单操作数据库的类
- c#接简单数据库操作类
- c#接简单数据库操作类
- c#接简单数据库操作类
- c#接简单数据库操作类
- 操作数据库的一个简单类
- 一个简单的数据库操作类
- c#接简单数据库操作类
- c#接简单数据库操作类
- 简单的 C++ 操作数据库类
- 简单的PDO数据库操作类
- 数据库操作类简单再优化
- 简单的数据库操作:
- Mysql数据库简单操作
- 简单Hibernate数据库操作
- Serv-U简单设置
- Sql Server2005报出奇怪异常
- 利用Java实现网页浏览器
- 状态机
- 网络操作系统和“鲜果在线”
- 简单数据库操作类
- 网易也推出在线照片制作了
- hibernate的使用
- 今天总算有时间整理自己的博客了
- 非API序列化ImageList_Write2和ImageList_Read2
- c#基础概念之internal 修饰符有什么作用
- 高级语言反汇编程序的函数调用过程
- 我正在学Visual Basic
- 毫秒 微妙 纳秒