对 JDBC 做一个轻量封装,待完善。。。
对 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 做一个轻量封装,待完善。。。的更多相关文章
- vue-concise-slider 一个轻量的vue幻灯片组件
vue-concise-slider 一个轻量的vue幻灯片组件 阅读 541 收藏 35 2017-07-03 原文链接:github.com 外卖订单处理有烦恼?试试美团点评餐饮开放平台吧,可实现 ...
- Day.js 是一个轻量的处理时间和日期的 JavaScript 库
Day.js 是一个轻量的处理时间和日期的 JavaScript 库,和 Moment.js 的 API 设计保持完全一样. 如果您曾经用过 Moment.js, 那么您已经知道如何使用 Day.js ...
- Nancy总结(一)Nancy一个轻量的MVC框架
Nancy是一个基于.net 和Mono 构建的HTTP服务框架,是一个非常轻量级的web框架. 设计用于处理 DELETE, GET, HEAD, OPTIONS, POST, PUT 和 PATC ...
- 自己写一个轻量的JqueryGrid组件
接触mvc不久,突然没有了viewstate和服务端控件处处都觉得不顺手,很多在webform时不必要考虑的问题都出现在眼前,这其中分页时查询条件保持的问题又是最让我头疼的事情,权衡再三,决定用aja ...
- 在项目管理中如何保持专注,分享一个轻量的时间管理工具【Flow Mac版 - 追踪你在Mac上的时间消耗】
在项目管理和团队作业中,经常面临的问题就是时间管理和优先级管理发生问题,项目被delay,团队工作延后,无法达到预期目标. 这个仿佛是每个人都会遇到的问题,特别是现在这么多的内容软件来分散我们的注意力 ...
- 曹工说Tomcat4:利用 Digester 手撸一个轻量的 Spring IOC容器
一.前言 一共8个类,撸一个IOC容器.当然,我们是很轻量级的,但能够满足基本需求.想想典型的 Spring 项目,是不是就是各种Service/DAO/Controller,大家互相注入,就组装成了 ...
- 使用Hexo建立一个轻量、简易、高逼格的博客
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_93 在之前的一篇文章中,介绍了如何使用Hugo在三分钟之内建立一个简单的个人博客系统,它是基于go lang的,其实,市面上还有一 ...
- BlockCanary 一个轻量的,非侵入式的性能监控组件(阿里)
开发者博客: BlockCanary — 轻松找出Android App界面卡顿元凶 开源代码:moduth/blockcanary BlockCanary对主线程操作进行了完全透明的监控,并能输出有 ...
- Cardinal:一个用于移动项目开发的轻量 CSS 框架
Cardinal 是一个适用于移动项目的 CSS 框架,包含很多有用的默认样式.矢量字体.可重用的模块以及一个简单的响应式模块系统.Cardinal 提供了一种在多种移动设备上实现可伸缩的字体和布局的 ...
随机推荐
- 数据库设主键以及where的应用
二.第二课 create table teacher ( tno int primary key identity(1,1), --将tno设为主键(primary key identity(1,1 ...
- Spark SQL JSON数据处理
背景 这一篇可以说是“Hive JSON数据处理的一点探索”的兄弟篇. 平台为了加速即席查询的分析效率,在我们的Hadoop集群上安装部署了Spark Server,并且与我们的Hive数据仓 ...
- Android学习笔记(十)BroadcastReceiver初体验
BroadcastReceiver是Android系统的四大组件之一,本质是一种全局的监听器,用于接收系统全局的广播消息.真因为如此,BroadcastReceiver可以很方便的是实现系统中不同组件 ...
- JavaScript高级程序设计61.pdf
JSON对象 早期的JSON解析器就是使用JavaScript的eval()函数,ECMAScript5对解析JSON的行为做出了规定,定义了全局对象JSON. JSON对象有2个方法:stringi ...
- Ubuntu 如何使用apt命令安装、升级、卸载软件
apt-get是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索.安装.升级.卸载软件或操作系统. apt-get命令一般需要root权限执行,所以一般跟着su ...
- Java 并发包中的读写锁及其实现分析
1. 前言 在Java并发包中常用的锁(如:ReentrantLock),基本上都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时 刻可以允许多个读线程访问,但是在写线程访问时,所有 ...
- js select级联,上面分类,下面是内容
js select级联,上面分类,下面是内容. js级联效果如下: 分类: 请选择 水果 蔬菜 其他 内容: // html和js代码如下: <html> <hea ...
- UIAlertController:弹框4步走
对于大多数的App来说,弹框这种交互方式基本上是必不可少的.在新的iOS系统中(具体版本我忘了),以前的UIAlertView被弃用,而换成了现在的UIAlertController. UIAlite ...
- 【转】java.lang.StackOverflowError
http://blog.csdn.net/g19920917/article/details/8765638 出现一个java.lang.StackOverflowError异常.弄了半天,又是问高手 ...
- Android Socket编程基础
前些天写了一个Android手机在局域网内利用Wifi进行文件传输的Demo,其中用到了Socket编程,故此总结(盗了网友的一些图和文字).好久好久没来博客园了~~ 1.什么是Socket? soc ...