对 JDBC 做一个轻量地封装,顺便复习,熟悉sql,io,util,lang.Reflect等包的使用,泛型的使用,待完善。。。

package com.webproj.utils;

import java.io.IOException;
import java.io.InputStream;
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.Properties;

//用来获取数据库连接,PreparedStatement处理器对象,ResultSet结果集对象以及ResultSetMeataData对象等。
public class DBTools {
//因为是工具类,所以变量及方法全部静态
private static Connection conn=null;//数据库连接
private static PreparedStatement pStmt=null;//预处理器
private static ResultSet rs=null;//数据集
private static ResultSetMetaData metadata=null;//数据集中的元数据,包含列名,列的数据类型等等
private static String driver=null,url=null,user=null,password=null;//驱动名,数据库url,数据库登陆用户名,密码
private static String propertyFile="jdbc.properties";//存放driver,url,user,password的配置文件。

//类一加载,则开始读取Property配置文件并加载驱动。
static{
InputStream in=DBTools.class.getClassLoader().getResourceAsStream(propertyFile);
Properties pro=new Properties();
try {
pro.load(in);
driver=pro.getProperty("driver");
url=pro.getProperty("url");
user=pro.getProperty("user");
password=pro.getProperty("password");
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//获取数据库连接
public static Connection getConn(){
try {
conn=DriverManager.getConnection(url,user,password);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//因为经常要获取 PreparedStatement对象,所以把获取该对象的方法抽取出来方便复用。
public static PreparedStatement getPStmt(String sql){
try {
pStmt=getConn().prepareStatement(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return pStmt;
}
//将 PreparedStatement参数赋值抽离出来,因为经常用到
public static void setObjParameters(PreparedStatement pStmt,Object[] parameters){
for(int i=0;i<parameters.length;i++){
try {
pStmt.setObject(i+1, parameters[i]);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static int execUpdate(PreparedStatement pStmt){
int rowCount=0;
try {
rowCount=pStmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return rowCount;
}
//封装 DML 操作包括 INSERT,UPDATE 返回影响数据表行数
public static int execDML(String sql,Object[] parameters){
int rowCount=0;
pStmt=getPStmt(sql);
setObjParameters(pStmt,parameters);
rowCount=execUpdate(pStmt);
return rowCount;

//发现将方法封装起来,复用性可以提高。
}

//把获取 ResultSet 方法抽离出来,便于复用
public static ResultSet getResultSet(PreparedStatement pStmt){
try {
rs=pStmt.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}

//获取 查询的 count 数
public static int getRowCount(String sql,Object[] parameters){
int rowCount=0;
setObjParameters(pStmt,parameters);
rs=getResultSet(pStmt);
try {
while(rs.next()){
rowCount=rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
}
return rowCount;
}
public static void main(String[] args){
Connection conn=getConn();
if(conn!=null){
System.out.println("获取数据库连接成功!");
}
}
}

对 JDBC 做一个轻量封装,待完善。。。的更多相关文章

  1. vue-concise-slider 一个轻量的vue幻灯片组件

    vue-concise-slider 一个轻量的vue幻灯片组件 阅读 541 收藏 35 2017-07-03 原文链接:github.com 外卖订单处理有烦恼?试试美团点评餐饮开放平台吧,可实现 ...

  2. Day.js 是一个轻量的处理时间和日期的 JavaScript 库

    Day.js 是一个轻量的处理时间和日期的 JavaScript 库,和 Moment.js 的 API 设计保持完全一样. 如果您曾经用过 Moment.js, 那么您已经知道如何使用 Day.js ...

  3. Nancy总结(一)Nancy一个轻量的MVC框架

    Nancy是一个基于.net 和Mono 构建的HTTP服务框架,是一个非常轻量级的web框架. 设计用于处理 DELETE, GET, HEAD, OPTIONS, POST, PUT 和 PATC ...

  4. 自己写一个轻量的JqueryGrid组件

    接触mvc不久,突然没有了viewstate和服务端控件处处都觉得不顺手,很多在webform时不必要考虑的问题都出现在眼前,这其中分页时查询条件保持的问题又是最让我头疼的事情,权衡再三,决定用aja ...

  5. 在项目管理中如何保持专注,分享一个轻量的时间管理工具【Flow Mac版 - 追踪你在Mac上的时间消耗】

    在项目管理和团队作业中,经常面临的问题就是时间管理和优先级管理发生问题,项目被delay,团队工作延后,无法达到预期目标. 这个仿佛是每个人都会遇到的问题,特别是现在这么多的内容软件来分散我们的注意力 ...

  6. 曹工说Tomcat4:利用 Digester 手撸一个轻量的 Spring IOC容器

    一.前言 一共8个类,撸一个IOC容器.当然,我们是很轻量级的,但能够满足基本需求.想想典型的 Spring 项目,是不是就是各种Service/DAO/Controller,大家互相注入,就组装成了 ...

  7. 使用Hexo建立一个轻量、简易、高逼格的博客

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_93 在之前的一篇文章中,介绍了如何使用Hugo在三分钟之内建立一个简单的个人博客系统,它是基于go lang的,其实,市面上还有一 ...

  8. BlockCanary 一个轻量的,非侵入式的性能监控组件(阿里)

    开发者博客: BlockCanary — 轻松找出Android App界面卡顿元凶 开源代码:moduth/blockcanary BlockCanary对主线程操作进行了完全透明的监控,并能输出有 ...

  9. Cardinal:一个用于移动项目开发的轻量 CSS 框架

    Cardinal 是一个适用于移动项目的 CSS 框架,包含很多有用的默认样式.矢量字体.可重用的模块以及一个简单的响应式模块系统.Cardinal 提供了一种在多种移动设备上实现可伸缩的字体和布局的 ...

随机推荐

  1. 清理ms sql server 大日志文件数据

    1.手动分离数据库: 2.手动删除日志文件: 3.重新生成日志文件: CREATE DATABASE FMIS0 ON (FILENAME = 'E:\FMIS0_DATA\FMIS0-Date') ...

  2. JavaScript几种类工厂实现原理剖析

    PS:本文参考了司徒正美的<JavaScript框架设计>,以及许多其它的书籍和网络文章,感谢作者们分享了这么好的学习资源!关于JS的类和继承的原理,见:JavaScript里的类和继承文 ...

  3. HDU-2711 Lost Cows

    Lost Cows Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  4. Web---创建Servlet的3种方式、简单的用户注册功能

    说明: 创建Servlet的方式,在上篇博客中,已经用了方式1(实现Servlet接口),接下来本节讲的是另外2种方式. 上篇博客地址:http://blog.csdn.net/qq_26525215 ...

  5. hdoj 5443 The Water Problem【线段树求区间最大值】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5443 刷道水题助助兴 #include<stdio.h> #include<stri ...

  6. Linux下多任务间通信和同步-信号

    Linux下多任务间通信和同步-信号 嵌入式开发交流群280352802,欢迎加入! 1.概述 信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式.信号可以直接进行用户空间进程和内核进程之间的 ...

  7. 【LeetCode】Binary Tree Level Order Traversal II

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...

  8. 第一次JAVA基础考试后的反思

    今天进行了第一次JAVA基础考试,考查了课本上前面三章和方法的知识,基本没有涉及到数组.通过这次的考试,暴露了自己在学习中的很多问题. 机试题是编写一个学员状态转换器,主要运用的是选择语句和方法,而没 ...

  9. QinQ封装及终结详解

    以下内容摘自正在当当网.京东网.卓越网.互动出版网预售,即将正式发售的<华为交换机学习指南>一书(全书近千页).本书是由华为官方授权,国内第一本,也是唯一一本华为交换机权威学习指南,是华为 ...

  10. 导出Unity场景为配置文件

    在处理很多人参与的项目时,很多时候在操作场景时,可能会牵扯到场景修改的冲突问题,这种时候,我们可以将场景以配置文件的形式存储下来(cocos的场景.android的view保存思想),可以采用json ...