博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java数据库查询类
阅读量:6464 次
发布时间:2019-06-23

本文共 6173 字,大约阅读时间需要 20 分钟。

通用查询数据库辅助类,可实现任意查询语句的查询,还可以进行多结果集查询。

类的代码:

1 package com.hongyuan.db;  2   3 import java.math.BigDecimal;  4 import java.net.URL;  5 import java.sql.Array;  6 import java.sql.Blob;  7 import java.sql.Clob;  8 import java.sql.Connection;  9 import java.sql.Date; 10 import java.sql.PreparedStatement; 11 import java.sql.ResultSet; 12 import java.sql.SQLException; 13 import java.sql.SQLXML; 14 import java.sql.Statement; 15 import java.sql.Time; 16 import java.sql.Timestamp; 17 import java.util.ArrayList; 18 import java.util.List; 19  20 import javax.sql.DataSource; 21 import javax.sql.rowset.CachedRowSet; 22  23 import com.sun.rowset.CachedRowSetImpl; 24  25 public class DBUtil { 26     private DataSource ds = null; 27  28     public DataSource getDs() { 29         return ds; 30     } 31  32     public void setDs(DataSource ds) { 33         this.ds = ds; 34     } 35  36     public DBUtil() { 37     } 38  39     public DBUtil(DataSource ds) { 40         this.ds = ds; 41     } 42  43     public Connection getConnection() throws SQLException { 44         return ds.getConnection(); 45     } 46  47     public static void close(Connection conn, Statement s, ResultSet rs) 48             throws SQLException { 49         if (rs != null) 50             rs.close(); 51         if (s != null) 52             s.close(); 53         if (conn != null) 54             conn.close(); 55     } 56  57     public Object query(String sql) throws SQLException { 58         return this.query(sql, null); 59     } 60  61     public Object query(String sql, List params) throws SQLException { 62         Connection conn = null; 63         PreparedStatement ps = null; 64         ResultSet rs = null; 65         try { 66             conn = this.getConnection(); 67             ps = conn.prepareStatement(sql); 68              69             if (null != params) { 70                 //初始化查询参数 71                 this.initParam(ps, params); 72             } 73             //处理结果集  74             boolean isResultSet = ps.execute(); 75             List result = new ArrayList(); 76             do { 77                 if (isResultSet) { 78                     CachedRowSet crs = new CachedRowSetImpl(); 79                     crs.populate(ps.getResultSet()); 80                     result.add(crs); 81                 } else { 82                     result.add(new Integer(ps.getUpdateCount())); 83                 } 84             } while ((isResultSet = ps.getMoreResults()) == true 85                     || ps.getUpdateCount() != -1); 86  87             if (result.size() == 0) { 88                 return null; 89             } else if (result.size() == 1) { 90                 return result.get(0); 91             } else { 92                 return result; 93             } 94         } catch (SQLException e) { 95             throw new SQLException("无法执行的sql语句!"); 96         } finally { 97             DBUtil.close(conn, ps, rs); 98         } 99     }100     //初始化查询参数101     private void initParam(PreparedStatement ps, List params)102             throws SQLException {103         for (int i = 0; i < params.size(); i++) {104             Object param = params.get(i);105             if (param instanceof Byte) {106                 ps.setByte(i + 1, (Byte) param);107             } else if (param instanceof Short) {108                 ps.setShort(i + 1, (Short) param);109             } else if (param instanceof Integer) {110                 ps.setInt(i + 1, (Integer) param);111             } else if (param instanceof Long) {112                 ps.setLong(i + 1, (Long) param);113             } else if (param instanceof Float) {114                 ps.setFloat(i + 1, (Float) param);115             } else if (param instanceof Double) {116                 ps.setDouble(i + 1, (double) param);117             } else if (param instanceof BigDecimal) {118                 ps.setBigDecimal(i + 1, (BigDecimal) param);119             } else if (param instanceof Boolean) {120                 ps.setBoolean(i + 1, (Boolean) param);121             } else if (param instanceof String) {122                 ps.setString(i + 1, (String) param);123             } else if (param instanceof Time) {124                 ps.setTime(i + 1, (Time) param);125             } else if (param instanceof Date) {126                 ps.setDate(i + 1, (Date) param);127             } else if (param instanceof Timestamp) {128                 ps.setTimestamp(i + 1, (Timestamp) param);129             } else if (param instanceof Array) {130                 ps.setArray(i + 1, (Array) param);131             } else if (param instanceof Blob) {132                 ps.setBlob(i + 1, (Blob) param);133             } else if (param instanceof Clob) {134                 ps.setClob(i + 1, (Clob) param);135             } else if (param instanceof SQLXML) {136                 ps.setSQLXML(i + 1, (SQLXML) param);137             } else if (param instanceof URL) {138                 ps.setURL(i, (URL) param);139             } else {140                 ps.setObject(i + 1, param);141             }142         }143     }144 }

上面类的使用 DBUtilTest.java:

1 package com.hongyuan.db; 2  3 import java.sql.ResultSet; 4 import java.sql.SQLException; 5 import java.util.ArrayList; 6 import java.util.List; 7  8 import javax.sql.DataSource; 9 10 import org.junit.BeforeClass;11 import org.junit.Test;12 13 import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;14 15 public class DBUtilTest {16     17     private static DataSource ds=null;18     19     @BeforeClass20     public static void setUpBeforeClass() throws Exception {21         MysqlDataSource mds=new MysqlDataSource();22         mds.setURL("jdbc:mysql://127.0.0.1:3306/test");23         mds.setUser("root");24         mds.setPassword("123456");25         ds=mds;26     }27 28     @Test29     public void testQuery() throws SQLException {30         DBUtil util=new DBUtil(ds);31         List params=new ArrayList();32         params.add(2);33         Object obj=util.query("select * from emp where id=?",params);34         if(obj instanceof ResultSet){35             ResultSet rs=(ResultSet)obj;36             while(rs.next()){37                 for(int i=0;i

 

转载地址:http://hzhzo.baihongyu.com/

你可能感兴趣的文章
Linux操作系统实时性分析
查看>>
mysql导出导入所有数据库
查看>>
完美解决NC502手工sql的查询引擎排序及合计问题
查看>>
PHP+MySQL代码部署在Linux(Ubuntu)上注意事项
查看>>
Tiny语言执行环境TM机源码
查看>>
PE文件之资源讲解
查看>>
windows 7/mac编译cocos2d-x-3.2*的android工程报错
查看>>
MYSQL导入导出.sql文件(转)
查看>>
使用Elasticsearch、Logstash、Kibana与Redis(作为缓冲区)对Nginx日志进行收集(转)
查看>>
git review报错一例
查看>>
Tomcat在Linux上的安装与配置
查看>>
《信息安全系统设计基础》 课程教学
查看>>
Linux平台下使用rman进行oracle数据库迁移
查看>>
全栈工程师学习Linux技术的忠告
查看>>
iOS自定制tabbar与系统的tabbar冲突,造成第一次点击各个item图片更换选中,第二次选中部分item图片不改变...
查看>>
C# Dictionary用法总结
查看>>
SVN服务器使用(二)
查看>>
反射获取内部类以及调用内部类方法
查看>>
C语言 - pthread
查看>>
谈Linq To Sql的优劣--纯个人观点
查看>>