數據庫
學習數據庫要明白兩個概念:數據庫和數據庫管理系統。
什麼是數據庫:
數據庫就是存儲數據的倉庫,數據按照特定的格式將數據存儲起來,用戶可以對數據庫中的數據進行增加、修改、刪除及查詢操作。
什麼是數據庫管理系統:
數據庫管理系統DBMS:是一種操作和管理數據庫的大型軟件,用於建立和維護使用數據庫,對數據庫進行統一的管理和控制,以保證數據庫的安全性和完整性。用戶通過數據
庫管理系統訪問數據庫中表內的數據。
常見的數據庫管理系統
MYSQL :開源免費的數據庫,小型的數據庫.已經被Oracle收購了.MySQL6.x版本也開始收費。
Oracle :收費的大型數據庫,Oracle公司的產品。Oracle收購SUN公司,收購MYSQL。
DB2 :IBM公司的數據庫產品,收費的。常應用在銀行系統中.
SQLServer:MicroSoft 公司收費的中型的數據庫。C#、.net等語言常使用。
SyBase :已經淡出歷史舞臺。提供了一個非常專業數據建模的工具PowerDesigner。
SQLite : 嵌入式的小型數據庫,應用在手機端。
Java相關的數據庫:MYSQL,Oracle.SQL語句:
數據庫不識別java語言,但可以識別SQL語言,是數據庫的代碼,結構化查詢語言SQL是一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關係數據庫系
統。
創建數據庫、創建數據表、向數據表中添加一條條數據信息均需要使用SQL語句。
JDBC數據庫連接:
Java程序需要連接到數據庫該怎麼辦呢?Sun公司寫了一種用於執行SQL語句的Java API,可以爲多種關係數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成,是
Java訪問數據庫的標準規範。JDBC提供了一種基準,據此可以構建更高級的工具和接口,使數據庫開發人員能夠編寫數據庫應用程序。
JDBC需要連接驅動,驅動是兩個設備要進行通信,滿足一定通信數據格式,數據格式由設備提供商規定,設備提供商爲設備提供驅動軟件,通過軟件可以與該設備進行通信。
使用的是mysql的驅動mysql-connector-java-5.1.39-bin.jarJDBC原理:
數據庫管理系統有很多,需要制定統一的規範來管理訪問數據庫的一套標準,因此Java提供了一個規範稱爲JDBC,也就是一個接口,生產廠商要想訪問數據庫,必須提供規範
的實現類,則稱爲驅動,此驅動由生產廠商提供,驅動是接口的實現,沒有驅動將無法完成數據庫的連接,從而不能操作數據庫。
JDBC開發步驟:
1. 註冊驅動.
2. 獲得連接.
3. 獲得語句執行平臺
4. 執行sql語句
5. 處理結果
6. 釋放資源.
步驟詳解:
1.註冊驅動時需要導入使用哪個數據庫管理系統的驅動jar包,該jar包中存放的是驅動接口的實現類。首先創建lib目錄,用於存放當前項目需要的所有jar包。
JDBC規範定義了驅動接口爲:java.sql.Driver,接口類Driver,即每個驅動程序類必須實現的接口,MySql驅動包提供了實現類:com.mysql.jdbc.Driver。
使用反射技術將驅動接口的實現類加載到內存中,該接口實現類即:com.mysql.jdbc.Driver中的靜態代碼將自動執行。
代碼:
Class.forName("com.mysql.jdbc.Driver");
static Connection getConnection(String url, String user, String password) //試圖建立到給定數據庫 URL 的連接。
三個參數分別表示,url 需要連接數據庫的位置(網址) user用戶名 password 密碼,該方法返回值返回一個Connection接口的實現類對象。 String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "12345678";
Connection con = DriverManager.getConnection(url,username,password);
3.獲得語句執行平臺,通過與數據庫連接類對象獲取對SQL語句的執行者對象,執行SQL語句,
Connection
對象的數據庫能夠提供描述其表、所支持的 SQL 語法、
存儲過程、此連接功能等等的信息。此方法:創建一個 Statement
對象來將 SQL 語句發送到數據庫。
如:
Statement createStatement()
實例:
Statement stat = con.createStatement();
返回值的Statement接口實現類對象
4.執行SQL語句/通過執行者對象調用方法執行SQL語句,獲得結果
// int executeUpdate(String sql) 執行給定 SQL 語句,該語句可能爲 INSERT、UPDATE 或 DELETE 語句
//返回值int,是操作成功數據表多少行
執行select語句獲取結果集時:ResultSet executeQuery(String sql) 執行給定的 SQL 語句,該語句返回單個 ResultSet 對象。
int row = stat.executeUpdate("INSERT INTO sort(sname,sprice,sdesc) VALUES ('家電',2000,'優惠的促銷')");
使用MYSQL數據庫管理系統完整的連接數據庫程序實例代碼:
public class JDBCdemo {
public static void main(String[] args)throws SQLException, ClassNotFoundException{
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "12345678";
Connection con = DriverManager.getConnection(url,username,password);
System.out.println(con);
Statement stat = con.createStatement();
System.out.println(stat);
int row = stat.executeUpdate("INSERT INTO sort(sname,sprice,sdesc) VALUES ('家電',2000,'優惠的促銷')");
System.out.println(row);
stat.close();
con.close();
}
}
當想實現對數據庫的增刪改查操作時,都需要做註冊驅動、獲得連接、獲得語句執行平臺、執行SQL語句、關閉資源的操作,這樣會有很多相同的代碼,可以編寫一個JDBC的
工具類,提供獲取連接對象的方法,從而降低代碼的重複率。
實例:
/*
* 此類是JDBC的工具類,存放的是操作數據庫中註冊驅動和獲得連接的操作,以及關閉操作
*
*/
public class JDBCUtil {
private static Connection con;
public static Connection getConnection(){
try{
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "12345678";
con = DriverManager.getConnection(url,username,password);
}catch(Exception ex){
throw new RuntimeException(ex+"數據庫連接失敗");
}
return con;
}
public static void close(Connection con,Statement stat , ResultSet rs){
if(rs!=null){
try{
rs.close();
}catch(SQLException ex){}
}
if(stat!=null){
try{
stat.close();
}catch(SQLException ex){}
}
if(con!=null){
try{
con.close();
}catch(SQLException ex){}
}
}
}
properties配置文件
開發中獲得連接的4個參數(驅動、URL、用戶名、密碼)通常都存在配置文件中,方便後期維護,程序如果需要更換數據庫,只需要修改配置文件即可。
通常情況下,我們習慣使用properties文件,此文件我們將做如下要求:
1. 文件位置:任意,建議src下
2. 文件名稱:任意,擴展名爲properties
3. 文件內容:一行一組數據,格式是“key=value”.
a) key命名自定義,如果是多個單詞,習慣使用點分隔。例如:jdbc.driver
b) value值不支持中文,如果需要使用非英文字符,將進行unicode轉換。
1.創建配置文件:database.properties
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydatabase
username=root
password=12345678
2.加載配置文件:JDBCUtilsConfig.java
/*
* 編寫數據庫連接的工具類,JDBC工具類
* 獲取連接對象採用讀取配置文件方式
* 讀取文件獲取連接,執行一次,static{}
*/
public class JDBCUtilsConfig {
private static Connection con ;
private static String driverClass;
private static String url;
private static String username;
private static String password;
static{
try{
readConfig();
Class.forName(driverClass);
con = DriverManager.getConnection(url, username, password);
}catch(Exception ex){
throw new RuntimeException("數據庫連接失敗");
}
}
private static void readConfig()throws Exception{
InputStream in = JDBCUtilsConfig.class.getClassLoader().getResourceAsStream("database.properties");
Properties pro = new Properties();
pro.load(in);
driverClass=pro.getProperty("driverClass");
url = pro.getProperty("url");
username = pro.getProperty("username");
password = pro.getProperty("password");
}
public static Connection getConnection(){
return con;
}
}
public class TestJDBCUtils {
public static void main(String[] args) {
Connection con = JDBCUtilsConfig.getConnection();
System.out.println(con);
}
}
結果:測試成功。