封装数据库查询方法

---恢复内容开始---

对于数据繁琐的各式各样的查询语句,每次都要写上一大段查询代码,不仅造成代码冗余,而且还浪费时间。下面给出自己写的一个数据库查询方法封装:

 1 public class AllSelect {
 2     public static List<Object> Select(String sql,String className) throws Exception{
 3         //连接数据库
 4         Connection conn = new MyConnection().getConnection();//后面有封装连接数据库的方法
 5         //预处理
 6         Statement st = conn.createStatement();
 7         //执行sql语句,并把sql查询结果存储在resultSet中
 8         ResultSet rs = st.executeQuery(sql);
 9         //使用resultSetMetaDate获取ResultSet里面每条数据的字段名(数据库表里面的)
10         ResultSetMetaData rsmd = rs.getMetaData();
11         //查询结果一共有多少列,数据库表里面有多少个字段(属性)
12         int count = rsmd.getColumnCount();
13         //创建一个数组来存放结果集中所有的字段名(把每个字段存进数组里面)
14         String[] cols = new String[count];
15         //循环获取所有的字段名()
16         for(int i = 0;i < cols.length;i ++){
17             //把resultSetMetaDate获取的字段存进数组
18             cols[i] = rsmd.getColumnName(i+1);
19         }
20         //创建一个Arraylist存放解析出来的对象
21         List<Object> list = new ArrayList<Object>();
22         //获取类的反射,通过包名.类名。开始连接po层的类
23         Class clss = Class.forName(className);
24         while(rs.next()){
25             //每次通过反射创建一个对象
26             Object obj = clss.newInstance();
27             //通过反射获取对象所有的属性,
28             Field[] fie = clss.getDeclaredFields();
29             //遍历这个对象的所有属性,把数据库查询出来的数据放入类对象中
30             for(Field field:fie){
31                 //判断·属性的类型,每种类型对应不同的获取属性方法
32                 if(field.getType().getName().equals("java.lang.Integer")||
33                         field.getType().getName().equals("int")){
34                     //循环列名数组,找到属性名重名的列,获取这一列的值,给该属性赋值
35                     for(int i = 0;i < cols.length;i ++){
36                         //如果找到这一列
37                         if(cols[i].equalsIgnoreCase(field.getName())){
38                             //暴力访问
39                             field.setAccessible(true);
40                             //把表中查询出来的这一列的值给同名类的同名Int属性
41                             field.set(obj, rs.getInt(cols[i]));
42                         }
43                     }
44                 }else if(field.getType().getName().equalsIgnoreCase("java.lang.String")){
45                     for(int i = 0;i < cols.length;i ++){
46                         if(cols[i].equalsIgnoreCase(field.getName())){
47                             //暴力访问
48                             field.setAccessible(true);
49                             //用这一列的值给同名的String属性
50                             field.set(obj, rs.getString(cols[i]));
51                         }
52                     }
53                 }else if(field.getType().getName().equalsIgnoreCase("java.sql.Date")){
54                     for(int i = 0;i < cols.length;i ++){
55                         if(cols[i].equalsIgnoreCase(field.getName())){
56                             //暴力访问
57                             field.setAccessible(true);
58                             //用这一列的值给同名的Date属性
59                             field.set(obj, rs.getDate(cols[i]));
60                         }
61                     }
62                 }else if(field.getType().getName().equalsIgnoreCase("java.lang.Double")||
63                         field.getType().getName().equalsIgnoreCase("double")){
64                     //循环列名数组,找到属性名重名的列,获取这一列的值,给该属性赋值
65                     for(int i = 0;i < cols.length;i ++){
66                         //如果找到这一列
67                         if(cols[i].equalsIgnoreCase(field.getName())){
68                             //暴力访问
69                             field.setAccessible(true);
70                             //用这一列的值给同名的Double属性
71                             field.set(obj, rs.getDouble(cols[i]));
72                         }
73                     }
74                 }
75             }
76             list.add(obj);
77         }
78         rs.close();
79         st.close();
80         conn.close();
81         return list;
82     }
83 }

连接数据库的封装方法: 
连接数据库接口:

1 public interface DBConnection {
2
3     public Connection getConnection();
4     public void close();
5 }

连接数据库实现类(Oracle数据库):

 1 public class MyConnection implements DBConnection{
 2     Connection conn;
 3     @Override
 4     public Connection getConnection() {
 5         // TODO Auto-generated method stub
 6         String Driver="oracle.jdbc.driver.OracleDriver";    //连接数据库的方法
 7         String URL="jdbc:oracle:thin:@localhost:1521:benxi";    //benxi为数据库的SID
 8         String Username="scott";    //用户名
 9         String Password="123456";    //密码
10         try {
11             Class.forName(Driver) ;
12             conn=DriverManager.getConnection(URL,Username,Password);
13         } catch (ClassNotFoundException | SQLException e) {
14             // TODO Auto-generated catch block
15             e.printStackTrace();
16         }    //加载数据库驱动
17
18         return conn;
19     }
20
21     @Override
22     public void close() {
23         // TODO Auto-generated method stub
24         try {
25             conn.close();
26         } catch (SQLException e) {
27             // TODO Auto-generated catch block
28             e.printStackTrace();
29         }
30     }
31
32 }

连接数据库实现类(MySQL):

 1 public class MysqlConnection implements DBConnection{
 2     public static final String DRIVECLASS="com.mysql.jdbc.Driver";
 3     public static final String URL="jdbc:mysql://localhost:3306/test01";
 4     public static final String UNAME="root";
 5     public static final String PASS="123456";
 6     static{
 7         try {
 8             Class.forName(DRIVECLASS);
 9         } catch (ClassNotFoundException e) {
10             // TODO Auto-generated catch block
11             e.printStackTrace();
12         }
13     }
14     /**
15      * 获得连接
16      */
17     Connection conn  = null;
18     public Connection getConnection() {
19         try {
20             conn = DriverManager.getConnection(URL,UNAME,PASS);
21         } catch (SQLException e) {
22             e.printStackTrace();
23         }
24         return conn;
25     }
26     /**
27      * 关闭连接
28      */
29
30     @Override
31     public void close() {
32         // TODO Auto-generated method stub
33         try {
34             if(conn!=null&&!conn.isClosed()){
35                 conn.close();
36             }
37         } catch (Exception e) {
38             e.printStackTrace();
39         }
40
41     }
42 }

---恢复内容结束---

时间: 2024-08-29 11:12:57

封装数据库查询方法的相关文章

SQL数据库查询方法

SQL数据库查询方法 简单查询: 一.投影 select * from 表名 select 列1,列2... from 表名 select distinct 列名 from 表名 二.筛选 select top 数字 列|* from 表名 (一)等值与不等值 select * from 表名 where 列名=值 select * from 表名 where 列名!=值 select * from 表名 where 列名>值 select * from 表名 where 列名<值 selec

调用DISCUZ 数据库查询方法进行数据库查询

<?php define('APPTYPEID', 5);//必须的,你懂的 define('CURSCRIPT', 'userapp');//必须的,你懂的 require_once './source/class/class_core.php';//必须的,你懂的 $discuz = & discuz_core::instance();//必须的,你懂的 $discuz->cachelist = $cachelist;//必须的,你懂的 $discuz->init();//必

优化SQL Server数据库查询方法

SQL Server数据库查询速度慢的原因有很多,常见的有以下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8.sp_lock,sp_who,活动的用户查看,原因是读写竞争资源. 9.返回了不必要的行和列 10.查询语句不好,没有优

resultType和resultMap区别,对一个数据库查询方法的分析

先看一段mybatis的代码 <resultMap id="BaseResultMap" type="com.example.tsfunproj.entity.BaseDataMap"> <id column="id" property="id" jdbcType="INTEGER"/> <result column="MAP_CODE" property=

LinQ 各种数据库查询方法

1.多条件查询: 并且 && 或者 || var list = con.car.Where(r => r.code == "c014" || r.oil == 8.2m); 2.模糊查询 1.模糊 var list = con.car.Where(r => r.name.Contains("AT")); 2.开头 var list = con.car.Where(r => r.name.StartsWith("皇冠&quo

数据库 查询方法详解 以学生老师信息表为例

create table Student--3rd再次执行 ( Sno int primary key not null,--学号主键 Sname varchar(50) not null,--学生姓名 Ssex varchar(50) not null,--学生性别 Sbirthday datetime,--出生年月 Class int--班级 ) truncate table Student--清空表格 insert into Student values(108,'曾华','男','197

sql跨数据库查询方法

http://www.cnblogs.com/xingluzhe/archive/2012/02/01/2334311.html SELECT u_name     FROM OPENROWSET('sqloledb','DRIVER={SQL Server};SERVER=119.48.48.152;UID=y_ydgl;PWD=55555////\',DB.dbo.y_users)  where u_name='1'   UNION   allSELECT u_name     FROM O

封装数据通用的查询方法(多行查询 单行查询 ) 以及调用时候需要注意的事项

/** * * @param sql 查询语句 * @param params 占位符对应的值 * @param handler 结果集一行的处理对象 * @return 处理后的对象的集合 * @throws SQLException */ //封装一个通用的多行查询方法 public static <T> List<T> query(String sql,Object [] params,ResultSetHandler<T> handler) throws SQL

ci框架自定义数据库查询名称(方法)

适合刚接触PHP和ci框架的人,本人也是小白 原因:官方给的数据库查询方法可能不利于记忆使用,官方给的一些方法只能进行基础查询,每次复合查询都需要拼接条件,自己定义定义方法直接调用方法即可 操作步骤: 1.ci框架官网下载好解压后的文件夹会有application这个目录,在application目录下找到models子目录,在models子目录里建一个PHP文件(名字随便起,如Base_model.php) 这个文件里就是给你写自己定义的数据库查询方法,但开头要这样写(如下),自己定义的方法写