由于每次写程序都要更换数据库,而且每次的连接语句还有关闭资源操作都一样。所以一方面可以单独把连接和关闭资源写成两个方法,然后调用。另一方面,可以把连接用的参数放在一个配置文件里,每次使用数据库更改配置文件就可以了。
配置文件后缀名.properties
若是非web应用程序,建议放在src目录下。
文件内容如下:
driverclass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/库名
username=root
password=****
使用JDK提供的工具类ResourseBundle加载properties文件
ResourceBundle rb=ResourceBundle.getBundle("properties文件名");
做了一个JDBC的例子
项目的目录结构如下:
数据库如下:
dbinfo.properties文件内容如下(JDBCUtils_V2和JDBCUtils_V3都有调用):
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/day01?useUnicode=true&characterEncoding=utf-8
username=root
password=051122
JDBCUtils_V1
package cn.itheima.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/*
* 提供获取连接和释放资源的方法
* @version V1.0
* */
public class JDBCUtils_V1 {
/*
* 获得连接方法*/
public static Connection getConnection(){
Connection conn=null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/day01","root","051122");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public static void release(Connection conn,PreparedStatement pstmt,ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(pstmt!=null){
try {
pstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
JDBCUtils_V2
package cn.itheima.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ResourceBundle; /* * 提供获取连接和释放资源的方法 * @version V1.0 * */ public class JDBCUtils_V2 { private static String driver; private static String url; private static String username; private static String password; /* * 静态代码块加载配置文件信息 * */ static{ ResourceBundle rb=ResourceBundle.getBundle("dbinfo"); //对四个变量赋值 driver=rb.getString("driver"); url=rb.getString("url"); username=rb.getString("username"); password=rb.getString("password"); } /* * 获得连接方法*/ public static Connection getConnection(){ Connection conn=null; try { Class.forName(driver); conn=DriverManager.getConnection(url,username,password); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return conn; } public static void release(Connection conn,PreparedStatement pstmt,ResultSet rs){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(pstmt!=null){ try { pstmt.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(conn!=null){ try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
JDBCUtils_V3
package cn.itheima.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; import java.util.ResourceBundle; /* * 提供获取连接和释放资源的方法 * @version V1.0 * */ public class JDBCUtils_V3 { private static String driver; private static String url; private static String username; private static String password; /* * 静态代码块加载配置文件信息 * */ static{ try { //1.通过当前类获取类加载器 ClassLoader classLoader=JDBCUtils_V3.class.getClassLoader(); //2.通过类加载器的方法获得一个输入流 InputStream is=classLoader.getResourceAsStream("dbinfo.properties"); //3.创建一个properties对象 Properties props=new Properties(); //4.加载输入流 props.load(is); //5.获取相关参数的值 driver=props.getProperty("driver"); url=props.getProperty("url"); username=props.getProperty("username"); password=props.getProperty("password"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /* * 获得连接方法*/ public static Connection getConnection(){ Connection conn=null; try { Class.forName(driver); conn=DriverManager.getConnection(url,username,password); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return conn; } public static void release(Connection conn,PreparedStatement pstmt,ResultSet rs){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(pstmt!=null){ try { pstmt.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(conn!=null){ try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
测试类TestUtils
package cn.itheima.jdbc.test; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.junit.Test; import cn.itheima.jdbc.JDBCUtils_V1; import cn.itheima.jdbc.JDBCUtils_V2; import cn.itheima.jdbc.JDBCUtils_V3; /* * 测试工具类 * */ public class TestUtils { /* * 更新操作,使用JDBCUtils_V3 * */ @Test public void testUpdateById(){ Connection conn=null; PreparedStatement pstmt=null; try { //1.获取连接 conn = JDBCUtils_V3.getConnection(); //2.填写sql语句 String sql="update users set password=? where id=?"; //3.获取执行sql语句对象 pstmt=conn.prepareStatement(sql); //4.设置参数 pstmt.setString(1,"1234"); pstmt.setInt(2,6); //5.执行查询操作 int row=pstmt.executeUpdate(); if(row>0){ System.out.println("更新成功!"); }else{ System.out.println("更新失败!"); } } catch (Exception e) { // TODO: handle exception throw new RuntimeException(e); }finally{ //6.释放资源 JDBCUtils_V3.release(conn, pstmt, null); } } /* * 删除用户信息,使用JDBCUtils_V3 **/ @Test public void testDeleteById(){ Connection conn=null; PreparedStatement pstmt=null; try { //1.获取连接 conn = JDBCUtils_V3.getConnection(); //2.填写sql语句 String sql="delete from users where id=?"; //3.获取执行sql语句对象 pstmt=conn.prepareStatement(sql); //4.设置参数 pstmt.setInt(1, 5); //5.执行查询操作 int row=pstmt.executeUpdate(); if(row>0){ System.out.println("删除成功!"); }else{ System.out.println("删除失败!"); } } catch (Exception e) { // TODO: handle exception throw new RuntimeException(e); }finally{ //6.释放资源 JDBCUtils_V3.release(conn, pstmt, null); } } /* *添加用户信息 JDBCUtils_V2 * */ @Test public void testInsert(){ Connection conn=null; PreparedStatement pstmt=null; try { //1.获取连接 conn = JDBCUtils_V2.getConnection(); //2.填写sql语句 String sql="insert into users values(null,?,?)"; //3.获取执行sql语句对象 pstmt=conn.prepareStatement(sql); //4.设置参数 pstmt.setString(1, "lisi"); pstmt.setString(2, "1122"); //5.执行查询操作 int row=pstmt.executeUpdate(); if(row>0){ System.out.println("添加成功!"); }else{ System.out.println("添加失败!"); } } catch (Exception e) { // TODO: handle exception throw new RuntimeException(e); }finally{ //6.释放资源 JDBCUtils_V2.release(conn, pstmt, null); } } /* *根据id查询(JDBCUtils_V1) * */ @Test public void testFindUserById(){ Connection conn=null; PreparedStatement pstmt=null; ResultSet rs=null; try { //1.获取连接 conn=JDBCUtils_V1.getConnection(); //2.填写sql语句 String sql="select * from users where id=?"; //3.获取执行sql语句对象 pstmt=conn.prepareStatement(sql); //4.设置参数 pstmt.setInt(1, 1); //5.执行查询操作 rs=pstmt.executeQuery(); //6.处理结果集 while(rs.next()){ System.out.println("用户名"+rs.getString(2)+"密码"+rs.getString("password")); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ //7.释放资源 JDBCUtils_V1.release(conn, pstmt, rs); } } }