數據持久化:把數據保存到可掉電式存儲設備中以供之後使用。
主要應用:將內存中的數據存儲在關係型數據庫、磁盤文件、XML中。
在Java中,數據庫存取技術:
1)JDBC直接訪問數據庫(基石)
2)JDO技術
3)第三方O/R工具,如Hibernate,ibatis等。
JDBC是一個獨立於特定數據庫管理系統、通用的SQL數據庫存取和操作的公告接口(一組API),定義了用來訪問數據庫的標準Java類庫。
JDBC爲訪問不同的數據庫提供了一種統一的途徑。
JDBC的目標是使Java程序員使用JDBC可以連接任何提供了JDBC驅動程序的數據庫系統。
JDBC接口(API)包括兩個層次:
面向應用的API:Java API,抽象接口,供應用程序開發人員使用(連接數據庫、執行SQL語句、獲得結果)。
面向數據庫的API:Java Driver API,供開發商開發數據庫驅動程序用。
JDBC驅動程序:各個數據庫廠商根據JDBC的規範製作的JDBC實現類的類庫。
本地協議的純Java驅動程序:完全使用Java編寫,通過與數據庫建立的Socket連接,採用具體與廠商的網絡協議把JDBC調用轉換爲直接連接的網絡調用。
JDBC API是一系列的接口, 它使得應用程序能夠進行數據庫聯接,執行SQL語句,並且得到返回結果。
Java.sql.Driver接口是數據庫廠商必須提供實現的接口,能從中獲取數據庫連接。
在程序中不需要直接去訪問實現了Driver接口的類,而是由驅動程序管理器類(java.sql.DriverManager)去調用這些Driver實現。
加入mysql驅動程序
1)在當前項目下新建lib目錄
2)把mysql-connector-java-5.1.7-bin.jar複製到lib目錄下
3)右鍵build-path,add to duildpath加到類路徑下。
調用Driver類的connect()方法建立到數據庫的連接:
JDBC URL用於標識一個被註冊的驅動程序,驅動程序管理器通過這個URL選擇正確的驅動程序,從而建立到數據庫的連接。
JDBC URL的標準由三部分組成,各部分間用冒號分隔。
-jdbc:<子協議>:<子名稱>
-協議:JDBC URL中的協議總是jdbc
-子協議:子協議用於標識一個數據庫驅動程序
-子名稱:一種標識數據庫的方法,子名稱可以依不同的子協議而變化,用子名稱的目的是爲了定位數據庫提供足夠的信息。
例:"jdbc:mysql://localhost/users"
public static void testDriver() throws SQLException {
//1.創建一個Driver實現類的對象
Driver driver=new com.mysql.jdbc.Driver();
//2.準備連接數據庫的基本信息:url,user,password
String url="jdbc:mysql://localhost:3306/users";
Properties info=new Properties();
info.put("user", "root");
info.put("password","12345678");
//3.調用Driver接口的connect(url,info)獲取數據庫連接
Connection connection=driver.connect(url, info);
System.out.println(connection);
}
編寫一個通用方法發,在不修改源程序的情況下,可以獲取任何數據庫的連接。
解決方案:把數據庫驅動Driver實現類的全類名、url、user、password放入一個配置文件中,通過修改配置文件的方式實現和具體的數據庫解耦。
public static Connection getConnection() throws Exception{
//1.準備連接數據庫的4個字符串
//驅動的全類名
String driverClass=null;
String jdbcUrl=null;
String user=null;
String password=null;
//加載配置文件
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Properties properties=new Properties();
properties.load(loader.getResourceAsStream("jdbc.properties"));
//讀取類路徑下的jdbc.properties文件中連接數據庫的4個字符串
driverClass=properties.getProperty("driver");//讀取接口類型
jdbcUrl=properties.getProperty("jdbcUrl");
user=properties.getProperty("user");
password=properties.getProperty("password");
//2.創建一個Driver實現類的對象
Driver driver=(Driver)Class.forName(driverClass).newInstance();//反射
properties.put("user", user);
properties.put("password",password);
//3.調用Driver接口的connect(url,info)獲取數據庫連接
Connection connection=driver.connect(jdbcUrl, properties);
return connection;
}