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方法的时候就可以实现对模型类对应数据表数据的删除. 二.自关联 ...
随机推荐
- python,mock-server之moco
python,mock-server之moco1.mock使用:mock除了用在单元测试过程中,还有一个用途,当前端开发在开发页面的时候,需要服务端提供API接口,此时服务端没开发完成,或者说没搭建测 ...
- Mac-如何安装apk到android手机
将电脑上的apk安装到手机,Windows系统可以使用usb连接Android手机,然后打开编辑手机中的文件,直接粘贴apk到手机上安装apk.对于Mac来说就没有那么简单啦.那么Mac如何将apk安 ...
- PAT 2019-3 7-2 Anniversary
Description: Zhejiang University is about to celebrate her 122th anniversary in 2019. To prepare for ...
- git使用记录六:对commit的message做处理
修改最新commit的message git commit --amend 修改老旧commit的message 查询最新的三个log soaeon@DESKTOP-FUJJTHR MINGW64 / ...
- .NET/VB.NET: solving the error “The system cannot find the file specified.” “\Temp\.NETFramework,Version=v4.0.AssemblyAttributes.vb”
Source Link Bumped into this error a while ago in Visual Studio 2010: Kind Error Number 80 Descripti ...
- jquery 的几种写法和常见问题
为了理解页面初始化事件的编写和执行方式,特此记录下页面加载事件的语句方式: //最简单的加载事件语句 $(function(){ alert("这个提示框最先弹出")//这个用的最 ...
- kubernetes容器集群管理部署master节点组件
集群部署获取k8s二进制包 [root@master ~]# wget https://dl.k8s.io/v1.15.0/kubernetes-server-linux-amd64.tar.gz [ ...
- 容器改变/窗口改变重新渲染echarts
是否遇见使用侧边栏菜单收缩/展开,echarts容器大小变化,但是echarts不重新自适应容器.或者,window窗口改变但是echarts不随着改变,针对这两种echarts不自适应的情况,分享下 ...
- jQuery封装轮播图插件
// 布局要求,必须有一个容器,图片和两个按钮,布局方式自定,小圆点样式固定 // <div class="all"> // <img src="img ...
- Codeforces 1179D 树形DP 斜率优化
题意:给你一颗树,你可以在树上添加一条边,问添加一条边之后的简单路径最多有多少条?简单路径是指路径中的点只没有重复. 思路:添加一条边之后,树变成了基环树.容易发现,以基环上的点为根的子树的点中的简单 ...