在之前的博客中写过类似的文章,如:
JavaWeb中的数据库连接文件写法(db.properties)
介绍
但是今天博主想继续分享一下这种写法,在原基础上做了很大的改进。仍然需要db.properties
这个文件,当然文件的名字你可以随意更改,但是后缀名不能改变哦~。
那么这个类来获取数据库的驱动连接,怎么写呢?在学习JavaWeb
课上,教的方法是通过 一个Servlet的监听器
和web.xml
来配置数据库的连接。在经过几天的摸索之后,开始尝试一种更好用、更简便的方式来实现。
下面开始上硬货。
实现类
通过下面的类来实现数据库的驱动加载,你只需要在数据访问对象(Data Access Object DAO)设计模式的类中,调用此类中的方法即可!
package dao;
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.SQLException;
import java.util.Properties;
/**
* 关于获取数据库连接配置的类
* @author OriginalCoder
*/
public class DataBaseDAO {
private Connection cn=null;
private PreparedStatement ps=null;
private ResultSet rs=null;
private static String driver;
private static String url;
private static String username;
private static String password;
/**
* 静态加载资源内存
*/
static{
try {
initial();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 连接初始化
* @throws ClassNotFoundException
*/
public static void initial() throws ClassNotFoundException{
//读取资源文件,获取连接对象
//1.properties集合类
Properties properties=new Properties();
//方法一
//2.获取src路径下的文件访问-------》ClassLoader 类加载器
// ClassLoader classloader = DataBaseDAO.class.getClassLoader();
// URL res = classloader.getResource("db.properties");
// String path = res.getPath();
3.加载文件
// properties.load(new FileReader(path));
//方法二
InputStream is=DataBaseDAO.class.getClassLoader().getResourceAsStream("db.properties");
try {
//加载文件
properties.load(is);
} catch (IOException e) {
e.printStackTrace();
}
//获取属性并赋值
driver=properties.getProperty("driver");
url=properties.getProperty("url");
username=properties.getProperty("username");
password=properties.getProperty("password");
}
/**
* 获取驱动连接
* @return
*/
public static Connection getConnection() {
Connection cn = null; //声明数据库连接对象
try {
Class.forName(driver);
cn = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
}
if (cn == null) {
System.err.println("警告: DbConnectionManager.getConnection() 获得数据库链接失败.\r\n\r\n链接类型:" + driver
+ "\r\n链接位置:" + url + "\r\n用户/密码" + username + "/" + password);
}
return cn;
}
/**
* 更新执行结果
* @param sql
* @return
*/
public int executeUpdate(String sql) {
int result = 0; // 更新数据的记录条数
try {
cn = getConnection(); // 调用getConnection()方法构造Connection对象的一个实例conn
ps = cn.prepareStatement(sql);
result = ps.executeUpdate(sql); // 执行更新操作
} catch (SQLException e) {
result = 0; // 将保存返回值的变量赋值为0
e.printStackTrace();
}
return result; // 返回保存返回值的变量
}
/**
* 处理结果集
* @param sql
* @return
*/
public ResultSet executeQuery(String sql) {
try {
cn = getConnection();
ps = cn.prepareStatement(sql);
rs = ps.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
/**
* 释放资源
* @param connection
* @param ps
* @param rs
*/
public static void closeAll(Connection cn,PreparedStatement ps,ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(cn!=null){
try {
cn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void closeBoth(Connection cn,PreparedStatement ps){
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(cn!=null){
try {
cn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//测试代码
// public static void main(String[] args) {
// String sql = "Select * from tbUser";
// DataBaseDAO u=new DataBaseDAO();
// ResultSet rs=u.executeQuery(sql);
// try {
// if(rs.next()) {
// System.out.println(rs.getInt(1));
// }
// } catch (SQLException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
}
测试类
使用案例
新建一个类
在类中定义一个登录的验证方法,代码如下:
/**
* 密码登陆验证
* @param uid 用户id
* @param pwd 密码
* @return false
*/
public boolean loginVerify(String uid,String pwd) {
Connection conn = null;
PreparedStatement psmt = null;
ResultSet rs = null;
conn = DataBaseDAO.getConnection();
String sql = "select * from tbUser where uid='"+uid+"' and pwd='"+pwd+"'";
try {
psmt = conn.prepareStatement(sql);
rs = psmt.executeQuery();
if(rs.next()) {
return true;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DataBaseDAO.closeAll(conn, psmt, rs);
}
return false;
}