本文所需架包:mysql-connector-java-5.1.7-bin.jar(连接MySQL数据库需要),ojdbc6.jar(连接Oracle数据库需要)

1.JDBC工具类(JDBCUtil.java)

package mysql.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; public class JDBCUtil {
public static Connection getMysqlConect() throws Exception{
//1.注册驱动(加载com.mysql.jdbc.Driver类的同时实现注册mysql驱动,因为注册驱动是com.mysql.jdbc.Driver类中的静态代码块)
Class.forName("com.mysql.jdbc.Driver");
//2. 获取连接
String url = "jdbc:mysql://localhost:3306/test";
Connection conn = DriverManager.getConnection(url, "root", "root"); return conn;
} public static Connection getOracleConect() throws Exception{
Class.forName("oracle.jdbc.driver.OracleDriver"); String url = "jdbc:oracle:thin:@localhost:1521:xe";
Connection conn = DriverManager.getConnection(url, "huwei", "123"); return conn;
} public static void closeStatementSql(Connection conn,Statement sta,ResultSet rs){
try {
//先赋值的后关闭
if(rs != null){
rs.close();
}
if(sta != null){
sta.close();
}
if(conn != null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
} public static void closePrepareStatementSql(Connection conn,PreparedStatement pst,ResultSet rs){
try {
if(rs != null){
rs.close();
}
if(pst != null){
pst.close();
}
if(conn != null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}

2.JDBC模板类(JDBCTemplate.java)

package mysql.util;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class JDBCTemplate {
public static void sqlUpdate(String sql, Object[] params){
Connection conn = null;
PreparedStatement pst = null;
try {
conn = JDBCUtil.getMysqlConect();
pst = conn.prepareStatement(sql);
//因为pst不需要参数时,params可能会传入null;
//为了避免出现NullPointerException,对params进行声明。
if(params == null){
params = new Object[]{};
}
for (int i = 0; i < params.length; i++) {
pst.setObject(i+1, params[i]);
}
pst.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally{
JDBCUtil.closePrepareStatementSql(conn, pst, null);
}
}   public static List<Map<String,Object>> sqlQuery(String sql, Object[] params){ List<Map<String,Object>> recordList = new ArrayList<Map<String,Object>>();
Connection conn = null;
PreparedStatement pst = null;
ResultSet rs = null;
try {
conn = JDBCUtil.getMysqlConect();
pst = conn.prepareStatement(sql);
/*因为pst不需要参数时,params可能会传入null;
为了避免出现NullPointerException,对params进行声明。
*/
if(params == null){
params = new Object[]{};
}
for (int i = 0; i < params.length; i++) {
pst.setObject(i+1, params[i]);
}
rs = pst.executeQuery(); ResultSetMetaData mataData = rs.getMetaData();
//the count of records
int count = mataData.getColumnCount(); while(rs.next()){
Map<String, Object> record = new HashMap<String, Object>();
for(int i = 1; i <= count; i++){
String columnName = mataData.getColumnName(i);
record.put(columnName,rs.getObject(i));
}
recordList.add(record);
}
} catch (Exception e) {
e.printStackTrace();
} finally{
JDBCUtil.closePrepareStatementSql(conn, pst, null);
}
return recordList;
}
}

3.JDBC测试类(JDBCTest.java)

package mysql.test;

import java.util.List;
import java.util.Map; import mysql.util.JDBCTemplate; import org.junit.Test; public class JDBCTest { @Test
public void testSqlUpdate(){
String sql = "update emp set name = ? where id = ?";
Object[] params = new Object[]{"huwei",1};
JDBCTemplate.sqlUpdate(sql, params);
} @Test
public void testSqlQuery(){
String sql = "select * from emp";
//Object[] params = new Object[]{};
List<Map<String,Object>> recordList = JDBCTemplate.sqlQuery(sql, null);
for (Map<String,Object> record : recordList) {
System.out.println(record.get("id") + " " + record.get("name"));
}
}
}

  

  更多内容,请访问: http://www.cnblogs.com/BlueStarWei/

JDBC之组件封装的更多相关文章

  1. MySQL JDBC事务处理、封装JDBC工具类

    MySQL数据库学习笔记(十)----JDBC事务处理.封装JDBC工具类 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit. ...

  2. Vuejs 页面的区域化与组件封装

    组件的好处 当我用vue写页面的时候,大量的数据页面渲染,引入组件简化主页面的代码量,当代码区域块代码差不多相同时,组件封装会更加简化代码.组件是Vue.js最强大的功能之一. 组件可以扩展HTML元 ...

  3. ReactNative之从HelloWorld中看环境搭建、组件封装、Props及State

    开篇呢,先给大家问个好,今天是中秋节,祝大家中秋节快乐!!虽然是中秋节,但是木有回家还是总结一下知识点写写博客吧,想着昨天总结一下的,但是昨天和几个同学小聚了一下,酒逢知己总是千杯少呢,喝的微醺不适合 ...

  4. Vue + Element UI 实现权限管理系统 (功能组件封装)

    组件封装 为了避免组件代码的臃肿,这里对主要的功能部件进行封装,保证代码的模块化和简洁度. 组件结构 组件封装重构后,试图组件结构如下图所示 代码一览 Home组件被简化,包含导航.头部和主内容三个组 ...

  5. Vue + Element UI 实现权限管理系统 前端篇(七):功能组件封装

    组件封装 为了避免组件代码的臃肿,这里对主要的功能部件进行封装,保证代码的模块化和简洁度. 组件结构 组件封装重构后,试图组件结构如下图所示 代码一览 Home组件被简化,包含导航.头部和主内容三个组 ...

  6. picker(级联)组件及组件封装经验

    组件封装的几个经验 a.参数:最佳方式,仅一个object参数,所需要的实际参数,作为对象属性传入. 如此,便于数据的处理和扩展.例如,后期扩展需要增加参数,或者调整参数时,如果使用的对象传入,老的调 ...

  7. Linux组件封装(五)一个生产者消费者问题示例

    生产者消费者问题是计算机中一类重要的模型,主要描述的是:生产者往缓冲区中放入产品.消费者取走产品.生产者和消费者指的可以是线程也可以是进程. 生产者消费者问题的难点在于: 为了缓冲区数据的安全性,一次 ...

  8. [开源] 基于Layui组件封装的后台模版,HG-Layui-UI通用后台管理框架V1.0版

    HG框架简介 HG-Layui-UI框架,是基于layui最新版UI搭建的一套通用后台管理框架,借鉴了市面上各大主流框架风格,采用iframe标签页实现,保留了传统开发模式的简单实用性. 为快速开发减 ...

  9. Vue.js 自定义组件封装实录——基于现有控件的二次封装(以计时器为例)

    在本人着手开发一个考试系统的过程中,出现了如下一个需求:制作一个倒计时的控件显示在试卷页面上.本文所记录的就是这样的一个过程. 前期工作 对于这个需求,自然我想到的是有没有现成的组件可以直接使用(本着 ...

随机推荐

  1. 使用Github+Hexo框架搭建部署自己的博客

    前言 Hexo 是一个快速.简洁且高效的博客框架.Hexo 使用 Markdown (或其他渲染引擎 )解析文章, 在几秒内,即可利用靓丽的主题生成静态网页. 安装 安装前提 安装 Hexo 相当简单 ...

  2. Zabbix 3.2.6安装过程

    以3.2.6版本的Zabbix为例展开说明 1.准备Lnmp环境. 本次准备的环境: Linux:2.6.32-642.el6.x86_64 Nginx:1.12.0 Mariadb:10.2.6 P ...

  3. twemproxy代理主干流程——剖析twemproxy代码正编

    在twemproxy的发送和接收流程剖析中,我们已经完全弄清楚twemproxy如何将客户端以及服务端发来的包切分成msg,获得一个独立的msg后twemproxy应该如何处理?这是本文这次需要重点介 ...

  4. sublime text 3双击选择无法选择$符号

    创建/Data/Packages/User/PHP.sublime-settings文件,内容为"word_separators": "./\\()\"'-:, ...

  5. 【LeetCode】152. Maximum Product Subarray

    题目: Find the contiguous subarray within an array (containing at least one number) which has the larg ...

  6. 【Android Developers Training】 46. 处理音频外放设备

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  7. DOCKER 从入门到放弃(二)

    搜索镜像 从docker官方镜像仓库搜索镜像 docker search [OPTIONS] TERM OPTIONS: --automated :只显示自动创建的镜像,默认值为fasle --fil ...

  8. maven自定义jar到本地仓库

    Apache Maven为项目构建提供了绝佳的解决方案,其本地仓库中缓存了远程代理仓库或中央仓库中的资源,从而提高网络资源使用效率,很好很强大!  但是并非所有资源都可以根据GroupId.Artif ...

  9. 从.src.rpm包中提取出完整的源码的方法

    1 什么是完整的源码 就是说,最初始的源码加上打了所有的patch后的源码,即最新的源码. 2 过程 2.1 从.src.rpm中提取完整的rpm工程文件 2.1.1 rpm to cpio rpm2 ...

  10. Docker部署DVWA

    上次在Docker手动配置了一个Ubuntu的Lamp镜像,这次来试验一下使用这个镜像部署一个简单的web应用吧. 首先从Lamp镜像运行一个容器 root@VM-149-127-debian:~/a ...