Java數據庫程序設計
一.關係型數據庫系統
1.數據庫系統的結構
2.關係型數據庫系統
在關係型數據庫系統中,一行是一個元組,一列表示一個屬性
二.SQL
1.首先在命令行中進入MySQL文件所在的bin目錄
2.使用root權限登錄數據庫
2.查看有哪些數據庫,其中MySql和Test是必有的,MySql用於存儲服務器信息和其他用戶信息的表格;用於創建用戶,授予權限,撤銷用戶,爲管理員而創建;Test數據庫用於存儲數據或創建新的數據庫。
3.創建用戶名爲“Bob”,密碼爲“123” 的用戶
4.賦予權限
5.授予從任意IP訪問的特權
6.授予從特定IP遠程訪問的特權
7.使用Bob用戶登錄
其他常見MySql命令:
exit;//退出
net stop mysql;//停止mysql服務
net start mtsql;//開啓mysql服務
source script.sql;//運行sql腳本文件
\c //退出當前命令,重新輸入
show grants;//查看權限
三.JDBC
1.JDBC是訪問關係型數據庫的API,提供訪問和操縱數據庫的接口。
2.Java開發數據庫應用需要用到的四個接口:
Driver//加載一個合適的驅動
Connection//連接到數據庫
Statement//創建和運行SQL語句
ResultSet//處理結果
四.訪問數據庫的典型步驟
【擴展】將mysql jar包添加至EclipseIDE中,可以訪問將jar包導入eclipse
1.加載合適的驅動
本人使用的數據庫是mySql,所以加載MySql數據庫驅動
public static void main(String[] args) {
try {
//第一步:加載合適的驅動
Class.forName("com.mysql.jdbc.Driver");
//下面打印語句測試驅動是否加載成功,可選擇性添加
System.out.println("驅動加載成功!");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
2.創建連接
//第二步:建立連接
Connection connection=DriverManager.getConnection("jdbc:mysql://192.168.0.103/javabook","Bob","123");
//Javabook數據庫是登錄Bob用戶新創建的
【擴展】
數據庫 | URL模式 |
---|---|
Access | jdbc:odbc:dataSource |
MySql | jdbc:mysql://hostname/dbname |
Oracle | jdbc:oracle:thin:@hostname:port#:oracleDBSID |
3.創建SQL語句
不帶參數:Statement接口
//第三步:創建SQL語句
Statement statement=connection.createStatement();
帶參數或不帶參數都可以使用:PreparedStatement接口
PreparedStatement ps=connection.prepareStatement("select firstName,lastName from student where ssn=?");
【注意】使用PreparedStatement接口必須要寫好SQL語句,?(問號)代表佔位符,通過setter修改器傳值
ps.setString(1,"444111110");//1代表傳給第幾個參數,後面的代表傳的內容
用於執行SQL的存儲過程:CallableStatement接口
CallableStatement cs=connection.prepareCall("{call samplePrepare (?,?,?)}");///三個?代表轉義語句;samplrPrepare是已經創建好的存儲過程
執行語句:Result Set接口
ResultSet rs=ps.executeQuery();//執行查詢語句
ResultSet rs2=ps.executeUpdate();//執行更新語句
處理結果
方法:當前初始位置是null,通過next方法移動
while(rs.next()){
System.out.println(rs.getString(1)+" "+rs.getString(2));//分別是firstName和lastName
}
最終運行結果
五.獲取元數據
- DatabaseMetaData接口:獲取數據庫範圍的信息
DatabaseMetaData dmd=connection.getMetaData();
結果:
不止可以獲取這兩個信息,只要是數據庫範圍內的信息都可以
- ResultSetMetaData接口:獲取結果集元數據
ResultSetMetaData rsmd=rs.getMetaData();
for(int i=1;i<=rsmd.getColumnCount();i++){
System.out.printf("%-10s\t",rsmd.getColumnName(i));
}
結果:
【補充】
- Java6不需要顯式加載驅動
- split方法分割“.”時需要轉義
加油!