JDBC-自定义数据库工具类(DBService)
package cn; 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 SqlService { // 四大金刚
String driver = "com.mysql.jdbc.Driver" ;// 驱动名称
String url = "jdbc:mysql:///mao" ;// 连接字符串
String username = "root" ;// 用户名
String password = "123456" ;// 密码 // 三剑客
Connection con = null ;// 连接对象
PreparedStatement pstmt = null ;// 语句对象
ResultSet rs = null ;// 结果集对象 /**
* 获得连接对象
*
* @return 连接对象
* @throws ClassNotFoundException
* @throws SQLException
*/
public Connection getConnection() throws ClassNotFoundException,
SQLException {
Class. forName( driver);
con = DriverManager.getConnection( url , username , password );
return con ;
} /**
* 关闭三剑客
*
* @throws SQLException
*/
public void close(ResultSet rs, PreparedStatement pstmt, Connection con) { try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (con != null)
con.close();
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
}
} /**
* 执行更新
*
* @param sql
* 传入的预设的 sql语句
* @param params
* 问号参数列表
* @return 影响行数
*/
public int execUpdate(String sql, Object[] params) {
try {
this .getConnection();// 获得连接对象
this .pstmt = this. con .prepareStatement(sql);// 获得预设语句对象 if (params != null) {
// 设置参数列表
for (int i = 0; i < params. length; i++) {
// 因为问号参数的索引是从1开始,所以是i+1,将所有值都转为字符串形式,好让setObject成功运行
this .pstmt .setObject(i + 1, params[i] + "" );
}
} return this .pstmt .executeUpdate(); // 执行更新,并返回影响行数 } catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
this .close( this. rs, this. pstmt , this .con );
}
return 0;
} /**
* 执行查询
*
* @param sql
* 传入的预设的 sql语句
* @param params
* 问号参数列表
* @return 查询后的结果
*/
public List<Map<String, Object>> execQuery(String sql, Object[] params) { try {
this .getConnection();// 获得连接对象
this .pstmt = this. con .prepareStatement(sql);// 获得预设语句对象 if (params != null) {
// 设置参数列表
for (int i = 0; i < params. length; i++) {
// 因为问号参数的索引是从1开始,所以是i+1,将所有值都转为字符串形式,好让setObject成功运行
this .pstmt .setObject(i + 1, params[i] + "" );
}
} // 执行查询
ResultSet rs = pstmt .executeQuery(); List<Map<String, Object>> al = new ArrayList<Map<String, Object>>(); // 获得结果集元数据(元数据就是描述数据的数据,比如把表的列类型列名等作为数据)
ResultSetMetaData rsmd = rs.getMetaData(); // 获得列的总数
int columnCount = rsmd.getColumnCount(); // 遍历结果集
while (rs.next()) {
Map<String, Object> hm = new HashMap<String, Object>();
for (int i = 0; i < columnCount; i++) {
// 根据列索引取得每一列的列名,索引从1开始
String columnName = rsmd.getColumnName(i + 1);
// 根据列名获得列值
Object columnValue = rs.getObject(columnName);
// 将列名作为key,列值作为值,放入 hm中,每个 hm相当于一条记录
hm.put(columnName, columnValue);
}
// 将每个 hm添加到al中, al相当于是整个表,每个 hm是里面的一条记录
al.add(hm);
} return al; } catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
this .close( this. rs, this. pstmt , this .con );
}
return null ;
}
}
// 注册驱动:告诉 java 去连接哪种数据库
//DriverManager :驱动管理类,负责管理驱动,创建连接对象
DriverManager. registerDriver( new com.mysql.jdbc.Driver());
static void
|
registerDriver ( Driver driver)
向 DriverManager 注册给定驱动程序。
|
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
// ~ Static fields/initializers
// --------------------------------------------- //
// Register ourselves with the DriverManager
//
static {
try {
java.sql.DriverManager. registerDriver( new Driver());
} catch (SQLException E) {
throw new RuntimeException( "Can't register driver!" );
}
}
// 注册驱动:告诉 java去连接哪种数据库
//DriverManager.registerDriver(new com.mysql.jdbc.Driver());
new com.mysql.jdbc.Driver();
// 注册驱动:告诉 java 去连接哪种数据库
//DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//new com.mysql.jdbc.Driver();
Class. forName( "com.mysql.jdbc.Driver");
url = "jdbc:mysql://localhost:3306/mao"
url = jdbc:mysql://localhost:3306/mao?userUnicode=true&characterEncoding=utf8
//?userUnicode=true&characterEncoding=utf8
//加上这个可以解决数据库的乱码问题
*
//如果连接的mysql是在本机,并且mysql的端口是3306,比如:
url:"jdbc:mysql://localhost:3306/mao"
//那么url可以简写为:
url:"jdbc:mysql:///mao"
// 创建语句对象Statement
Statement stmt = con.createStatement(); //创建预设语句对象PreparedStatement
String sql = "update class set classDesc = ? where id = ?";
PreparedStatement pstmt = con.prepareStatement(sql);
<? xml version ="1.0" encoding= "UTF-8" ?>
< c3p0-config>
<!-- 默认配置,c3p0框架默认加载这段默认配置 -->
< default-config>
<!-- 配置JDBC 四个基本属性 -->
< property name ="driverClass" > com.mysql.jdbc.Driver</ property >
< property name ="jdbcUrl" > jdbc:mysql:///数据库名</ property >
< property name ="user" > 数据库用户名</ property >
< property name ="password" > 数据库密码</ property >
</ default-config> <!-- This app is massive! -->
</ c3p0-config>
package cn.service; import java.sql.Connection;
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; import org.junit.Test; import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.mchange.v2.c3p0.util.TestUtils; public class DBService { // 三剑客
Connection con = null;// 连接对象
PreparedStatement pstmt = null;// 语句对象
ResultSet rs = null;// 结果集对象 /**
* 获得连接对象
*
* @return 连接对象
* @throws ClassNotFoundException
* @throws SQLException
*/
public Connection getConnection() throws ClassNotFoundException,
SQLException { // 创建c3p0连接池
ComboPooledDataSource ds = new ComboPooledDataSource("itcast");
// 通过连接池对象创建连接
con = ds.getConnection();
return con;
} /**
* 关闭三剑客
*
* @throws SQLException
*/
public void close(ResultSet rs, PreparedStatement pstmt, Connection con) { try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (con != null)
con.close();
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
}
} /**
* 执行更新
*
* @param sql
* 传入的预设的sql语句
* @param params
* 问号参数列表
* @return 影响行数
*/
public int execUpdate(String sql, Object[] params) {
try {
this.getConnection();// 获得连接对象
this.pstmt = this.con.prepareStatement(sql);// 获得预设语句对象 if (params != null) {
// 设置参数列表
for (int i = 0; i < params.length; i++) {
// 因为问号参数的索引是从1开始,所以是i+1,将所有值都转为字符串形式,好让setObject成功运行
this.pstmt.setObject(i + 1, params[i] + "");
}
} return this.pstmt.executeUpdate();// 执行更新,并返回影响行数 } catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
this.close(this.rs, this.pstmt, this.con);
}
return 0;
} /**
* 执行查询
*
* @param sql
* 传入的预设的sql语句
* @param params
* 问号参数列表
* @return 查询后的结果
*/
public List<Map<String, Object>> execQuery(String sql, Object[] params) { try {
this.getConnection();// 获得连接对象
this.pstmt = this.con.prepareStatement(sql);// 获得预设语句对象 if (params != null) {
// 设置参数列表
for (int i = 0; i < params.length; i++) {
// 因为问号参数的索引是从1开始,所以是i+1,将所有值都转为字符串形式,好让setObject成功运行
this.pstmt.setObject(i + 1, params[i] + "");
}
} // 执行查询
ResultSet rs = pstmt.executeQuery(); List<Map<String, Object>> al = new ArrayList<Map<String, Object>>(); // 获得结果集元数据(元数据就是描述数据的数据,比如把表的列类型列名等作为数据)
ResultSetMetaData rsmd = rs.getMetaData(); // 获得列的总数
int columnCount = rsmd.getColumnCount(); // 遍历结果集
while (rs.next()) {
Map<String, Object> hm = new HashMap<String, Object>();
for (int i = 0; i < columnCount; i++) {
// 根据列索引取得每一列的列名,索引从1开始
String columnName = rsmd.getColumnName(i + 1);
// 根据列名获得列值
Object columnValue = rs.getObject(columnName);
// 将列名作为key,列值作为值,放入hm中,每个hm相当于一条记录
hm.put(columnName, columnValue);
}
// 将每个hm添加到al中,al相当于是整个表,每个hm是里面的一条记录
al.add(hm);
} return al; } catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
this.close(this.rs, this.pstmt, this.con);
} return null;
} }
JDBC-自定义数据库工具类(DBService)的更多相关文章
- JDBC操作数据库工具类(使用阿里Druid原生API创建数据源)
1.数据库配置类 package com.zdlt.auth.api.common.druid; import java.util.Properties; import static com.alib ...
- DbUtils是Apache出品一款简化JDBC开发的工具类
DbUtils - DbUtils是Apache出品一款简化JDBC开发的工具类 - 使用DbUtils可以让我们JDBC的开发更加简单 - DbUtils的使用: ...
- MySQL数据库工具类之——DataTable批量加入MySQL数据库(Net版)
MySQL数据库工具类之——DataTable批量加入数据库(Net版),MySqlDbHelper通用类希望能对大家有用,代码如下: using MySql.Data.MySqlClient; us ...
- MinerDB.java 数据库工具类
MinerDB.java 数据库工具类 package com.iteye.injavawetrust.miner; import java.sql.Connection; import java.s ...
- JDBC封装的工具类
1. JDBC封装的工具类 public class JDBCUtil { private static Properties p = new Properties(); private static ...
- 【JDBC】Java 连接 MySQL 基本过程以及封装数据库工具类
一. 常用的JDBC API 1. DriverManager类 : 数据库管理类,用于管理一组JDBC驱动程序的基本服务.应用程序和数据库之间可以通过此类建立连接.常用的静态方法如下 static ...
- jdbc连接的工具类
在不实用框架的情况下,有一个jdbc的工具类来进行数据库的连接就再好不过了,下面提供这个工具类DBUtil.java package org.jdbc.test; import java.io.Inp ...
- spring-boot-jpa 自定义查询工具类
1.pom文件中添加如下配置 <dependency> <groupId>org.springframework.boot</groupId> <artifa ...
- 工具类之数据库工具类:DBUtil(採用反射机制)
常常操作数据库的码农们一定知道操作数据库是一项非常复杂的工作.它不仅要解决各种乱码的问题还要解决各种数据表的增删改查等的操作. 另外每次操作数据库都要用到数据库连接.运行SQL语句.关闭连接的操作.所 ...
随机推荐
- 很漂亮的按钮css样式(没有用到图片,可直接拷贝代码使用)
[转自]http://blog.csdn.net/lushuaiyin/article/details/8118669 对于程序员,有时候也需要对页面风格做些改动,整体的页面风格还是美工的工作. 按钮 ...
- kubectl get pods The connection to the server was refused - did you specify the rig
1 主要是运行这个命令 alias kubectl='kubectl --kubeconfig=/etc/kubernetes/kubelet.conf'问题解决. 同时也用到如下命令: pas ...
- Linux更换jdk版本的一些问题
111111111111111111111111111111111111111111111111111111111111111111111111 在服务器上更新了新的 jdk,也在 /etc/prof ...
- python 打造一个sql注入脚本 (一)
0x00前言: 昨天刚刚看完小迪老师的sql注入篇的第一章 所以有了新的笔记. 0x01笔记: sql注入原理: 网站数据传输中,接受变量传递的值未进行过滤,导致直接带入数据库查询执行的操作. sql ...
- Nginx not running with no error message
Nginx not running with no error message #!/bin/shecho "start"rm /etc/nginx/sites-enabled/d ...
- VirtualBox从USB设备(PE)启动图文教程
很多朋友都为VBox无法进入U盘启动而苦恼,别懊恼,魔笛这就为你讲解 方法/步骤 1 大家先把U盘插入实体电脑. 单击“确定”打开“磁盘管理”, 键盘上的Win+R组合键,输入diskmgnt.. ...
- 为什么stm32有的外设在进行初始化的时候需要将寄存器重设为缺省值?不设置会怎么样?
首先,缺省值就是默认值的意思,默认值可以理解为设计芯片的人认为用这个参数,比较适中,起码不可能耽误你对某一模块进行驱动.然后,为什么除了默认值(缺省值),还有这么多其他的参数可以进行选择呢,那就要看你 ...
- Centos7 / RHEL 7 双网卡绑定
http://www.cnblogs.com/hukey/p/6224969.html 1. 简要 双网卡绑定技术在centos7中使用了teaming技术,而在rhel6/centos7中使用 ...
- JavaScript知识总结--对象的相关概念
一.定义 无序属性的集合. 说白了就是一个容器,可以容纳[基本值.对象或者函数],这些东西都叫做属性.每个属性都有一个名字,每个名字都映射一个值(可以是基本类型的值,也可以是引用类型的值).从以上描述 ...
- MyBatis初识(通过小实例清晰认识MyBatis)
1.MyBatis框架: MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可 ...