1.SUN公司為了簡化,統一數據庫的操作,定義了一套java操作數據庫的規范,稱之為JDBC
2.數據庫驅動
3.JDBC全稱為:JAVA DataBase Commectivity(java數據庫連接)
4.組成JDBC的兩個包(1 java.sql,2 javax.sql)。
5.DriverManager->Connection->Statement(PReparedStatement,CallableStatement)->ResultSet
6.JavaEE軟件分為了四個層次:
6.1、客戶端層:DHTML(HTML、CSS、JS)、Java application
從第二層開始,位于服務器端
6.2、web層(表現層):Servlet/jsp ---- 接收客戶端數據、將數據處理結構展示給客戶端、業務層調度 --- Struts
6.3、業務層(中間層):EJB ----- 根據系統業務流程 處理客戶端提交數據 --- Spring
6.4、數據層(持久層):JDBC接口 ------- 完成數據的持久化、從數據庫獲取數據 --- Hibernate/IBatis
企業里 web層、業務層、數據層 統稱為三層結構 SSH:Struts+Spring+Hibernate
1.搭建環境
1.1 在(MySQL,SqlServer,Oracle..)等數據庫中創建一個數據庫和表
1.2 新建Java工程,并且針對不同的數據庫程序導入數據庫驅動(maven)
2.JDBC如何實現對數據庫的操作呢?
2.1 第一步:在程序中裝載驅動
2.1.1 DriverManager.registerDriver(new com.mysql.jdbc.Driver());
2.1.2 Class.forName("com.mysql.jdbc.Driver"); //開發中建議使用
2.2 第二步:獲得數據庫的連接
String url=""; //數據庫訪問路徑,唯一標示數據庫的位置
String user=""; //用戶名
String pass=""; //密碼
Connection conn=DriverManager.getConnection(url,user,pass);
2.3 第三步:創建用于向數據庫發送Sql的Statement對象,并且發送Sql
Statement stmt=conn.cteateStatement();
2.4 第四步: 通過Sql操作數據庫
String sql="";
ResultSet rs=stmt.executeQuery(sql); //得到數據結果集
2.5 第五步:釋放資源
關閉資源的順序一般為:先開的后關閉,后開的先關閉
ResultSet->Statement->Connection
3.讀取配置文件(*.properties)代碼如下:
ResourceBundle bundle=ResourceBundle.getBundle("*");
String driver=bundle.getString("driver");
1.Jdbc程序中的DriverManager用于加載驅動,并創建與數據庫的鏈接,這個API的常用方法:
DriverManager.registerDriver(new Driver())
DriverManager.getConnection(url, user, passWord),
備注:在實際開發中并不推薦采用registerDriver方法注冊驅動。原因有二:
1.1 查看Driver的源代碼可以看到,如果采用此種方式,會導致驅動程序注冊兩次,也就是在內存中會有兩個Driver對象。
1.2 程序依賴mysql的api,脫離mysql的jar包,程序將無法編譯,將來程序切換底層數據庫將會非常麻煩。
2. 推薦加載驅動方式:Class.forName(“com.mysql.jdbc.Driver”);
采用此種方式不會導致驅動對象在內存中重復出現,并且采用此種方式,程序僅僅只需要一個字符串,不需要依賴具體的驅動,使程序的靈活性更高。
3. 同樣,在開發中也不建議采用具體的驅動類型指向getConnection方法返回的connection對象。
1. URL用于標識數據庫的位置,程序員通過URL地址告訴JDBC程序連接哪個數據庫,URL的寫法為:
jdbc:mysql://localhost:3306/test?參數名:參數值
協議 子協議 主機:端口 數據庫 參數
2.常用數據庫URL地址的寫法:
2.1 Oracle:jdbc:oracle:thin:@localhost:1521:sid
2.2 SqlServer:jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=sid
2.3 MySql:jdbc:mysql://localhost:3306/sid
Mysql的url地址的簡寫形式: jdbc:mysql:///sid
2.4 常用屬性:useUnicode=true&characterEncoding=UTF-8
1. Jdbc程序中的Connection,它用于代表數據庫的鏈接,Collection是數據庫編程中最重要的一個對象,客戶端與數據庫所有交互都是通過connection對象完成的,這個對象的常用方法:
createStatement():創建向數據庫發送sql的statement對象
prepareStatement(sql) :創建向數據庫發送預編譯sql的PrepareSatement對象
存儲過程
prepareCall(sql):創建執行存儲過程的callableStatement對象。
事務
setAutoCommit(boolean autoCommit):設置事務是否自動提交。
commit() :在鏈接上提交事務。
rollback() :在此鏈接上回滾事務
1. Jdbc程序中的Statement對象用于向數據庫發送SQL語句, Statement對象常用方法:
1.1 執行SQL語句
executeQuery(String sql) :用于向數據發送查詢語句,返回ResultSet結果集
executeUpdate(String sql):用于向數據庫發送insert、update或delete語句,返回int,受影響的記錄
execute(String sql):用于向數據庫發送任意sql語句,返回bool
1.2 支持批處理,一次性執行多條SQL
addBatch(String sql) :把多條sql語句放到一個批處理中。
executeBatch():向數據庫發送一批sql語句執行。
1. PreperedStatement是Statement的子類,它的實例對象可以通過調用Connection.preparedStatement()方法獲得,相對于Statement對象而言:
2. PreperedStatement可以避免SQL注入的問題。
3. Statement會使數據庫頻繁編譯SQL,可能造成數據庫緩沖區溢出。PreparedStatement 可對SQL進行預編譯,從而提高數據庫的執行效率并且PreperedStatement對于sql中的參數,允許使用占位符的形式進行替換,簡化sql語句的編寫。
例如:
String sql="select * from users where name=? and pwd=?";
try{
PreparedStatement pstmt=conn.prepareStatement(sql);
pstmt.setString(1,userName);
pstmt.setString(1,password);
ResultSet rs=pstmt.executeQuery();
}
備注:
(1). 必須在獲得PrepareStatement對象時,傳入SQL進行預編譯
(2). 傳值,索引從1開始
(3). pstmt執行SQL的時候,一定不要將預編譯的SQL傳入,否則會出錯
1. Jdbc程序中的ResultSet用于代表Sql語句的執行結果。Resultset封裝執行結果時,采用的類似于表格的方式。ResultSet 對象維護了一個指向表格數據行的游標,初始的時候,游標在第一行之前,調用ResultSet.next() 方法,可以使游標指向具體的數據行,進而調用方法獲取該行的數據。
2.ResultSet既然用于封裝執行結果的,所以該對象提供的大部分方法都是用于獲取數據的get方法:
2.1 獲取任意類型的數據
getObject(int index)
getObject(string columnName)
2.2 獲取指定類型的數據,例如:
getString(int index)
getString(String columnName)
3. 如果rs返回一行數據,在開發中,經常使用if(rs.next())來替代while(rs.next());
4. ResultSet還提供了對結果集進行滾動的方法:
4.1 next():移動到下一行
4.2 previous():移動到前一行
4.3 absolute(int row):移動到指定行
4.4 beforeFirst():移動resultSet的最前面。
4.5 afterLast() :移動到resultSet的最后面。
1. Jdbc程序運行完后,切記要釋放程序在運行過程中,創建的那些與數據庫進行交互的對象,這些對象通常是ResultSet, Statement和Connection對象。
2. 特別是Connection對象,它是非常稀有的資源,用完后必須馬上釋放,如果Connection不能及時、正確的關閉,極易導致系統宕機。Connection的使用原則是盡量晚創建,盡量早的釋放。
3. 為確保資源釋放代碼能運行,資源釋放代碼也一定要放在finally語句中。
開發環境 MyEclipse
數據庫 MySql
下載地址:
新聞熱點
疑難解答