感謝大家對IT十八掌大數據的支持,今天的作業如下:
1.實踐PreparedStament的CRUD操作。
2.對比Statement和PreparedStatement的大批量操作耗時?(100000記錄)
3.事務特點?
4.mysql client如何控制事務?
--------------------------------------------------------------------------------------------------------
1.實踐PreparedStament的CRUD操作。
答:
package com.it18zhang.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import org.junit.Test;
/**
* 使用PreparedStatement
*/
public class TestJDBC3 {
@Test
public void insert(){
try {
//1.註冊驅動
String driver = "com.mysql.jdbc.Driver" ;
Class.forName(driver);
//2.建立連接
String url = "jdbc:mysql://localhost:3306/mybase" ;
String username = "root" ;
String password = "root" ;
Connection conn = DriverManager.getConnection(url, username, password);
//3.創建語句對象
String sql = "insert into stus(id,name,age) values(?,?,?)" ;
PreparedStatement ppst = conn.prepareStatement(sql);
ppst.setInt(1, 100);
ppst.setString(2, "tomas");
ppst.setInt(3, 23);
ppst.execute();
ppst.close();
conn.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
* update , id = 1, age = 10
*/
@Test
public void update() {
try {
//1.註冊驅動
String driver = "com.mysql.jdbc.Driver" ;
Class.forName(driver);
//2.建立連接
String url = "jdbc:mysql://localhost:3306/mybase" ;
String username = "root" ;
String password = "root" ;
Connection conn = DriverManager.getConnection(url, username, password);
//3.創建語句對象
Statement st = conn.createStatement();
String sql= "update stus set age = ? where id = ?" ;
PreparedStatement ppst = conn.prepareStatement(sql);
ppst.setInt(1, 10);
ppst.setInt(2, 1);
boolean b = ppst.execute();
System.out.println("" + b);
st.close();
conn.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
* delete , id = 1
*/
@Test
public void delete() {
try {
//1.註冊驅動
String driver = "com.mysql.jdbc.Driver" ;
Class.forName(driver);
//2.建立連接
String url = "jdbc:mysql://localhost:3306/mybase" ;
String username = "root" ;
String password = "root" ;
Connection conn = DriverManager.getConnection(url, username, password);
//3.創建語句對象
String sql = "delete from stus where id = ?" ;
PreparedStatement ppst = conn.prepareStatement(sql);
ppst.setInt(1, 1);
boolean b = ppst.execute();
System.out.println("" + b);
conn.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void select() {
try {
//1.註冊驅動
String driver = "com.mysql.jdbc.Driver" ;
Class.forName(driver);
//2.建立連接
String url = "jdbc:mysql://localhost:3306/mybase" ;
String username = "root" ;
String password = "root" ;
Connection conn = DriverManager.getConnection(url, username, password);
conn.setAutoCommit(false);
//3.創建語句對象
//select id, name ,age form ...
String sql = "select * from stus where id > ?" ;
PreparedStatement ppst = conn.prepareStatement(sql);
ppst.setInt(1, 1);
boolean b = ppst.execute();
//判斷是否是查詢
if(b){
//獲取查詢結果集
ResultSet rs = ppst.getResultSet();
//移動遊標
while(rs.next()){
//int id = rs.getInt("id");
Integer id = (Integer) rs.getObject("id");
String name = rs.getString("name");
Integer age = (Integer) rs.getObject("age");
System.out.println("id=" + id + ",name=" + name + ",age=" + age);
}
//結果集元數據
ResultSetMetaData meta = rs.getMetaData();
for(int i = 0 ; i < meta.getColumnCount() ; i ++){
System.out.print(meta.getColumnLabel(i + 1) + " ");
}
}
//
//5.釋放資源
ppst.close();
conn.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
2.對比Statement和PreparedStatement的大批量操作耗時?(100000記錄)
答:
插入大批量數據測試
3.事務特點?
答:
ACID
原子性(atomicity):組成事務處理的語句形成了一個邏輯單元,不能只執行其中的一部分。
一致性(consistency):在事務處理執行前後,數據庫是一致的(兩個賬戶要麼都變,或者都不變)。
隔離性(isolcation):一個事務處理對另一個事務處理沒有影響。
持續性(durability):事務處理的效果能夠被永久保存下來 。
4.mysql client如何控制事務?
答:
mysql client下的事務操作
------------------------
1.關閉自動提交
set autocommmit = 0 ; //1 = true
2.開啓事務
start transaction ;
3.提交事務
commit ;
4.回滾
rollback ;