JDBC:java database connectivity SUN公司提供的一套操作數據庫的標準規範。
JDBC與數據庫驅動的關係:接口與實現的關係。
JDBC規範
掌握四個核心對象:
- DriverManager:用於註冊驅動
- Connection: 表示與數據庫創建的連接
- Statement: 操作數據庫sql語句的對象
- ResultSet: 結果集或一張虛擬表
JDBC的準備工作:
JDBC規範(接口)在哪裏:
JDK中: java.sql.*; javax.sql.*;
數據庫廠商提供的驅動:mysqll-connector-java-xxx-bin.jar文件(需要根據mysql和Java版本確定)
JDBC常用的類和接口詳解
DriverManager
java.sql.Drivermanager類 : 註冊驅動和創建連接
a、註冊驅動
DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建議使用
原因有2個:
> 導致驅動被註冊2次,靜態代碼塊裏又註冊了一次。
> 強烈依賴數據庫的驅動jar
解決辦法:
Class.forName("com.mysql.jdbc.Driver");
b.與數據庫建立連接
根據API
第一種方式:
static Connection getConnection(String url, String user, String password) 試圖建立到給定數據庫 URL 的連接。
getConnection("jdbc:mysql://localhost:3306/test1", "root", "123456"); |
URL:SUN公司與數據庫廠商之間的一種協議。 jdbc:mysql://localhost:3306/day06 協議 子協議 IP :端口號 數據庫名 mysql: jdbc:mysql://localhost:3306/test1 或者 jdbc:mysql:///test1(默認本機連接) |
第二種方式:
Properties info = new Properties();//要參考數據庫文檔 info.setProperty("user", "root"); info.setProperty("password","root");
getConnection(String url, Properties info) |
第二種方式
getConnection(String url) DriverManager.getConnection("jdbc:mysql://localhost:3306/test1?user=root&password=123456"); |
Connection接口
接口的實現在數據庫驅動中。所有與數據庫交互都是基於連接對象的。
Statement接口
操作sql語句,並返回相應結果的對象
接口的實現在數據庫驅動中。用於執行靜態 SQL 語句並返回它所生成結果的對象。
- ResultSet executeQuery(String sql) 根據查詢語句返回結果集。只能執行select語句。
- int executeUpdate(String sql) 根據執行的DML(insert update delete)語句,返回受影響的行數。
- boolean execute(String sql) 此方法可以執行任意sql語句。返回boolean值,表示是否返回ResultSet結果集。僅當執行select語句,且有返回結果時返回true, 其它語句都返回false;
ResultSet接口:
結果集(客戶端存表數據的對象)
封裝結果集
提供一個遊標,默認遊標指向結果集第一行之前。
調用一次next(),遊標向下移動一行。
提供一些get方法。
封裝數據的方法
Object getObject(int columnIndex); 根據序號取值,索引從1開始
Object getObject(String ColomnName); 根據列名取值。
JDBC連接MySQL並執行query的一個demo
從加載驅動、建立連接 到執行語句 到處理執行結果,最後到關閉連接 釋放資源 整個過程。
public class Demo04 {
public static void main(String[] args) {
Connection conn = null;
Statement statement = null;
ResultSet resultSet = null;
try {
//1、註冊驅動
Class.forName("com.mysql.jdbc.Driver");//使用了這個類就加載了
//2、創建連接
conn = DriverManager.getConnection("jdbc:mysql://localhost/test1?user=root&password=123456");
//3、得到執行sql語句的Statement對象
statement = conn.createStatement();
String sql = "select * from user;";
//4、執行sql語句,並返回結果
resultSet = statement.executeQuery(sql);
//5、處理結果
while(resultSet.next()){
System.out.println(resultSet.getObject(1));
System.out.println(resultSet.getObject(2));
System.out.println(resultSet.getObject(3));
System.out.println(resultSet.getObject(4));
System.out.println(resultSet.getObject(5));
System.out.println("======================");
}
} catch (Exception e) {
// TODO: handle exception
}finally {
//6關閉資源
if(resultSet != null){
try {
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(statement != null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}