jdbc连接数据库工具类
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class DBUtils { // 表示定义数据库的用户名
private static String USERNAME = "root";
// 定义数据库的密码
private static String PASSWORD = "root";
// 定义数据库的驱动信息
private static String DRIVER = "com.mysql.jdbc.Driver";
// 定义访问数据库的地址
private static String URL = "jdbc:mysql://localhost:3306/db"; private static DBUtils per = null;
// 定义数据库的链接
private Connection con = null;
// 定义sql语句的执行对象
private PreparedStatement pstmt = null;
// 定义查询返回的结果集合
private ResultSet resultSet = null; private DBUtils() { } /**
* 单例模式,获得工具类的一个对象
*
* @return
*/
public static DBUtils getInstance() {
if (per == null) {
per = new DBUtils();
per.registeredDriver();
}
return per;
} private void registeredDriver() {
// TODO Auto-generated method stub
try {
Class.forName(DRIVER);
System.out.println("注册驱动成功!");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} /**
* 获得数据库的连接
*
* @return
*/
public Connection getConnection() {
try {
con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("连接数据库成功!!");
return con;
} /**
* 完成对数据库的表的添加删除和修改的操作
*
* @param sql
* @param params
* @return
* @throws SQLException
*/
public boolean executeUpdate(String sql, List<Object> params)
throws SQLException { boolean flag = false; int result = -1; // 表示当用户执行添加删除和修改的时候所影响数据库的行数 pstmt = con.prepareStatement(sql); if (params != null && !params.isEmpty()) {
int index = 1;
for (int i = 0; i < params.size(); i++) {
pstmt.setObject(index++, i);
}
} result = pstmt.executeUpdate();
flag = result > 0 ? true : false; return flag;
} /**
* 从数据库中查询数据
*
* @param sql
* @param params
* @return
* @throws SQLException
*/
public List<Map<String, Object>> executeQuery(String sql,
List<Object> params) throws SQLException {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
int index = 1;
pstmt = con.prepareStatement(sql);
if (params != null && !params.isEmpty()) {
for (int i = 0; i < params.size(); i++) {
pstmt.setObject(index++, params.get(i));
}
}
resultSet = pstmt.executeQuery();
ResultSetMetaData metaData = resultSet.getMetaData();
int cols_len = metaData.getColumnCount();
while (resultSet.next()) {
Map<String, Object> map = new HashMap<String, Object>();
for (int i = 0; i < cols_len; i++) {
String cols_name = metaData.getColumnName(i + 1);
Object cols_value = resultSet.getObject(cols_name);
if (cols_value == null) {
cols_value = "";
}
map.put(cols_name, cols_value);
}
list.add(map);
}
return list; } /**
* jdbc的封装可以用反射机制来封装,把从数据库中获取的数据封装到一个类的对象里
*
* @param sql
* @param params
* @param cls
* @return
* @throws Exception
*/
public <T> List<T> executeQueryByRef(String sql, List<Object> params,
Class<T> cls) throws Exception {
List<T> list = new ArrayList<T>();
int index = 1;
pstmt = con.prepareStatement(sql);
if (params != null && !params.isEmpty()) {
for (int i = 0; i < params.size(); i++) {
pstmt.setObject(index++, params.get(i));
}
}
resultSet = pstmt.executeQuery();
ResultSetMetaData metaData = resultSet.getMetaData();
int cols_len = metaData.getColumnCount();
while (resultSet.next()) {
T resultObject = cls.newInstance(); // 通过反射机制创建实例
for (int i = 0; i < cols_len; i++) {
String cols_name = metaData.getColumnName(i + 1);
Object cols_value = resultSet.getObject(cols_name);
if (cols_value == null) {
cols_value = "";
}
Field field = cls.getDeclaredField(cols_name);
field.setAccessible(true); // 打开javabean的访问private权限
field.set(resultObject, cols_value);
}
list.add(resultObject);
}
return list; } public void closeDB() {
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (con != null) {
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} }
测试:
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set; public class Test { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub DBUtils db = DBUtils.getInstance();
db.getConnection();
String sql = "SELECT name,introduction,location FROM activity WHERE id IN(SELECT activityId from mem_act_collect where memberId = ?)";
List<Activity> reslist = new ArrayList<Activity>();
List<Object> list = new ArrayList<Object>();
list.add(2014303342); try {
reslist = db.executeQueryByRef(sql,list,Activity.class); for(Activity ac:reslist){
System.out.println(ac.toString());
} } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
db.closeDB();
} } }
jdbc连接数据库工具类的更多相关文章
- 【JDBC】工具类的抽取
jdbc.properties属性文件 driverClass=com.mysql.jdbc.Driver url=jdbc:mysql:///jdbctest username=root passw ...
- JDBC实例--工具类升级,使用Apache DBCP连接池重构DBUtility,让连接数据库更有效,更安全
直接使用JDBC访问数据库时,需要避免以下隐患: 1. 每一次数据操作请求都需要建立数据库连接.打开连接.存取数据和关闭连接等步骤.而建立和打开数据库连接是一件既耗资源又费时的过程,如果频繁发生这种数 ...
- 20160406javaweb JDBC 实例工具类
一.建立静态的数据库配置文件: config.properties driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/datab ...
- 创建Jdbc封装工具类
jdbc.propertie url=jdbc:mysql:///empye user=root password=root driver=com.mysql.jdbc.Driver 读取资源文件 ...
- jdbc之工具类DBUtil的使用
首先回顾一下jdbc的使用方法: 1. 注册驱动 2. 建立连接 3. 建立statement 4. 定义sql语句 5. 执行sql语句,如果执行的是查询需遍历结果集 6. 关闭连接 其中建立连接和 ...
- JDBC——抽取工具类
目的:简化书写 分析: 1.注册驱动 2.获取连接对象 3.释放资源 1.注册驱动 2.获取连接对象 需求:不想传递参数,还能保证工具类的通用性解决方案:配置文件 jdbc.properties ur ...
- JDBC编程工具类 Dbconnection
JDBC基础:https://blog.csdn.net/weixin_44893902/article/details/106746880 Dbconnection工具类(包含了连接,增删改查,关闭 ...
- DBHelper--Java JDBC SSH 连接数据库工具类
概述 JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库. ----------------------------- ...
- JDBC 实例--JDBC通过工具类DBUtil连接到数据库,让我们不再恐惧操作数据库
利用JDBC连接到数据库一般需要几个步骤: 1.装载驱动程序. 2.建立连接. 3.发送和执行SQL语句. 4.释放资源 首先建立一个数据库: 脚本如下: create database csdn; ...
随机推荐
- Ubuntu 无线连接能上网,但是有线连接不能上
这两天装Ubuntu,遇到小问题.最头疼的还是上网,过去我装了Ubuntu时,都是插上网线就能直接上网,这次就不行了. 我刚点开一个网页,接下来点就不能上了,但是无线连接就可以正常上网. 我在一个论坛 ...
- Activity与Fragment之间的通信
由于Fragment的生命周期完全依赖宿主Activity,所以当我们在使用Fragment时难免出现Activity和Fragment间的传值通信操作. 1.Activity向Fragment,通过 ...
- eclipse java 配置
1.eclipse菜单 - Window - Preferences- Java - Installed JREs 2.eclipse菜单 - Window - Preferences- Java - ...
- oracle 同样数据删除(仅仅留一条)
DELETE FROM reg_user t1 WHERE user_name='9527008' and rowid > ( SELECT min(rowid) FROM location t ...
- 实现简单的django上传文件
本文用django实现上传文件并保存到指定路径下,没有使用forms和models,步骤如下: 1.在模板中使用form表单,因为这个表单使用于上传文件的,所以method属性必须设置为post,而且 ...
- Jquery与DOM对象
在第一次学习jquery中,常常会不能分辨DOM对象和Jquery对象,下面我们就简诉一下它们之间的关系和区别 1.DOM对象(Document Object Model) 文档对象模型,每一份DOM ...
- Js弹性漂浮广告代码
<html><head><meta http-equiv="Content-Type" content="text/html; charse ...
- 开源项目Material Calendar View 学习记录 (一)
开源项目Material Calendar View 学习记录 Github: https://github.com/prolificinteractive/material-calendarview ...
- hdu3714 三分
Error Curves Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- C#如何设置下拉COMMBOX为不可输入,只有下拉条目
设置下拉框的DropDownStyle属性为DropDownList