本文所需架包: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. C++经典绘图工具EasyX

    EasyX简介 EasyX 在学习C语言时,很多同学抱怨说C只能写最简单的Demo程序,通过printf在屏幕上打印字符来验证代码.这样的编程很枯燥,一点没觉得自己在设计软件. EasyX是针对C++ ...

  2. vs2015添加ActiveX Control Test Container工具(转载)

    http://blog.csdn.net/lphbtm/article/details/8647565 vs2010 中添加 ActiveX Control Test Container工具(转载) ...

  3. [转] SOLID五大设计原则

    我们知道,面向对象对于设计出高扩展性.高复用性.高可维护性的软件起到很大的作用.我们常说的SOLID五大设计原则指的就是:       S = 单一职责原则 Single Responsibility ...

  4. phpcmsV9手机站内容页有时内容不显示

    phpcmsV9手机站内容页有时内容不显示,修改的办法是: 在文件phpcms\modules\wap\index.php 中 屏蔽第119行,即如下内容 //$content = $contentp ...

  5. VMware中Linux系统时间与主机同步以及时区设置

    网络上有各种资料,但最简单的一种方法就是修改虚拟机的配置文件 *.vmx .修改 tools.syncTime = "FALSE" 为 tools.syncTime = " ...

  6. phpstorm注册码

    用户名:Learn Programming License key:(包括LICENSE BEGIN和LICENSE END部分) ===== LICENSE BEGIN =====63758-120 ...

  7. 修改phpstorm的字体样式和大小

    默认的字体实在太小,也太丑,必须修改下.就是强迫症,没错.下面截图配文字说明下 方法/步骤   首先进入设置,不解释   先设置软件界面上的字体.进入设置之后,选择(外观)Appearance.之后软 ...

  8. 开源搜索引擎abelkhan

    发起一个开源项目http://www.abelkhan.com/ 目前而言,已经用python编写了一个网络爬虫抓取页面,和一个简单的前端 网络爬虫,已经有很多高手写过,我基本上奉行了拿来主义, 得益 ...

  9. [leetcode-500-Keyboard Row]

    Given a List of words, return the words that can be typed using letters of alphabet on only one row' ...

  10. 禁用自动映射的 Exchange 邮箱

    客户最近询问他们无法从用户的Outlook配置文件中删除邮箱.在这种情况下,它们是共享邮箱,并出现在Outlook的左窗格中.但原因和解决方法同样适用于用户邮箱.并且 无论用户邮箱在本地 Exchan ...