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方法的时候就可以实现对模型类对应数据表数据的删除. 二.自关联 ...
随机推荐
- 将js/css脚本放到png图片中的实践。
http://blog.csdn.net/zswang/article/details/7061560 将js/css脚本放到png图片中的实践. 标签: 脚本functionxmlhttprequ ...
- Java + selenium 元素定位(3)之By TagName
本篇介绍findElement接口中的By TagName方法.首先,要知道什么是tagname.之前我们使用F12开发者工具查看网页元素是,发现每行代码前都有<input>.<bo ...
- Advanved DataGrid using QTP
Use the GetCellData(j,i) Function for Cell data and Use the GetRowData(j) Function for Row Data wher ...
- idea配置svn正确步骤(下载svn的过程就不写了)
打开----->File------>Settings 2. 3在vcs中选择 4进入此界面 5选择 这样svn就配置好了
- 关于Java序列化你应该知道的一切
什么是序列化 我们的对象并不只是存在内存中,还需要传输网络,或者保存起来下次再加载出来用,所以需要Java序列化技术. Java序列化技术正是将对象转变成一串由二进制字节组成的数组,可以通过将二进制数 ...
- 一、python基础之字符串的处理
最近开始重新回过头来巩固一下python的基础知识,并在此做一些记录以便未来更好的回顾 一.字符串的大小写转换 title() 使用title()方法可以将字符串中每个单词的首字母大写 name = ...
- Unrecognized SSL message, plaintext connection--SSLSocket 代理服务器连接
虽然java代码 URL.openconnect(proxy);已经实现了https客户端通过代理连接服务器 但个人在使用socket https代理http://www.cnblogs.com/h ...
- sql优化案例1
--访客数 ) from ( select v.idvisitor from ods.piwik_log_visit v , , group by v.idvisitor) --优化后的访客数查询 s ...
- HDU-4003 Find Metal Mineral 树形DP (好题)
题意:给出n个点的一棵树,有k个机器人,机器人从根节点rt出发,问访问完整棵树(每个点至少访问一次)的最小代价(即所有机器人路程总和),机器人可以在任何点停下. 解法:这道题还是比较明显的能看出来是树 ...
- ida吧
经过IDA反编译后的代码是:int __cdecl Ompress(void *Dst, int a2, int a3, int a4)//dst( [esp+24h][ebp+4h] );a2([e ...