java数据库查询类建议收藏

通用查询数据库辅助类,可实现任意查询语句的查询,还可以进行多结果集查询。类的代码:1packagecom.hongyuan.db;23importjava.math.BigDecimal

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

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

类的代码:

  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             //处理结果集 http://www.cnblogs.com/roucheng/
 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     @BeforeClass
20     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     @Test
29     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<rs.getMetaData().getColumnCount();i++){
38                     System.out.print(rs.getObject(i+1)+"\t");
39                 }
40                 System.out.println();
41             }
42         }else{
43             System.out.println(obj);
44         }
45     }
46 
47 }

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120762.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • NetCMS修改之二:单击新闻附件,直接打开文件「建议收藏」

    NetCMS修改之二:单击新闻附件,直接打开文件「建议收藏」   NetCMS系统的新闻附件,是通过down.aspx页面实现下载附件的。这样做的好处可能是可以隐藏附件的真实地址,但给用户使用会带来一个小麻烦:无法使用右键单击来实现将下载的文件另存为。   经检查,此功能是在NetCMS.Publish命名空间的LabelMass类中定义的getNewsFiles实现的,文件位于NetCMS.Publish/Label/NewsParameter.

    2022年9月29日
    2
  • oracle 19c ora-01017,Oracle 19c RMAN 连接PDB ORA-01017 错误解决方法

    oracle 19c ora-01017,Oracle 19c RMAN 连接PDB ORA-01017 错误解决方法在Oracle19c中,RMAN连接PDB时可能会出现ORA-01017的错误,如下:[dave@www.cndba.cnadmin]$rmantarget'”dave/dave@daveassysbackup”‘RecoveryManager:Release19.0.0.0.0-ProductiononWedFeb1716:33:292021Version…

    2022年5月31日
    106
  • AE图床-图床聚合源码

    AE图床-图床聚合源码介绍:一个图床聚合程序,自带鉴黄功能,违规图片智能拦截可以直接复制上传以后的链接以及预览支持5个接口上传,图片都支持https永久免费图床,无需注册,批量上传,即时预览,无限流量,无限外链,永久保存,微博服务器,全网CDN,高速稳定,网页上传,无需插件。支持JPG,GIF,PNG等文件格式。支持远程图片上传。微博图床,围脖是个好图床。网盘下载地址:https://zijiewangpan.com/cH4upvpuqQw图片:…

    2022年5月8日
    44
  • 5分钟商学院商业篇_商学院是什么

    5分钟商学院商业篇_商学院是什么五分钟商学院的学习笔记

    2025年9月5日
    5
  • 目标检测综述_通用目标检测

    目标检测综述_通用目标检测前言图片分类任务我们已经熟悉了,就是算法对其中的对象进行分类。而今天我们要了解构建神经网络的另一个问题,即目标检测问题。这意味着,我们不仅要用算法判断图片中是不是一辆汽车,还要在图片中标记出它的位置,用边框或红色方框把汽车圈起来,这就是目标检测问题。其中“定位”的意思是判断汽车在图片中的具体位置。近几年来,目标检测算法取得了很大的突破。比较流行的算法可以分为两类,一类是基于Regio…

    2022年10月13日
    2
  • rct429 java_RCT: RCT(Redis Computed Tomography) RCT 是一个通过解析rdb文件对redis内存结构分析的一站式平台。 支持对非集群/集群rdb文…[通俗易懂]

    Language:RCT(RedisComputedTomography)RCT是一个通过解析rdb文件对redis内存结构分析的一站式平台。支持对非集群/集群rdb文件分析、Slowlog查询与监控、ClientList查询与监控。GitHub第一时间更新,请移步查看!功能内存分析通过对rdb文件解析,分析Redis内存使用情况,支持多维度、多报表方式。支持手动、自动多种方式!提…

    2022年4月18日
    57

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号