Mysql通用查询操作类(Jsp+servlet+javaBean+Mysql)
2010-01-16 09:15
651 查看
在腾科培训了有1个半月了,终于学完JSP+SERVLET+JAVABEAN+MYSQL,学了java的第一套web解决方案。老师要求我们6人一组开始做一个订餐系统。这个系统没有什么特别的,就跟电子商城是一个样的。由于要对数据库做大量的增删改查,那个代码又多,我想能不能将数据库操作的这一层打包起来(SqlOperDao),让我对数据库操作,用几行代码就搞定的。然后我只修改sql语句,和传进来的参数就可以了。
增删改属于一类操作,都是不返回结果集的,而查找是要返回结果集的
1)先说增删改的操作
public int buildConn(String sql)throws Exception{
Connection conn=null;
Statement stmt=null;
int result=0;
boolean flag;
try{
conn=sqlconn.conn();
stmt=conn.createStatement();
result=stmt.executeUpdate(sql);
System.out.println("恭喜你执行成功"+result+"条记录!");
flag=true;
}catch(Exception e){
System.out.println("抱歉!执行失败!"+e.getMessage());
flag=false;
}finally{
stmt.close();
conn.close();
}
return result;
}
2)而对于查询操作的就比较麻烦一点,通常我们都将查询的结果集打包到一个javabean组合中,例如我有一个登陆的javabean里面只有name和password,对应的表中user_list的两列name,password.现在要将user_list中的所有数据读出来,读出一条,就放到一个javabean中,多条数据就放到List<javabean>中。首先我们可以讲数据库中的所有数据都用读取字符串的形式getString的方法读出来,当然如果数据库中表的列的属性不是varchar类型,就不可以用此类方法。
本通用查询只针对都是String类型的表。
/**
* 通用查询,传入要查询的sql语句
* 返回一个List<String[]>
*/
public List<String[]> query(String sql) throws Exception{
this.queryList=new ArrayList<String[]>();
Statement stmt = null;
ResultSet rs = null;
Connection conn=null;
conn=this.sqlconn.conn();
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
//2、取得表体信息,要对表体进行判断是否存在,如果不存在则退出
while(true){
if(false == rs.next()){
break;
}
String dataList[] = new String[columnCount];
for(int body = 1; body <= columnCount; body ++){
String columnValue = rs.getString(body);
dataList[body - 1] = columnValue;
}
this.queryList.add(dataList);
}
rs.close();
stmt.close();
conn.close();
return queryList;
}
这个方法是将表中的内容读取出来,然后存放到一个List<String[]>中,但这样有个坏处,就是读出来的数据还没有打包成javabean,要自己打包,很是繁琐。所以在这个方法的基础上,我再写了一个将List<String[]>打包成javabean的方法。在这里要注意一点,就是,这个数据库通用操作类必须是一个泛型,class SqlOperDao<T>,要不然,Object类型是无法转化为你想要的javabean类型
/**
* 传入一个javabean,sql查询语句
* 查询返回的结果集,放到一个集合中List<javaBean>
* 这是一个赋值的操作,只对String类型进行复制,如果javabean中的set方法不是传String类型的
* 可以改写为
* public void setAttribute(String str){
* this.attribute=Integer.parseInt(str);
* }
* T可以传入一个JavaBean
*/
public List<Object> query(Object t,String sql)throws Exception{
List<Object> resultlist=new ArrayList<Object>();
Class cl=t.getClass();
Class mycl=Class.forName(cl.getName());
Field[] fields=mycl.getDeclaredFields();
List<String[]> querylist=this.query(sql);
for(String[] results:queryList){
Object instance=mycl.newInstance();
int i=0;
for(Field field:fields){
//采用java反射机制,获取javabean中set方法的方法名称,由于set方法都是由set+属性名称(String)构成的,所以用拼凑字符串
String setMethod="set"+String.valueOf(field.getName().charAt(0)).toUpperCase()+""+field.getName().substring(1);
Method set=mycl.getMethod(setMethod,String.class);
set.invoke(instance,results[i]);
i++;
}
resultlist.add(instance);
}
return resultlist;
}
在此通用数据查询就完成了,再来,看下如何使用?
javabean: class UserList{ private String name;
private String password; //get和set方法由myeclipse自动生成}
Dao层:要读取数据库中user_list中的所有数据
public static void main(String[] args0) throws Exception{
SqlOperDao sod=new SqlOperDao();
UserList t=new UserList();
String sql="SELECT * FROM user_list";
List<UserList> list=sod.query(t, sql);
for(Eatery e:list){
System.out.println(e.getEateryName());
}
//这样三句话就可以写完一个数据库的查询操作了,这样我们写出来的Dao层要比其他人的代码要少70%
}
增删改属于一类操作,都是不返回结果集的,而查找是要返回结果集的
1)先说增删改的操作
public int buildConn(String sql)throws Exception{
Connection conn=null;
Statement stmt=null;
int result=0;
boolean flag;
try{
conn=sqlconn.conn();
stmt=conn.createStatement();
result=stmt.executeUpdate(sql);
System.out.println("恭喜你执行成功"+result+"条记录!");
flag=true;
}catch(Exception e){
System.out.println("抱歉!执行失败!"+e.getMessage());
flag=false;
}finally{
stmt.close();
conn.close();
}
return result;
}
2)而对于查询操作的就比较麻烦一点,通常我们都将查询的结果集打包到一个javabean组合中,例如我有一个登陆的javabean里面只有name和password,对应的表中user_list的两列name,password.现在要将user_list中的所有数据读出来,读出一条,就放到一个javabean中,多条数据就放到List<javabean>中。首先我们可以讲数据库中的所有数据都用读取字符串的形式getString的方法读出来,当然如果数据库中表的列的属性不是varchar类型,就不可以用此类方法。
本通用查询只针对都是String类型的表。
/**
* 通用查询,传入要查询的sql语句
* 返回一个List<String[]>
*/
public List<String[]> query(String sql) throws Exception{
this.queryList=new ArrayList<String[]>();
Statement stmt = null;
ResultSet rs = null;
Connection conn=null;
conn=this.sqlconn.conn();
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
//2、取得表体信息,要对表体进行判断是否存在,如果不存在则退出
while(true){
if(false == rs.next()){
break;
}
String dataList[] = new String[columnCount];
for(int body = 1; body <= columnCount; body ++){
String columnValue = rs.getString(body);
dataList[body - 1] = columnValue;
}
this.queryList.add(dataList);
}
rs.close();
stmt.close();
conn.close();
return queryList;
}
这个方法是将表中的内容读取出来,然后存放到一个List<String[]>中,但这样有个坏处,就是读出来的数据还没有打包成javabean,要自己打包,很是繁琐。所以在这个方法的基础上,我再写了一个将List<String[]>打包成javabean的方法。在这里要注意一点,就是,这个数据库通用操作类必须是一个泛型,class SqlOperDao<T>,要不然,Object类型是无法转化为你想要的javabean类型
/**
* 传入一个javabean,sql查询语句
* 查询返回的结果集,放到一个集合中List<javaBean>
* 这是一个赋值的操作,只对String类型进行复制,如果javabean中的set方法不是传String类型的
* 可以改写为
* public void setAttribute(String str){
* this.attribute=Integer.parseInt(str);
* }
* T可以传入一个JavaBean
*/
public List<Object> query(Object t,String sql)throws Exception{
List<Object> resultlist=new ArrayList<Object>();
Class cl=t.getClass();
Class mycl=Class.forName(cl.getName());
Field[] fields=mycl.getDeclaredFields();
List<String[]> querylist=this.query(sql);
for(String[] results:queryList){
Object instance=mycl.newInstance();
int i=0;
for(Field field:fields){
//采用java反射机制,获取javabean中set方法的方法名称,由于set方法都是由set+属性名称(String)构成的,所以用拼凑字符串
String setMethod="set"+String.valueOf(field.getName().charAt(0)).toUpperCase()+""+field.getName().substring(1);
Method set=mycl.getMethod(setMethod,String.class);
set.invoke(instance,results[i]);
i++;
}
resultlist.add(instance);
}
return resultlist;
}
在此通用数据查询就完成了,再来,看下如何使用?
javabean: class UserList{ private String name;
private String password; //get和set方法由myeclipse自动生成}
Dao层:要读取数据库中user_list中的所有数据
public static void main(String[] args0) throws Exception{
SqlOperDao sod=new SqlOperDao();
UserList t=new UserList();
String sql="SELECT * FROM user_list";
List<UserList> list=sod.query(t, sql);
for(Eatery e:list){
System.out.println(e.getEateryName());
}
//这样三句话就可以写完一个数据库的查询操作了,这样我们写出来的Dao层要比其他人的代码要少70%
}
相关文章推荐
- JSP+Servlet+javabean+mysql实现页面多条件模糊查询
- (jsp 和 servlet功能篇) jsp+servlet+javaBean 实现分页代码(mysql 数据库)
- [JSP&JDBC]MVC模型查询学生表实例(servlet+javabean+jsp)/sendRedirect/getRequestDispatcher
- jsp+servlet+JavaBean+MySQL实现登陆实例
- web网页Eclipse,jsp+Servlet+javaBean,访问Mysql链接数据库
- JSP+Servlet+javabean+oracle实现页面多条件模糊查询
- Java项目 1 - 学生成绩管理系统---采用 Servlet+Jsp+JavaBean+MySql 设计方式,
- jsp+servlet+javaBean+mysql (MVC)模拟用户登录
- jsp+servlet+javabean实现简单的查询
- jsp+Javabean+servlet实现分页查询
- jsp+servlet+javaBean+mysql (MVC)模拟用户登录
- 用JSP+Servlet+JavaBean模式实现一个简单的登录网页设计(JSP+Tomcat+MySQL)
- jsp+javaBean+servlet+mysql完整的实现一个登录功能
- jsp+javabean+servlet+Mysql实现MVC模式下的注册登录留言功能
- jsp+jstl+servlet+javaBean+Mysql用户登录注册页面
- [JSP&JDBC]购物车实例(MVC模型+JSP+javascript+Servlet+JavaBean)
- jsp+servlet+javabean && struts+spring+hibernate
- Servlet+JSP+JavaBean开发模式(MVC)介绍
- MVC(JSP+JavaBean+Servlet)入门实例:用户登陆验证
- Jsp+Servlet+JavaBean简单mvc实例