Java 数据库简单操作类
数据库操作类,将所有连接数据库的配置信息以及基本的CRUD操作封装在一个类里,方便项目里使用,将连接数据库的基本信息放在配置文件 "dbinfo.properties" 中,通过类加载器调用(也可以通过ServletContext调用配置文件,或者配置在web.xml里通过ServletConfig调用),需要修改数据库连接信息时,只需修改配置文件即可。
package com.latiny.db; import java.io.*;
import java.sql.*;
import java.util.ArrayList;
import java.util.Properties; /*
* 数据库操作类
*/ public class DBUtil { //定义需要的变量
private static String driver =null;
private static String url =null;
private static String user=null;
private static String password=null; private static Connection conn;
//使用PreparedStatment可以防止sql注入
private static PreparedStatement ps;
private static ResultSet rs;
private static CallableStatement cs; //读配置文件
private static Properties pp=null;
private static InputStream fis=null; //加载驱动,只需要执行一次
static
{
try
{
pp = new Properties(); //当我们使用java web的时候,读取文件要使用类加载器
fis = DBUtil.class.getClassLoader().getResourceAsStream("dbinfo.properties"); pp.load(fis);
driver = pp.getProperty("DRIVER");
url = pp.getProperty("URL");
user = pp.getProperty("USER");
password = pp.getProperty("PASSWORD"); // 1 加载驱动
Class.forName(driver); }
catch(Exception e)
{
e.printStackTrace();
}
finally
{
try
{
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
fis = null;
}
} /*
* 获取Connection连接
*/
public static Connection getConn()
{
try
{
// 2 获取数据库连接
conn = DriverManager.getConnection(url, user, password);
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} return conn;
} /*
* 直接返回rs结果,此方法不能关闭rs,因为后面调用它的类还会用到,如果关闭则不能正常使用
*/
public static ResultSet queryResult(String sql, String[] parameters)
{
try
{
conn = getConn();
// 3 创建Statement对象
ps = conn.prepareStatement(sql);
// 4 给问号赋值,即给sql语句的条件参数赋值如果需要的话
if(parameters!=null)
{
for(int i=1; i<=parameters.length; i++)
{
ps.setString(i, parameters[i-1]);
}
} // 5 执行sql获取返回结果
rs = ps.executeQuery();
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} return rs;
} /*
* 将rs结果封装成ArrayList,然后可以关闭rs,节省数据库访问资源
*/
public static ArrayList queryResult2(String sql, String[] parameters)
{
ArrayList al = new ArrayList(); try
{
//2 获取数据库连接
conn = getConn();
//3 创建Statement对象
ps = conn.prepareStatement(sql);
//4 给问号赋值,即给sql语句的条件参数赋值如果需要的话
if(parameters!=null)
{
for(int i=1; i<=parameters.length; i++)
{
ps.setString(i, parameters[i-1]);
}
} //5 执行sql语句获取返回结果
rs = ps.executeQuery(); //获取rs的结构
ResultSetMetaData rsmd = rs.getMetaData();
//获取查询语句的列数
int column = rsmd.getColumnCount(); while(rs.next())
{
//对象数组,存储一行数据
Object[] objs = new Object[column];
for(int i=0; i<objs.length; i++)
{
objs[i] = rs.getObject(i+1);
}
al.add(objs);
} }
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
//关闭资源
close(rs, ps, conn);
} return al;
} //调用存储过程,带输入输出参数的
public static CallableStatement callProcedure(String sql, String[] inputPara, Integer[] outputPara)
{ try
{
conn = getConn();
cs = conn.prepareCall(sql);
for(int i=0; inputPara!=null && i<inputPara.length; i++)
{
cs.setObject(i+1, inputPara[i]);
} //给output参数赋值
for(int j=0; outputPara!=null && j<outputPara.length; j++)
{
cs.registerOutParameter(inputPara.length+1+j, outputPara[j]);
} cs.execute(); } catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
close(rs, ps, conn);
} return cs; } //update, insert, delete
public static Integer updateData(String sql, String[] parameters)
{
int result = 0;
try
{
conn = getConn();
ps = conn.prepareStatement(sql);
if(parameters!=null)
{
for(int i=0; i<parameters.length; i++)
{
ps.setObject(i+1, parameters[i]);
}
} //执行executeUpdate并且返回受影响的行数
result = ps.executeUpdate(); }
catch(Exception e)
{
e.printStackTrace();
}
finally
{
close(rs, ps, conn);
} return result;
} //关闭对应的数据库连接资源
public static void close(ResultSet rs1, PreparedStatement ps1, Connection conn1)
{ try
{
if(rs1!=null)
{
rs1.close();
}
if(ps1!=null)
{
ps1.close();
}
if(conn1!=null)
{
conn1.close();
} } catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}
dbinfo.properties文件配置信息
DRIVER=com.mysql.jdbc.Driver
URL=jdbc:mysql://localhost:3306/servlet
USER=latiny
PASSWORD=123456
Java 数据库简单操作类的更多相关文章
- Intellij IDEA集成mybatis-generator插件自动生成数据库实体操作类
Intellij IDEA集成mybatis-generator插件自动生成数据库实体操作类 转载至:https://blog.csdn.net/fishinhouse/article/details ...
- github上创建java项目简单操作
github上创建java项目简单操作 参考L: github上创建java项目简单操作 - CSDN博客http://blog.csdn.net/qq_29392425/article/detail ...
- SQL数据库简单操作
sql语言简介 (1)数据库是文件系统,使用标准sql对数据库进行操作 * 标准sql,在mysql里面使用语句,在oracle.db2都可以使用这个语句 (2)什么是sql * Structured ...
- [转]html5 js 访问 sqlite 数据库的操作类
本文转自:http://blog.csdn.net/tsxw24/article/details/7613815 webkit 核心的浏览器提供了 3个 api接口,用于访问本地sqlite数据,但使 ...
- java csv 文件 操作类
一个CSV文件操作类,功能比较齐全: package tool; import java.io.BufferedReader; import java.io.BufferedWriter; impor ...
- MongoDB数据库简单操作
之前学过的有mysql数据库,现在我们学习一种非关系型数据库 一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数 ...
- fastCMS数据库相关操作类
fastCMS针对数据库的操作有以下几个类: 1.[paging_Class]分页类 此类用于分页检索数据库内符合条件的记录 1) 支持百万级数据分页 2) 支持多种类型的SQL语法,比如 Left ...
- sqlhelper 数据库帮助操作类
数据库帮助类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...
- MySQL数据库简单操作
title date tags layout MySQL简单操作 2018-07-16 Linux post 登录mysql mysql -h 主机名 -u 用户名 -p 查看所有数据库 show d ...
随机推荐
- 如何使用微信web开发者工具调试企业微信
最近因工作需要围绕着企业微信来进行调试,从而掏出了我的微信web开发者工具,在进行授权的时候微信web开发者工具成功的提示了我:“您未绑定企业微信开发者权限”.那么关键来了,因为我也百度过,发现也有很 ...
- Linux 简介(day1)
一.Linux 诞生于1991年 二.创始人:林纳斯.托瓦茨(Linus Torvalds) 三.logo:企鹅 四.Linux完整系统包括 1.Linux kernel (Linux 内核) 2.f ...
- wangedit
<template> <el-row id="AddRoom"> <el-col :span="5">.</el-co ...
- input reset 重置时间
经验规律,301毫秒. function autoFormatMoney() { if (!this.value.length) {return} var num = parseFloat(this. ...
- ES5-ES6-ES7_iterator和for of
iterator(遍历器)的概念 JavaScript原有的表示“集合”的数据结构,主要是数组(Array)和对象(Object),ES6又添加了Map和Set.这样就有了四种数据集合,用户还可以组合 ...
- WPF自定义控件(四)の自定义控件
在实际工作中,WPF提供的控件并不能完全满足不同的设计需求.这时,需要我们设计自定义控件. 这里LZ总结一些自己的思路,特性如下: Coupling UITemplate Behaviour Func ...
- JWT(JSON Web Token)
摘要: 在Web应用中,使用JWT替代session并不是个好主意 适合JWT的使用场景 抱歉,当了回标题党.我并不否认JWT的价值,只是它经常被误用. 什么是JWT 根据维基百科的定义,JSON W ...
- UVA1627-Team them up!(二分图判断+动态规划)
Problem UVA1627-Team them up! Total Submissions:1228 Solved:139 Time Limit: 3000 mSec Problem Descr ...
- Python 属性与方法 概念理解
属性与方法 attribute(属性)是class(类)中的成员变量,而method(方法)则是class(类)中的function(函数). 也可以理解,属性就类变量,方法就是类函数. 类中的变量就 ...
- 通俗易懂的php多线程解决方案
我们在做项目的时候,有些需求,特别是数据的响应处理需要花费大量的时间,由于php是一个短生命周期的脚本语言,到了默认的30秒,php的数据处理还没完成,php的生命周期就结束了.这时需要使用异步并发处 ...