jdbc连接数据库工具类

  1 import java.lang.reflect.Field;
  2 import java.sql.Connection;
  3 import java.sql.DriverManager;
  4 import java.sql.PreparedStatement;
  5 import java.sql.ResultSet;
  6 import java.sql.ResultSetMetaData;
  7 import java.sql.SQLException;
  8 import java.util.ArrayList;
  9 import java.util.HashMap;
 10 import java.util.List;
 11 import java.util.Map;
 12
 13 public class DBUtils {
 14
 15     // 表示定义数据库的用户名
 16     private static String USERNAME = "root";
 17     // 定义数据库的密码
 18     private static String PASSWORD = "root";
 19     // 定义数据库的驱动信息
 20     private static String DRIVER = "com.mysql.jdbc.Driver";
 21     // 定义访问数据库的地址
 22     private static String URL = "jdbc:mysql://localhost:3306/db";
 23
 24     private static DBUtils per = null;
 25     // 定义数据库的链接
 26     private Connection con = null;
 27     // 定义sql语句的执行对象
 28     private PreparedStatement pstmt = null;
 29     // 定义查询返回的结果集合
 30     private ResultSet resultSet = null;
 31
 32     private DBUtils() {
 33
 34     }
 35
 36     /**
 37      * 单例模式,获得工具类的一个对象
 38      *
 39      * @return
 40      */
 41     public static DBUtils getInstance() {
 42         if (per == null) {
 43             per = new DBUtils();
 44             per.registeredDriver();
 45         }
 46         return per;
 47     }
 48
 49     private void registeredDriver() {
 50         // TODO Auto-generated method stub
 51         try {
 52             Class.forName(DRIVER);
 53             System.out.println("注册驱动成功!");
 54         } catch (ClassNotFoundException e) {
 55             // TODO Auto-generated catch block
 56             e.printStackTrace();
 57         }
 58     }
 59
 60     /**
 61      * 获得数据库的连接
 62      *
 63      * @return
 64      */
 65     public Connection getConnection() {
 66         try {
 67             con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
 68         } catch (SQLException e) {
 69             // TODO Auto-generated catch block
 70             e.printStackTrace();
 71         }
 72         System.out.println("连接数据库成功!!");
 73         return con;
 74     }
 75
 76     /**
 77      * 完成对数据库的表的添加删除和修改的操作
 78      *
 79      * @param sql
 80      * @param params
 81      * @return
 82      * @throws SQLException
 83      */
 84     public boolean executeUpdate(String sql, List<Object> params)
 85             throws SQLException {
 86
 87         boolean flag = false;
 88
 89         int result = -1;  // 表示当用户执行添加删除和修改的时候所影响数据库的行数
 90
 91         pstmt = con.prepareStatement(sql);
 92
 93         if (params != null && !params.isEmpty()) {
 94             int index = 1;
 95             for (int i = 0; i < params.size(); i++) {
 96                 pstmt.setObject(index++, i);
 97             }
 98         }
 99
100         result = pstmt.executeUpdate();
101         flag = result > 0 ? true : false;
102
103         return flag;
104     }
105
106     /**
107      * 从数据库中查询数据
108      *
109      * @param sql
110      * @param params
111      * @return
112      * @throws SQLException
113      */
114     public List<Map<String, Object>> executeQuery(String sql,
115             List<Object> params) throws SQLException {
116         List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
117         int index = 1;
118         pstmt = con.prepareStatement(sql);
119         if (params != null && !params.isEmpty()) {
120             for (int i = 0; i < params.size(); i++) {
121                 pstmt.setObject(index++, params.get(i));
122             }
123         }
124         resultSet = pstmt.executeQuery();
125         ResultSetMetaData metaData = resultSet.getMetaData();
126         int cols_len = metaData.getColumnCount();
127         while (resultSet.next()) {
128             Map<String, Object> map = new HashMap<String, Object>();
129             for (int i = 0; i < cols_len; i++) {
130                 String cols_name = metaData.getColumnName(i + 1);
131                 Object cols_value = resultSet.getObject(cols_name);
132                 if (cols_value == null) {
133                     cols_value = "";
134                 }
135                 map.put(cols_name, cols_value);
136             }
137             list.add(map);
138         }
139         return list;
140
141     }
142
143     /**
144      * jdbc的封装可以用反射机制来封装,把从数据库中获取的数据封装到一个类的对象里
145      *
146      * @param sql
147      * @param params
148      * @param cls
149      * @return
150      * @throws Exception
151      */
152     public <T> List<T> executeQueryByRef(String sql, List<Object> params,
153             Class<T> cls) throws Exception {
154         List<T> list = new ArrayList<T>();
155         int index = 1;
156         pstmt = con.prepareStatement(sql);
157         if (params != null && !params.isEmpty()) {
158             for (int i = 0; i < params.size(); i++) {
159                 pstmt.setObject(index++, params.get(i));
160             }
161         }
162         resultSet = pstmt.executeQuery();
163         ResultSetMetaData metaData = resultSet.getMetaData();
164         int cols_len = metaData.getColumnCount();
165         while (resultSet.next()) {
166             T resultObject = cls.newInstance();  // 通过反射机制创建实例
167             for (int i = 0; i < cols_len; i++) {
168                 String cols_name = metaData.getColumnName(i + 1);
169                 Object cols_value = resultSet.getObject(cols_name);
170                 if (cols_value == null) {
171                     cols_value = "";
172                 }
173                 Field field = cls.getDeclaredField(cols_name);
174                 field.setAccessible(true); // 打开javabean的访问private权限
175                 field.set(resultObject, cols_value);
176             }
177             list.add(resultObject);
178         }
179         return list;
180
181     }
182
183     public void closeDB() {
184         if (resultSet != null) {
185             try {
186                 resultSet.close();
187             } catch (SQLException e) {
188                 // TODO Auto-generated catch block
189                 e.printStackTrace();
190             }
191         }
192         if (pstmt != null) {
193             try {
194                 pstmt.close();
195             } catch (SQLException e) {
196                 // TODO Auto-generated catch block
197                 e.printStackTrace();
198             }
199         }
200         if (con != null) {
201             try {
202                 con.close();
203             } catch (SQLException e) {
204                 // TODO Auto-generated catch block
205                 e.printStackTrace();
206             }
207         }
208     }
209
210
211
212 }

测试:

 1 import java.sql.SQLException;
 2 import java.util.ArrayList;
 3 import java.util.HashSet;
 4 import java.util.List;
 5 import java.util.Map;
 6 import java.util.Set;
 7
 8
 9 public class Test {
10
11     /**
12      * @param args
13      */
14     public static void main(String[] args) {
15         // TODO Auto-generated method stub
16
17         DBUtils db = DBUtils.getInstance();
18         db.getConnection();
19         String sql = "SELECT name,introduction,location FROM activity WHERE id IN(SELECT activityId from mem_act_collect where memberId = ?)";
20         List<Activity> reslist = new ArrayList<Activity>();
21         List<Object> list = new ArrayList<Object>();
22         list.add(2014303342);
23
24         try {
25             reslist = db.executeQueryByRef(sql,list,Activity.class);
26
27             for(Activity ac:reslist){
28                 System.out.println(ac.toString());
29             }
30
31
32         } catch (Exception e) {
33             // TODO Auto-generated catch block
34             e.printStackTrace();
35         }finally{
36             db.closeDB();
37         }
38
39     }
40
41 }
时间: 2024-10-18 14:01:28

jdbc连接数据库工具类的相关文章

C# .net连接数据库工具类

做.net也半年了,一直用的动软生成器的框架,对于数据库连接什么的根本没关心过,前几天同学做毕业设计要我写个数据库连接,才发现原来我连最基本的都不会,痛定思痛找了相关资料,写了一个数据库连接类. 写完之后发现很简单,给和我一样的.net新手做个借鉴吧 using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Data.SqlClient;using System.Da

JDBC的工具类的抽取

1.1.1 抽取一个JDBC的工具类因为传统JDBC的开发,注册驱动,获得连接,释放资源这些代码都是重复编写的.所以可以将重复的代码提取到一个类中来完成. /** * JDBC的工具类 * @author jt * */ public class JDBCUtils { private static final String driverClassName; private static final String url; private static final String username

【JDBC】工具类的抽取

jdbc.properties属性文件 driverClass=com.mysql.jdbc.Driver url=jdbc:mysql:///jdbctest username=root password=1234 JDBCUtils.java工具类 package com.imooc.jdbc.utils; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import ja

java连接数据库工具类

以前写项目一直用框架,封装实体很方便,这次直接用servlet和jsp写,自己封装数据,好多重复的代码,又刚好复习了反射机制,所以自己写了个工具类. 1.team 表中字段 2.实体Team类 package com.beb.entity; public class Team { private Integer id; private String teamId; private String teamName; private String teamDesc; public Integer g

JDBC封装工具类

package com.lxf.bean.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * 数据库连接类 * * @author 刘向峰 * */ public class DbConnection { //oracle连接写法 private

JDBC的工具类

A: 抽取两个方法,一个获取Connection对象,一个是释放资源 import java.io.FileReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; public class Jdb

连接数据库工具类DBUtil

代码如下: import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import org.apache.commons.dbcp.BasicDataSource; public class DBUtil { private static BasicD

JDBC 工具类

package util; import java.sql.*; /** * JDBC的工具类 */ final public class JdbcUtil { private static String user = "root"; // 数据库用户名 private static String password = ""; // 数据库登录密码 private static String url = "jdbc:mysql://127.0.0.1:33

MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4059514.html 联系方式:[email protected] [正文] 一.DAO模式简介 DAO即Data Access Object,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据库资源中间. DAO模式实际上是两个模式的组合,即Data Accessor (数据