大家好,又见面了,我是全栈君
通用查询数据库辅助类,可实现任意查询语句的查询,还可以进行多结果集查询。
类的代码:
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.cn/120762.html原文链接:https://javaforall.cn