* 概念:
* 使用Java代碼操作數據庫
* JDBC其實就是一套操作數據庫的規範(接口)
* 快速入門:
1.導入驅動jar包
2.註冊驅動
3.創建連接對象 Connection
4.定義sql String sql = "insert into stu values('zhangsan',23,'男');
5.獲取執行sql的對象 Statement
6.執行sql
7.處理結果
8.釋放資源。
// 1.導入jar 包
// 2.註冊驅動
Class.forName("com.mysql.jdbc.Driver");
// 3.獲取數據庫連接對象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/shopping", "root", "123456");
(本機爲localhost或者本機ip地址都是可以的,端口號在安裝mysql數據庫的時候可以看到爲3306)
注意:如果是本機操作,ip和端口號是可以省略的
// 獲取執行sql語句的對象
String sql = "insert into tea values (null,'abcdef')";
Statement stat = conn.createStatement();
// 執行sql
int i = stat.executeUpdate(sql);
System.out.println(i);
//釋放資源
conn.close();
stat.close();
* 詳解各個類:
* DriverManager:驅動管理類
* 功能:
* 註冊驅動:
* Class.forName("com.mysql.jdbc.Driver");
在Driver類中有靜態代碼塊,隨着類的加載而執行。
static {
try {
java.sql.DriverManager.registerDriver(new Driver());//註冊驅動
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
* 拓展:mysql5之後的驅動jar包,註冊驅動這行代碼可以省略
因爲你不寫的話mysql5以上版本會自己找到這個路徑,然後加載這個路徑:
* 獲取Connection對象:
* Connection conn = DriverManager.getConnection(url,user,password);
* url:訪問數據庫的路徑
jdbc: mysql:// 192.168.3.100: 3306 /day04
主協議 子協議 ip地址 端口號 數據庫名稱
* 細節:如果連接的是本地的數據庫,則ip和端口可以省略
jdbc:mysql:/
* Connection:數據庫連接對象
* 創建執行sql的對象
* createStatement:創建Statement對象
* prepareStatement:創建preparedStatement對象
* 可以防止sql注入,提高執行效率
* prepareCall: 創建preparedCall對象
* 執行存儲過程的。
* 管理事務:事務指一件事,這件事一般包含多個步驟,這些步驟要麼同時成功,要麼同時失敗。
* setAutoCommit():開啓事務
* commit():提交事務
* rollback():回滾事務
try{
開啓事務setAutoCommit(false):
1.查詢
2.-我卡里的錢
3.+張三卡里的錢
提交事務 commit()
}catch(Exception e){
回滾事務rollback()
}
* Statement:執行sql的對象
* 方法:
* executeUpdate(sql):執行DML語句 (增、刪、改)
* 返回值:int,代表影響的行數
* executeQuery(sql):執行DQL語句 (查詢)
* 返回值:ResultSet對象 結果集對象,對結果集的封裝
* execute(sql):執行任意語句
* 返回值:boolean,執行成功與否
* ResultSet:結果集對象
* 方法:
* next():判斷是否有下一條記錄,如果有,則將遊標向下移動一行
* getXxx(參數):獲取數據
* 參數類型:
String:列的名稱
int:列的序號 從1開始
* PreparedStatement:執行sql的對象
* 登陸:
如果使用statement,可能發生sql注入。
* 功能:
* 預防sql注入
* 使用方式:
1.定義sql時,所有的參數位置 需要 使用 ? 作爲佔位符
2.Connection對象獲取執行sql 對象 prepareStatement(sql)
3.給佔位符 ? 賦值
* setXxx(參數1,參數2):
* 參數1:?出現的位置 從1開始
* 參數2:?對應的值
4.執行sql時,使用不帶參數的方法
* 注意:一般都採用該對象來執行sql
獲取自增長列的編號
// 連接
con = JdbcUtil.getConnection();
// 【一、需要指定返回自增長標記】
pstmt = con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
// 設置參數
pstmt.setString(1,'zs');
pstmt.setString(2,30);
// 執行1
pstmt.executeUpdate();
// 2 注意執行順序【二、獲取上面保存的部門子增長的主鍵】
rs = pstmt.getGeneratedKeys();//拿到結果集合
// 3 得到返回的自增長字段的值
if (rs.next()) {
int deptId = rs.getInt(1);
}