Java封装JDBC数据库增、删、改、查操作成JAR文件,以供Web工程调用,适用于多种数据库
废话不多说,直接上源代码,最后有使用方法,当然,也可以作为普通公用类使用,只是封装成JAR更方便使用。
- package db.util;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.InputStreamReader;
- import java.sql.CallableStatement;
- 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;
- import org.json.JSONObject;
- /*
- * 说明:封装JDBC数据库增删改查、存储过程
- * 作者:Jiro.Chen
- * 时间:2016-12-12 15:13:54
- * */
- public class ConnectionUtil {
- private static String DRIVER = null;
- private static String URL = null;
- private static String USERNAME = null;
- private static String PASSWORD = null;
- private Connection conn = null;
- private PreparedStatement pstmt = null;
- private CallableStatement callableStatement = null;
- private ResultSet resultSet = null;
- private void init(){
- try {
- Class.forName(DRIVER);
- } catch (ClassNotFoundException e) {
- System.out.println("加载驱动错误");
- System.out.println(e.getMessage());
- }
- }
- public ConnectionUtil(String dbParam){
- String path = getCurrentPath();
- String filePath = path + "\\db.JSON";
- String text = null;
- try{
- text = this.readFile(new File(filePath));
- if(text.equals(null) || text.equals("")){
- filePath = path + "\\db.json";
- text = this.readFile(new File(filePath));
- if(text.equals(null) || text.equals("")){
- System.out.println("找不到指定文件");
- }
- }
- }catch(Exception e){
- e.printStackTrace();
- }
- JSONObject json = new JSONObject(text);
- JSONObject DB = json.getJSONObject(dbParam);
- DRIVER = DB.getString("DRIVER");
- URL = DB.getString("URL");
- USERNAME = DB.getString("USERNAME");
- PASSWORD = DB.getString("PASSWORD");
- this.init();
- }
- private String readFile(File file){
- String text = null;
- try{
- if(file.isFile() && file.exists()){
- InputStreamReader read = new InputStreamReader(new FileInputStream(file),"UTF-8");
- BufferedReader bufferedReader = new BufferedReader(read);
- String lineTxt = null;
- while((lineTxt = bufferedReader.readLine()) != null){
- text += lineTxt;
- }
- read.close();
- }
- }catch(Exception e){
- e.printStackTrace();
- }
- return text;
- }
- private String getCurrentPath(){
- String rootPath = null;
- java.net.URL url = ConnectionUtil.class.getProtectionDomain().getCodeSource().getLocation();
- String filePath = null;
- try{
- filePath = java.net.URLDecoder.decode(url.getPath(), "utf-8");
- }catch (Exception e) {
- e.printStackTrace();
- }
- if(filePath.endsWith(".jar")){
- filePath = filePath.substring(0, filePath.lastIndexOf("/") + 1);
- }
- java.io.File file = new java.io.File(filePath);
- rootPath = file.getAbsolutePath();
- rootPath = rootPath.substring(0, rootPath.lastIndexOf("\\"));
- rootPath += "\\classes";
- return rootPath;
- }
- public Connection getConnection(){
- try{
- conn = DriverManager.getConnection(URL, USERNAME,
- PASSWORD);
- }catch (SQLException e){
- System.out.println(e.getMessage());
- }
- return conn;
- }
- public int executeUpdate(String sql, Object[] params){
- int affectedLine = 0;
- try{
- conn = this.getConnection();
- pstmt = conn.prepareStatement(sql);
- if (params != null){
- for (int i = 0; i < params.length; i++){
- pstmt.setObject(i + 1, params[i]);
- }
- }
- affectedLine = pstmt.executeUpdate();
- }catch (SQLException e){
- System.out.println(e.getMessage());
- }finally {
- closeAll();
- }
- return affectedLine;
- }
- /**
- * SQL 查询将查询结果直接放入ResultSet中
- */
- private ResultSet executeQueryRS(String sql, Object[] params){
- try{
- conn = this.getConnection();
- pstmt = conn.prepareStatement(sql);
- if (params != null){
- for (int i = 0; i < params.length; i++){
- pstmt.setObject(i + 1, params[i]);
- }
- }
- resultSet = pstmt.executeQuery();
- }catch (SQLException e){
- System.out.println(e.getMessage());
- }
- return resultSet;
- }
- /**
- * 获取结果集,并将结果放在List中
- */
- public List<Object> excuteQuery(String sql, Object[] params){
- ResultSet rs = executeQueryRS(sql, params);
- ResultSetMetaData rsmd = null;
- int columnCount = 0;
- try{
- rsmd = rs.getMetaData();
- columnCount = rsmd.getColumnCount();
- }catch (SQLException e1) {
- System.out.println(e1.getMessage());
- }
- List<Object> list = new ArrayList<Object>();
- try{
- while (rs.next()) {
- Map<String, Object> map = new HashMap<String, Object>();
- for (int i = 1; i <= columnCount; i++) {
- map.put(rsmd.getColumnLabel(i), rs.getObject(i));
- }
- list.add(map);
- }
- }catch (SQLException e) {
- System.out.println(e.getMessage());
- }finally {
- closeAll();
- }
- return list;
- }
- /**
- * 存储过程带有一个输出参数的方法
- * @param sql 存储过程语句
- * @param params 参数数组
- * @param outParamPos 输出参数位置
- * @param SqlType 输出参数类型
- * @return 输出参数的值
- */
- public Object excuteQuery(String sql, Object[] params,int outParamPos, int SqlType){
- Object object = null;
- conn = this.getConnection();
- try{
- callableStatement = conn.prepareCall(sql);
- if(params != null){
- for(int i = 0; i < params.length; i++) {
- callableStatement.setObject(i + 1, params[i]);
- }
- }
- callableStatement.registerOutParameter(outParamPos, SqlType);
- callableStatement.execute();
- object = callableStatement.getObject(outParamPos);
- }catch (SQLException e){
- System.out.println(e.getMessage());
- }finally{
- closeAll();
- }
- return object;
- }
- private void closeAll(){
- if (resultSet != null){
- try {
- resultSet.close();
- } catch (SQLException e){
- System.out.println(e.getMessage());
- }
- }
- if(pstmt != null){
- try{
- pstmt.close();
- } catch (SQLException e){
- System.out.println(e.getMessage());
- }
- }
- if(callableStatement != null){
- try{
- callableStatement.close();
- }catch (SQLException e) {
- System.out.println(e.getMessage());
- }
- }
- if(conn != null){
- try{
- conn.close();
- } catch (SQLException e) {
- System.out.println(e.getMessage());
- }
- }
- }
- }
使用方法:
在Web工程src目录下新建db.JSON或者db.json文件
- {
- "DB":{
- "DRIVER" :"com.microsoft.sqlserver.jdbc.SQLServerDriver",
- "URL" :"jdbc:sqlserver://223.68.143.21:12922;DatabaseName=TwRailway_ECP",
- "USERNAME":"sa",
- "PASSWORD":"senao"
- }
- }
其中,DB可以有多个
工程导入JAR包之后,通过
- ConnectionUtil conn = new ConnectionUtil("DB");
配置文件db.JSON可以写多个数据库,参数DB指定使用哪种数据库建立连接
方法介绍:
1.public Connection getConnection()
功能:
JAR中提供了全套的增删改查的方法,但为了应对某种特殊情况下的需求,方法不能满足程序员需求时,可以使用此方法建立与数据库的连接,自行编写DAO层方法。
参数说明:
无
传回值:
传回Connection连接或NULL
2.public int executeUpdate(String sql, Object[] params)
功能:
使用PrepareStatement预处理执行sql,适用于数据新增、修改、删除等操作。
参数说明:
sql 执行的sql语句
params 对象数组,存储要新增、修改或删除的数据。可以为空。
传回值:
传回1表示成功
传回0表示失败
3.public List<Object> excuteQuery(String sql, Object[] params)
功能:
使用PrepareStatement预处理执行sql,适用于数据查询。
参数说明:
sql 执行的sql语句
params 对象数组,sql语句中预设的值。可以为空。
传回值:
带有Map索引的List类型数据
只是适用于小型项目,减少DAO层编码量,增强代码的重用性。可以封装为公用类使用,也可以作为JAR档。
注意:此JAR依赖json.jar包。
Java封装JDBC数据库增、删、改、查操作成JAR文件,以供Web工程调用,适用于多种数据库的更多相关文章
- 好用的SQL TVP~~独家赠送[增-删-改-查]的例子
以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化. 本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...
- iOS FMDB的使用(增,删,改,查,sqlite存取图片)
iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...
- iOS sqlite3 的基本使用(增 删 改 查)
iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...
- django ajax增 删 改 查
具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...
- ADO.NET 增 删 改 查
ADO.NET:(数据访问技术)就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存中供程序调用 ADO.NET所有数据访 ...
- MVC EF 增 删 改 查
using System;using System.Collections.Generic;using System.Linq;using System.Web;//using System.Data ...
- python基础中的四大天王-增-删-改-查
列表-list-[] 输入内存储存容器 发生改变通常直接变化,让我们看看下面列子 增---默认在最后添加 #append()--括号中可以是数字,可以是字符串,可以是元祖,可以是集合,可以是字典 #l ...
- MyBatis的配置与使用(增,删,改,查)
---恢复内容开始--- Mybatis入门介绍 一.MyBatis介绍 什么是MyBtis? MyBatis 是一个简化和实现了 Java 数据持久化层(persistence layer)的开源框 ...
- Django(十)模型:django模型类对数据库的:增/删/改/查、自关联、管理器、元选项(指定表名)
一.插入.更新和删除 调用一个模型类对象的save方法的时候就可以实现对模型类对应数据表的插入和更新. 调用一个模型类对象的delete方法的时候就可以实现对模型类对应数据表数据的删除. 二.自关联 ...
随机推荐
- Iconv作用以及安装问题解决
当我们在使用Window操作系统的时候,可能使用最多的文本格式就是txt了,但是当我们将Window平台下的txt文本文档拷贝到Linux平台下查看时,发现原来的中文全部变成了乱码.没错, 引起这个结 ...
- Maximum of lines in a DataBand
Hello! I have a problem.I have a DataBand, but I need it to grow only up to 14 lines. If it is beyon ...
- cpupower:Shows and sets processor power related values
软件包: * sys-power/cpupower Latest version available: Latest version installed: Size of files: KiB Hom ...
- Daily Life——团队冲刺博客——(领航篇)
目录 领航目标 各个成员在 Alpha 阶段认领的任务 各个成员的具体任务安排 整个项目预期的任务量 团队成员贡献值的计算规则 燃尽图 Daily Life团队冲刺博客 领航目标 各个成员在 Alph ...
- Embedding和Word2Vec实战
在之前的文章中谈到了文本向量化的一些基本原理和概念,本文将介绍Word2Vec的代码实现 https://www.cnblogs.com/dogecheng/p/11470196.html#Word2 ...
- 一些关于SEO优化的笔记
高级搜索指令: 双引号:“xxx” 代表完全匹配的搜索 减号:-(减号前面必须是空格,后面必须没有空格)代表搜索不包含减号后面的词的页面 filetype:用于搜索特定文件格式(百度支持的文件类型:P ...
- PostgreSQL 荣获 2019 年 O'Reilly 终身成就奖
Java技术栈 www.javastack.cn 优秀的Java技术公众号 来自:开源中国社区 https://www.oschina.net/news/108436/pg-wins-2019-ore ...
- ELK+filebeat+redis 日志分析平台
一.简介 ELK Stack是软件集合Elasticsearch.Logstash.Kibana的简称,由这三个软件及其相关的组件可以打造大规模日志实时处理系统. 其中,Elasticsearch 是 ...
- opencv图像的基本操作3
1.获取像素并修改 读取一副图像,根据像素的行和列的坐标获取它的像素值,对于RGB图像而言,返回RGB的值,对于灰度图则返回灰度值 import cv2 import numpy img = cv2. ...
- Nginx四层负载均衡
目录 Nginx四层负载均衡概述 Nginx如何配置四层负载均衡 使用nginx四层负载均衡实现tcp的转发 Nginx四层负载均衡概述 什么是四层负载均衡 四层负载均衡是基于传输层协议包来封装的(如 ...