由于建立连接和释放资源需要重复使用,对于这种需要多次使用的代码可以将其抽取出来,编写工具类
一、工具类JDBCUtils.java
package my.test.jdbc;
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;
/*
* 建立工具类,将创建连接和释放资源的方法抽取出来
* */
public class JDBCUtils {
/*
* 使用properties加载配置文件中的资源
* 也可以不适用配置文件的方法,直接将driver,url的定义放到这个工具类里面
* 使用配置文件的好处:便于维护
* */
private static String driver;
private static String url;
private static String username;
private static String password;
/*
* 使用静态代码块加载配置文件的内容
* */
static {
try {
//1.使用类加载器获得输入流
ClassLoader classLoader = JDBCUtils.class.getClassLoader();
InputStream is = classLoader.getResourceAsStream("db.properties");
//2.使用Properties类提取配置文件中的内容
Properties prop = new Properties();
//2.1将db.properties的输入流加载到Properties类型的prop中
prop.load(is);
//2.2从prop中取得各个参数
driver=prop.getProperty("driver");
url=prop.getProperty("url");
username=prop.getProperty("username");
password=prop.getProperty("password");
} catch (IOException e) {
e.printStackTrace();
}
}
public static Connection getConnection(){
Connection conn = null;
try {
//1.注册驱动
Class.forName(driver);
//2.建立连接
conn = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
public static void release(ResultSet rs,PreparedStatement pstmt, Connection conn){
//判断是否为空
if (rs!=null){
try {
二、db.properties配置文件的内容
在src文件下->右键new->file->输入文件名db.properties,注意配置文件中不要有空格
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/myproj
username=root
password=root123
三、使用工具类的数据库访问
package my.test.jdbc;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import my.test.jdbc.JDBCUtils;
public class TestLogin3 {
public static void main (String[] args){
String sql = "select * from user where user_name=?;";
PreparedStatement pstmt;
ResultSet rs;
Connection conn;
try {
//1. 2.注册驱动与获得连接
conn = JDBCUtils.getConnection();
//3.1获得语句执行者
pstmt = conn.prepareStatement(sql);
//3.2注入参数
pstmt.setString(1, "xiaoming");
//4.执行sql
rs = pstmt.executeQuery();
while (rs.next()){
System.out.println("登录成功!");
}
JDBCUtils.release(rs, pstmt, conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}