序文
ここでは、接続を直接書き込み、jdbcのリソースをutilパッケージに解放して、その後の使用を容易にします。
コードの表示と説明
ツールJDBCUtilsの全体的な表示
public class JDBCUtils {
private static String url;
private static String user;
private static String password;
private static String driver;
/**
*
* @Description: 使用静态代码块读取 配置文件中的内容
* 这样只要读取一次就可以了
*
* @auther: FARO_Z
* @date: 2:16 上午 2020/7/19
* @param:
* @return:
*
*/
static {
//1.创建Properties集合类
Properties pro=new Properties();
//2.加载文件
try {
/*
pro.load(new FileReader(path));中的path换成直接写src/jdbc.properties 可能会出现读不出来的情况
所以要通过下面的方式动态获取配置文件的路径
注意:使用下面这种方式,路径中一定不能有中文出现
路径必须全部都是英文
*/
// ClassLoader classloader=JDBCUtils.class.getClassLoader();
// URL resource =classloader.getResource("jdbc.properties");
// String path=resource.getPath();
// System.out.println(path);
// pro.load(new FileReader(path));
pro.load(new FileReader("src/jdbc.properties"));
//3.获取数据
url=pro.getProperty("url");
user=pro.getProperty("user");
password=pro.getProperty("password");
driver=pro.getProperty("driver");
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
*
* @Description: 获取链接
*
* @auther: FARO_Z
* @date: 2:04 上午 2020/7/19
* @param: []
* @return: java.sql.Connection
*
*/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url,user,password);
}
/**
*
* @Description: 释放资源,这是第一个重载
*
* @auther: FARO_Z
* @date: 2:06 上午 2020/7/19
* @param: [stmt, conn]
* @return: void
*
*/
public static void close(Statement stmt,Connection conn) {
if (stmt!=null) {
try {
stmt.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (conn!=null) {
try {
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
/**
*
* @Description: 释放资源,第二个重载
*
* @auther: FARO_Z
* @date: 2:07 上午 2020/7/19
* @param: [rs, stmt, conn]
* @return: void
*
*/
public static void close(ResultSet rs,Statement stmt, Connection conn) {
if (stmt!=null) {
try {
stmt.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (conn!=null) {
try {
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (rs!=null) {
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
詳細な方法
静的コードブロック
ここで、url、uesr、およびpassword
構成ファイルは
、構成ファイルを介してsrcディレクトリーに保管され、構成ファイル内の対応するキー値は、Propertiesコレクションを介して取得されます。
static {
//1.创建Properties集合类
Properties pro=new Properties();
//2.加载文件
try {
/*
pro.load(new FileReader(path));中的path换成直接写src/jdbc.properties 可能会出现读不出来的情况
所以要通过下面的方式动态获取配置文件的路径
注意:使用下面这种方式,路径中一定不能有中文出现
路径必须全部都是英文
*/
// ClassLoader classloader=JDBCUtils.class.getClassLoader();
// URL resource =classloader.getResource("jdbc.properties");
// String path=resource.getPath();
// System.out.println(path);
// pro.load(new FileReader(path));
//获取配置文件中的值
pro.load(new FileReader("src/jdbc.properties"));
//3.获取数据
url=pro.getProperty("url");
user=pro.getProperty("user");
password=pro.getProperty("password");
driver=pro.getProperty("driver");
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
getConnection
ここでは、構成ファイルでURL、ユーザー、およびパスワードを取得した後、JDBCでDriverManagerを直接呼び出して接続を取得し、戻ります。
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url,user,password);
}
閉じる()
2つのclose()メソッドがあります。1つはResultSetパラメーターなし、もう1つはパラメーターありです。
これは、クエリ操作が実行されると
、結果がクエリされるか
、ResultSetに格納されるためです。ResultSetを使用した後、そのリソースを解放する必要があります。
public static void close(ResultSet rs,Statement stmt, Connection conn) {
if (stmt!=null) {
try {
stmt.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (conn!=null) {
try {
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (rs!=null) {
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
テストを使用する
ここでは、次の表のデータをArrayListに格納して出力します
public class JDBCDemo8 {
public static void main(String[] args) {
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
String sql="select * from account";
ArrayList<Account> list=new ArrayList<Account>();
try {
conn=JDBCUtils.getConnection();//获取数据库连接
stmt=conn.createStatement();//获取执行对象
rs=stmt.executeQuery(sql);//执行查找
while (rs.next()) {
//三个参数分别是: id name balance
list.add(new Account(rs.getInt(1),rs.getString(2),rs.getInt(3)));
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
JDBCUtils.close(rs,stmt,conn);//释放资源
}
ArrayListUtil.outputArrayList(list);//打印结果
}
}
最終結果は以下のとおりです。