JDBC建立,讀取properties檔案
阿新 • • 發佈:2018-11-27
在src下建立jdbc.properties檔案
jdbc.properties內容如下:
driverClass=com.mysql.jdbc.Driver
url = jdbc:mysql://localhost/jdbc
name = root
password = root
改動的JDBCUtil:
JDBCTest:
package com.test.example; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import com.mysql.jdbc.Driver; import com.test.util.JDBCUtil; public class JDBCTest { public static void main(String[] args) { // TODO Auto-generated method stub Connection connection = null; Statement statement = null; ResultSet resultSet = null; try { //1. 註冊驅動 connection = JDBCUtil.getConn(); /* //Driver 這個類裡面有靜態程式碼塊,一上來就執行了,所以等同於我們註冊了兩次驅動。 其實沒這個必要的。 //靜態程式碼塊 ---> 類載入了,就執行。 java.sql.DriverManager.registerDriver(new Driver()); //DriverManager.registerDriver(new com.mysql.jdbc.Driver()); Class.forName("com.mysql.jdbc.Driver"); //2. 建立連線 引數一: 協議 + 訪問的資料庫 , 引數二: 使用者名稱 , 引數三: 密碼。 connection = DriverManager.getConnection("jdbc:mysql://localhost/jdbc", "root", "root");*/ //3. 建立statement , 跟資料庫打交道,一定需要這個物件 statement = connection.createStatement(); //4. 執行查詢 , 得到結果集 String sql = "select * from stu"; resultSet = statement.executeQuery(sql); //5. 遍歷查詢每一條記錄 while(resultSet.next()){ int id = resultSet.getInt("id"); String name = resultSet.getString("name"); int age = resultSet.getInt("age"); System.out.println("id="+id+",name="+name+",age="+age); } // resultSet.close(); // Statement.close(); // connection.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ JDBCUtil.close(connection, resultSet, statement); } } }
JDBCUtil[錯誤示例]:
package com.test.util; import java.io.FileInputStream; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; public class JDBCUtil { static String driverClass = null; static String url = null; static String name = null; static String password = null; //讀取jdbc.properties static{ try { //1.建立一個屬性配置物件 Properties properties = new Properties(); //對應檔案位於工程根目錄 InputStream is = new FileInputStream("jdbc.properties"); //2.匯入輸入流,抓取異常 properties.load(is); //3.讀取屬性 driverClass = properties.getProperty("driverClass"); url = properties.getProperty("url"); name = properties.getProperty("name"); password = properties.getProperty("password"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } /** * 註冊驅動 建立引數 * <p>Title: close</p> * <p>Description: </p> * @param connection * @param resultSet * @param statement */ public static Connection getConn(){ Connection connection = null; //2. 建立連線 引數一: 協議 + 訪問的資料庫 , 引數二: 使用者名稱 , 引數三: 密碼。 try { Class.forName(driverClass); connection = DriverManager.getConnection(url, name, password); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return connection; } /** * 釋放資源 * <p>Title: close</p> * <p>Description: </p> * @param connection * @param resultSet * @param statement */ public static void close(Connection connection,ResultSet resultSet,Statement statement){ closeRS(resultSet); closeSt(statement); closeConn(connection); } private static void closeRS(ResultSet resultSet){ try { if(resultSet !=null){ resultSet.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { resultSet = null; } } private static void closeSt(Statement statement){ try { if(statement !=null){ statement.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { statement = null; } } private static void closeConn(Connection connection){ try { if(connection !=null){ connection.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { connection = null; } } }
資料庫:
執行結果:
正確示例1:
jdbc.properties在工程的根目錄下:
JDBCTest:
package com.test.example; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import com.mysql.jdbc.Driver; import com.test.util.JDBCUtil; public class JDBCTest { public static void main(String[] args) { // TODO Auto-generated method stub Connection connection = null; Statement statement = null; ResultSet resultSet = null; try { //1. 註冊驅動 connection = JDBCUtil.getConn(); /* //Driver 這個類裡面有靜態程式碼塊,一上來就執行了,所以等同於我們註冊了兩次驅動。 其實沒這個必要的。 //靜態程式碼塊 ---> 類載入了,就執行。 java.sql.DriverManager.registerDriver(new Driver()); //DriverManager.registerDriver(new com.mysql.jdbc.Driver()); Class.forName("com.mysql.jdbc.Driver"); //2. 建立連線 引數一: 協議 + 訪問的資料庫 , 引數二: 使用者名稱 , 引數三: 密碼。 connection = DriverManager.getConnection("jdbc:mysql://localhost/jdbc", "root", "root");*/ //3. 建立statement , 跟資料庫打交道,一定需要這個物件 statement = connection.createStatement(); //4. 執行查詢 , 得到結果集 String sql = "select * from stu"; resultSet = statement.executeQuery(sql); //5. 遍歷查詢每一條記錄 while(resultSet.next()){ int id = resultSet.getInt("id"); String name = resultSet.getString("name"); int age = resultSet.getInt("age"); System.out.println("id="+id+",name="+name+",age="+age); } // resultSet.close(); // Statement.close(); // connection.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ JDBCUtil.close(connection, resultSet, statement); } } }
jdbc.properties:
driverClass=com.mysql.jdbc.Driver
url = jdbc:mysql://localhost/jdbc
name = root
password = root
JDBCUtil:
package com.test.util;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCUtil {
static String driverClass = null;
static String url = null;
static String name = null;
static String password = null;
//讀取jdbc.properties
static{
try {
//1.建立一個屬性配置物件
Properties properties = new Properties();
//對應檔案位於工程根目錄
InputStream is = new FileInputStream("jdbc.properties");
//2.匯入輸入流,抓取異常
properties.load(is);
//3.讀取屬性
driverClass = properties.getProperty("driverClass");
url = properties.getProperty("url");
name = properties.getProperty("name");
password = properties.getProperty("password");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
/**
* 註冊驅動 建立引數
* <p>Title: close</p>
* <p>Description: </p>
* @param connection
* @param resultSet
* @param statement
*/
public static Connection getConn(){
Connection connection = null;
//2. 建立連線 引數一: 協議 + 訪問的資料庫 , 引數二: 使用者名稱 , 引數三: 密碼。
try {
Class.forName(driverClass);
connection = DriverManager.getConnection(url, name, password);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return connection;
}
/**
* 釋放資源
* <p>Title: close</p>
* <p>Description: </p>
* @param connection
* @param resultSet
* @param statement
*/
public static void close(Connection connection,ResultSet resultSet,Statement statement){
closeRS(resultSet);
closeSt(statement);
closeConn(connection);
}
private static void closeRS(ResultSet resultSet){
try {
if(resultSet !=null){
resultSet.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
resultSet = null;
}
}
private static void closeSt(Statement statement){
try {
if(statement !=null){
statement.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
statement = null;
}
}
private static void closeConn(Connection connection){
try {
if(connection !=null){
connection.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
connection = null;
}
}
}
執行結果:
正確示例2:
jdbc.properties在src下:
JDBCTest:
package com.test.example;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mysql.jdbc.Driver;
import com.test.util.JDBCUtil;
public class JDBCTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
//1. 註冊驅動
connection = JDBCUtil.getConn();
/*
//Driver 這個類裡面有靜態程式碼塊,一上來就執行了,所以等同於我們註冊了兩次驅動。 其實沒這個必要的。
//靜態程式碼塊 ---> 類載入了,就執行。 java.sql.DriverManager.registerDriver(new Driver());
//DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Class.forName("com.mysql.jdbc.Driver");
//2. 建立連線 引數一: 協議 + 訪問的資料庫 , 引數二: 使用者名稱 , 引數三: 密碼。
connection = DriverManager.getConnection("jdbc:mysql://localhost/jdbc", "root", "root");*/
//3. 建立statement , 跟資料庫打交道,一定需要這個物件
statement = connection.createStatement();
//4. 執行查詢 , 得到結果集
String sql = "select * from stu";
resultSet = statement.executeQuery(sql);
//5. 遍歷查詢每一條記錄
while(resultSet.next()){
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
int age = resultSet.getInt("age");
System.out.println("id="+id+",name="+name+",age="+age);
}
// resultSet.close();
// Statement.close();
// connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
JDBCUtil.close(connection, resultSet, statement);
}
}
}
JDBCUtil:
package com.test.util;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCUtil {
static String driverClass = null;
static String url = null;
static String name = null;
static String password = null;
//讀取jdbc.properties
static{
try {
//1.建立一個屬性配置物件
Properties properties = new Properties();
//1.對應檔案位於工程根目錄
//InputStream is = new FileInputStream("jdbc.properties");
//2.使用類載入器,讀取drc下的資原始檔 對應檔案位於src目錄底下 建議使用
InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
//2.匯入輸入流,抓取異常
properties.load(is);
//3.讀取屬性
driverClass = properties.getProperty("driverClass");
url = properties.getProperty("url");
name = properties.getProperty("name");
password = properties.getProperty("password");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
/**
* 註冊驅動 建立引數
* <p>Title: close</p>
* <p>Description: </p>
* @param connection
* @param resultSet
* @param statement
*/
public static Connection getConn(){
Connection connection = null;
//2. 建立連線 引數一: 協議 + 訪問的資料庫 , 引數二: 使用者名稱 , 引數三: 密碼。
try {
Class.forName(driverClass);
connection = DriverManager.getConnection(url, name, password);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return connection;
}
/**
* 釋放資源
* <p>Title: close</p>
* <p>Description: </p>
* @param connection
* @param resultSet
* @param statement
*/
public static void close(Connection connection,ResultSet resultSet,Statement statement){
closeRS(resultSet);
closeSt(statement);
closeConn(connection);
}
private static void closeRS(ResultSet resultSet){
try {
if(resultSet !=null){
resultSet.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
resultSet = null;
}
}
private static void closeSt(Statement statement){
try {
if(statement !=null){
statement.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
statement = null;
}
}
private static void closeConn(Connection connection){
try {
if(connection !=null){
connection.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
connection = null;
}
}
}
jdbc.properties:
driverClass=com.mysql.jdbc.Driver
url = jdbc:mysql://localhost/jdbc
name = root
password = root
資料庫:
資料庫:
執行結果:
總結:
JDBCUtil:
//1.對應檔案位於工程根目錄 //InputStream is = new FileInputStream("jdbc.properties"); //2.使用類載入器,讀取drc下的資原始檔 對應檔案位於src目錄底下 建議使用 InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties"); |
主要是看JDBCUtil下的這兩行程式碼,這兩行程式碼分別對應jdbc.properties配置檔案的路徑.
jdbc.properties的路徑是在src下還是在工程的根目錄下
這兩種方式都可行