java数据库开发之JDBC的完整封装兼容多种数据库

目前此代码我只用过mysql和oracle数据库测试过,但相信其它数据库都是可以的,只要导入你需要操作的数据库jar包,驱动等就可,下面上代码:

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;

/**
 * 对jdbc的完整封装
 *
 */
public class JDBCUtil {

	private static String driver = null;
	private static String url = null;
	private static String username = null;
	private static String password = null;

	private CallableStatement callableStatement = null;//创建CallableStatement对象
	private Connection conn = null;
	private PreparedStatement pst = null;
	private ResultSet rst = null;

/*	static {
    try {
      // 加载数据库驱动程序
      Class.forName(driver);
    } catch (ClassNotFoundException e) {
      System.out.println("加载驱动错误");
      System.out.println(e.getMessage());
    }
  } */  

	public JDBCUtil(String driver,String url ,String username,String password) {
		this.driver = driver;
		this.url = url;
		this.username = username;
		this.password = password;
	}

  /**
   * 建立数据库连接
   * @return 数据库连接
   */
  public Connection getConnection() {
    try {
    	 // 加载数据库驱动程序
      try {
				Class.forName(driver);
			} catch (ClassNotFoundException e) {
				System.out.println("加载驱动错误");
	      System.out.println(e.getMessage());
				e.printStackTrace();
			}
      // 获取连接
    	conn = DriverManager.getConnection(url, username,
    			password);
    } catch (SQLException e) {
      System.out.println(e.getMessage());
    }
    return conn;
  }  

  /**
   * insert update delete SQL语句的执行的统一方法
   * @param sql SQL语句
   * @param params 参数数组,若没有参数则为null
   * @return 受影响的行数
   */
  public int executeUpdate(String sql, Object[] params) {
    // 受影响的行数
    int affectedLine = 0;  

    try {
      // 获得连接
      conn = this.getConnection();
      // 调用SQL
      pst = conn.prepareStatement(sql);  

      // 参数赋值
      if (params != null) {
        for (int i = 0; i < params.length; i++) {
        	pst.setObject(i + 1, params[i]);
        }
      }
      /*在此 PreparedStatement 对象中执行 SQL 语句,
                     该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)语句,比如 INSERT、UPDATE 或 DELETE
                     语句;或者是无返回内容的 SQL 语句,比如 DDL 语句。  */
      // 执行
      affectedLine = pst.executeUpdate();

    } catch (SQLException e) {
      System.out.println(e.getMessage());
    } finally {
      // 释放资源
      closeAll();
    }
    return affectedLine;
  }  

  /**
   * SQL 查询将查询结果直接放入ResultSet中
   * @param sql SQL语句
   * @param params 参数数组,若没有参数则为null
   * @return 结果集
   */
  private ResultSet executeQueryRS(String sql, Object[] params) {
    try {
      // 获得连接
      conn = this.getConnection();  

      // 调用SQL
      pst = conn.prepareStatement(sql);  

      // 参数赋值
      if (params != null) {
        for (int i = 0; i < params.length; i++) {
        	pst.setObject(i + 1, params[i]);
        }
      }  

      // 执行
      rst = pst.executeQuery();  

    } catch (SQLException e) {
      System.out.println(e.getMessage());
    }   

    return rst;
  }  

  /**
   * SQL 查询将查询结果:一行一列
   * @param sql SQL语句
   * @param params 参数数组,若没有参数则为null
   * @return 结果集
   */
  public Object executeQuerySingle(String sql, Object[] params) {
    Object object = null;
    try {
      // 获得连接
      conn = this.getConnection();  

      // 调用SQL
      pst = conn.prepareStatement(sql);  

      // 参数赋值
      if (params != null) {
        for (int i = 0; i < params.length; i++) {
        	pst.setObject(i + 1, params[i]);
        }
      }  

      // 执行
      rst = pst.executeQuery();  

      if(rst.next()) {
        object = rst.getObject(1);
      }  

    } catch (SQLException e) {
      System.out.println(e.getMessage());
    } finally {
      closeAll();
    }  

    return object;
  }  

  /**
   * 获取结果集,并将结果放在List中
   *
   * @param sql SQL语句
   *     params 参数,没有则为null
   * @return List
   *            结果集
   */
  public List<Object> excuteQuery(String sql, Object[] params) {
    // 执行SQL获得结果集
    ResultSet rs = executeQueryRS(sql, params);  

    // 创建ResultSetMetaData对象
    ResultSetMetaData rsmd = null;  

    // 结果集列数
    int columnCount = 0;
    try {
      rsmd = rs.getMetaData();  

      // 获得结果集列数
      columnCount = rsmd.getColumnCount();
    } catch (SQLException e1) {
      System.out.println(e1.getMessage());
    }  

    // 创建List
    List<Object> list = new ArrayList<Object>();  

    try {
      // 将ResultSet的结果保存到List中
      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);//每一个map代表一条记录,把所有记录存在list中
      }
    } 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 {
      // 调用存储过程
    	// prepareCall:创建一个 CallableStatement 对象来调用数据库存储过程。
      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 (rst != null) {
      try {
        rst.close();
      } catch (SQLException e) {
        System.out.println(e.getMessage());
      }
    }  

    // 关闭PreparedStatement对象
    if (pst != null) {
      try {
        pst.close();
      } catch (SQLException e) {
        System.out.println(e.getMessage());
      }
    }  

    // 关闭CallableStatement 对象
    if (callableStatement != null) {
      try {
        callableStatement.close();
      } catch (SQLException e) {
        System.out.println(e.getMessage());
      }
    }  

    // 关闭Connection 对象
    if (conn != null) {
      try {
        conn.close();
      } catch (SQLException e) {
        System.out.println(e.getMessage());
      }
    }
  }
}

使用的时候直接new一个JDBCUtil类,然后对传入对应的sql语句,例:

public class JDBCTest {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JDBCUtil jdbcUtil = new JDBCUtil("com.mysql.jdbc.Driver",
		"jdbc:mysql://localhost:3306/myhelp?useUnicode=true&characterEncoding=utf-8&useSSL=false","root","142014068");
		String sql = "delete from menu_detial where count=6";
		System.out.println(jdbcUtil.executeUpdate(sql, null));
	}
}

更多关于java数据库开发的文章请查看下面的相关链接

(0)

相关推荐

  • 在eclipse导入Java的jar包的方法JDBC(图文说明)

    在使用JDBC编程时需要连接数据库,导入JAR包是必须的,导入其它的jar包方法同样如此,导入的方法是 打开eclipse 1.右击要导入jar包的项目,点properties  2.左边选择java build path,右边选择libraries  3.选择add External jars  4.选择jar包的按照路径下的 确定后就行了. Java连接MySQL的最新驱动包下载地址 http://www.mysql.com/downloads/connector/j 有两种方法导入jar包

  • java数据库开发之JDBC基础使用方法及实例详解

    1.什么是JDBC JDBC是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成.JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序 JDBC 数据库访问规范 应用程序 <-> JDBC <-> MySQL驱动 <-> MySQL                  <-> Oracle驱动 <-> Oracle 导入jar包 加载驱动 C

  • Java开发Oracle数据库连接JDBC Thin Driver 的三种方法

    Oracle的jdbc驱动三种主要分类: 1.JDBC OCI: oci是oracle call interface的缩写,此驱动类似于传统的ODBC 驱动.因为它需要Oracle Call Interface and Net8,所以它需要在运行使用此驱动的JAVA程序的机器上安装客户端软件,其实主要是用到orcale客户端里以dll方式提供的oci和服务器配置. 2.JDBC Thin: thin是for thin client的意思,这种驱动一般用在运行在WEB浏览器中的JAVA程序.它不是

  • Java实现JDBC连接数据库简单案例

    一.准备好数据库 例如,MS SQL Server2008环境下,创建school数据库,内含一个表student(sid,sname,ssex,sage),并添加若干行数据. 二.配置数据库驱动文件 1.准备好(下载)sqlserver2008.jar文件: 2.拷贝下载的jar文件到工程中: 在java工程中创建lib目录,拷贝数据库驱动jar文件到该目录 3.添加并在Eclipse的Java工程中配置 (右击工程,选择Bulid path–>config Build Path–>addJ

  • java jdbc连接mysql数据库实现增删改查操作

    jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打交道非常基础的一个知识,也是比较接近底层的,在实际的工作中大家用得更多的其实还是比较成熟的框架,例如Hibernate.Mybatis. 但是作为这些成熟框架的底层的jdbc却也是我们应该去掌握的,只有了解了jdbc的增删改查,这样在以后如果有兴趣去研究Hibernate或者Mybatis的源代码的时候才能更好的去理解这些成熟的框架是如何去实现增删改查

  • java使用jdbc连接数据库简单实例

    本文为大家分享了java使用jdbc连接数据库的具体代码,供大家参考,具体内容如下 package com.tr.jdbc; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.apache.commons.dbcp2.BasicDataSource; public class CollectionFac

  • Java基础开发之JDBC操作数据库增删改查,分页查询实例详解

    对数据库的操作无非就是增删改查,其中数查询操作最为复杂,所以将查询单独讲解,我这里用的Mysql数据库 增删改查操作 分页查询操作 1.查询结果以list返回 2.查询结果以jsonArray返回 3.查询总记录条数 先看一下相关的配置信息 public static final String USER_NAME = "root"; public static final String PWD = "123456789"; public static final S

  • java开发之Jdbc分页源码详解

    总之是用jdbc 的游标移动 package com.sp.person.sql.util; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Map; import java.util.TreeMap; import javax.sql.DataSource; /** *

  • Java使用JDBC连接数据库的实现方法

    本文实例讲述了Java使用JDBC连接数据库的实现方法,是Java数据库程序设计里非常实用的重要技巧.分享给大家供大家参考.具体如下: JDBC(Java Data Base Connectivity)数据库连接,通常我们在编写web应用或java应用程序要连接数据库时就要使用JDBC.使用JDBC连接数据库一般步骤有: 1.加载驱动程序 Class.forName(driver); 2.创建连接对象 Connection con = DriverManager.getConnection(ur

  • Java使用jdbc连接MySQL数据库实例分析

    本文实例讲述了Java使用jdbc连接MySQL数据库的方法.分享给大家供大家参考,具体如下: 使用jdbc连接数据库: 可以直接在方法中定义url.user.psd等信息,也可以读取配置文件,但是在web项目中肯定是要使用第二种方式的,为了统一,只介绍第二种方式. 步骤 1.创建配置文件db.properties 无论是eclipse还是myeclipse,在工程下右键->new->file,以properties为后缀名就好了. 配置文件内容: #连接数据库的url,如果主机地址是loca

  • Java基于JDBC连接数据库及显示数据操作示例

    本文实例讲述了Java基于JDBC连接数据库及显示数据操作.分享给大家供大家参考,具体如下: 1. 导入jdbc包 java要连接MySQL数据库需要用到JDBC工具(mysql-connector-java-5.1.39-bin.jar),这是一个jar包,不同的数据库对应不同的jar包,这里用的是MySQL数据库jar包,导入很简单,鼠标对项目右击 - Build Path - Configure Build Path - 右侧选Libraries - Add External JARs,选

  • 基于Java回顾之JDBC的使用详解

    尽管在实际开发过程中,我们一般使用ORM框架来代替传统的JDBC,例如Hibernate或者iBatis,但JDBC是Java用来实现数据访问的基础,掌握它对于我们理解Java的数据操作流程很有帮助. JDBC的全称是Java Database Connectivity. JDBC对数据库进行操作的流程:•连接数据库•发送数据请求,即传统的CRUD指令•返回操作结果集JDBC中常用的对象包括:•ConnectionManager•Connection•Statement•CallableStat

随机推荐