1、JDBC是什么:
是SUN公司制定的一套接口(interface)。接口都有調用者和實現者。面向接口調用、面向接口寫實現類,這都屬于面向接口編程。
2、在使用JDBC的六個步驟:
1.注冊驅動(告訴Java程序,即將連接的是哪個品牌的數據庫)2.獲取連接(表示JVM的進程和數據庫進程之間的通道打開了,這屬于進程之間的通信,使用完后記得關閉通道)。3.獲取數據庫操作對象(專門執行sql語句的對象)4.執行SQL語句(DQL,DML…)5.處理查詢結果集 (只有當第四步執行的是select語句的時候,才有本步)6.釋放資源(使用完資源后一定要關閉資源,Java和數據庫之間屬于進程間的通信,開啟之后一定要記得關閉)
3、JDBC的模糊查詢:
import com.shujia.wyh.utils.MySqlTool;import java.sql.PreparedStatement;
import java.sql.ResultSet;/*模糊查詢*/
public class JDBCDemo7 {public static void main(String[] args) throws Exception {String sql = "select ename from emp where ename like ?";PreparedStatement statement = MySqlTool.getStatement(sql);statement.setString(1, "%A%");ResultSet resultSet = statement.executeQuery();while (resultSet.next()){String name = resultSet.getString(1);System.out.println(name);}}
}
在使用maven連接mysql的時候,需要在poml文件中添加依賴:
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version>
</dependency>
?4、JDBC連接MySQL
/*1.注冊驅動(告訴Java程序,即將連接的是哪個品牌的數據庫)2.獲取連接(表示JVM的進程和數據庫進程之間的通道打開了,這屬于進程之間的通信,使用完后記得關閉通道)。3.獲取數據庫操作對象(專門執行sql語句的對象)4.執行SQL語句(DQL,DML…)5.處理查詢結果集 (只有當第四步執行的是select語句的時候,才有本步)6.釋放資源(使用完資源后一定要關閉資源,Java和數據庫之間屬于進程間的通信,開啟之后一定要記得關閉)*/import com.mysql.jdbc.Driver;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;public class JDBCDemo1 {public static void main(String[] args) throws Exception{//第一種連接方式// 1.注冊驅動(告訴Java程序,即將連接的是哪個品牌的數據庫)// jdk幫助文檔中提供了一個類讓我們去注冊驅動 DriverManager//但是通過觀察后發現,DriverManager類中并沒有構造方法,就意味著無法創建對象//但是沒關系,我們又觀察發現,該類中的方法都是靜態的,就意味著可以通過DriverManager類直接調用//靜態方法注冊驅動:static void registerDriver(Driver driver) 注冊與給定的驅動程序 DriverManager 。//通過觀察后又發現,registerDriver方法中需要傳入一個實現了java.sql.Driver接口的實現類//而恰好我們引入的mysql驅動包中就有一個類實現了java.sql.Driver接口//mysql驅動包中正好有一個類Driver實現了java.sql.Driver的接口DriverManager.registerDriver(new Driver());//2.獲取連接(表示JVM的進程和數據庫進程之間的通道打開了,這屬于進程之間的通信,使用完后記得關閉通道)。//static Connection getConnection(String url, String user, String password)//嘗試建立與給定數據庫URL的連接。/*** url: 統一資源定位符* http/https: 都是從網絡中請求資源* jdbc:mysql: 是java連接mysql數據庫的url前綴* 請求連接mysql數據庫的ip地址:192.168.254.100* 端口號:3306 告訴連接驅動我們連接的是mysql服務* 告訴你要操作的數據庫名:bigdata25* useUnicode=True&characterEncoding=utf8** user: 登錄mysql數據庫的用戶名 root** password: 登錄mysql數據庫的密碼 123456*///mysql5.7之后,不建議用戶直接與mysql服務連接,中間會有一個SSL令牌校驗String url = "jdbc:mysql://192.168.254.100:3306/bigdata25?useUnicode=True&characterEncoding=utf8&useSSL=false";String user = "root";String password = "123456";Connection conn = DriverManager.getConnection(url, user, password);System.out.println("=============數據庫連接成功:"+conn);//3.獲取數據庫操作對象(專門執行sql語句的對象)Statement statement = conn.createStatement();//4.執行SQL語句(DQL,DML…)/*** 在JDBC中 它將查詢單獨封裝了一個方法,而其他的增刪改單獨一個方法** 用于查詢的方法* ResultSet executeQuery(String sql) 執行給定的SQL語句,該語句返回單個 ResultSet對象。** 用戶增刪改的方法* int executeUpdate(String sql) 執行給定的SQL語句,這可能是 INSERT , UPDATE ,或 DELETE語句,* 或者不返回任何內容,如SQL DDL語句的SQL語句。*///增加
// String sql = "insert into student values('110','洪文霽','男',18,'95033')";
// int i = statement.executeUpdate(sql);
// if(i==1){
// System.out.println("數據添加成功!。。。");
// }else {
// System.out.println("數據添加失敗!!");
// }//刪除
// String sql2 = "delete from student where sno='110'";
// int i1 = statement.executeUpdate(sql2);
// if(i1==1){
// System.out.println("數據刪除成功!。。。");
// }else {
// System.out.println("數據刪除失敗!!");
// }//修改String sql3 = "update student set sage=19 where sno='110'";int i = statement.executeUpdate(sql3);if(i==1){System.out.println("數據修改成功!。。。");}else {System.out.println("數據修改失敗!!");}//6.釋放資源(使用完資源后一定要關閉資源,Java和數據庫之間屬于進程間的通信,開啟之后一定要記得關閉)conn.close();}
}
第二種連接的方式:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;/*回顧一下,使用java操作數據庫的6步1、注冊驅動 我們上午學習的注冊驅動是第一種方式借助于DriverManager類2、建立連接3、獲取操作數據庫的對象4、執行sql5、如果第四步是查詢操作,分析查詢的結果集6、釋放資源,關閉連接*/
public class JDBCDemo2 {public static void main(String[] args) throws Exception {/*** 上午呢,我們說到驅動包的時候,原本是java自己提供的一系列接口,然后不同的數據庫廠商去實現這些接口* 最終提供了一個驅動包給到開發者,然后開發者拿到這個驅動包使用里面的類連接或操作數據庫** 上午的注冊驅動方式,是直接實例化mysql驅動包中的Driver類,但是我們今后使用java不一定只是連接mysql,還有可能操作redis等其他的數據庫* 實際上我們最終是根據驅動包中的實現類路徑來找到這個實現類的* 能否使用傳路徑的方式,注冊驅動呢?** 第二種注冊驅動的方式:驅動包中的類都是class文件,我們如果能夠直接定位到實現類也可以* 使用反射的方式,定位到實現類,將實現類加載到內存* Class.forName("com.mysql.jdbc.Driver")*/Class.forName("com.mysql.jdbc.Driver");//2.獲取連接(表示JVM的進程和數據庫進程之間的通道打開了,這屬于進程之間的通信,使用完后記得關閉通道)。//mysql5.7之后,不建議用戶直接與mysql服務連接,中間會有一個SSL令牌校驗String url = "jdbc:mysql://192.168.254.100:3306/bigdata25?useUnicode=True&characterEncoding=utf8&useSSL=false";String user = "root";String password = "123456";Connection conn = DriverManager.getConnection(url, user, password);System.out.println("=============數據庫連接成功:"+conn);//3.獲取數據庫操作對象(專門執行sql語句的對象)Statement statement = conn.createStatement();//4.執行SQL語句(DQL,DML…)//修改String sql3 = "update student set sage=20 where sno='110'";int i = statement.executeUpdate(sql3);if(i==1){System.out.println("數據修改成功!。。。");}else {System.out.println("數據修改失敗!!");}//6.釋放資源(使用完資源后一定要關閉資源,Java和數據庫之間屬于進程間的通信,開啟之后一定要記得關閉)conn.close();}
}
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class JDBCDemo08 {public static void main(String[] args) throws Exception{//建立連接:需要指定用戶的url地址和用戶名和密碼Connection conn = DriverManager.getConnection("jdbc:mysql://master/trip","root","123456");//獲取mysql的操作對象Statement statement = conn.createStatement();String sql = "select * from activity ";//執行sql語句:ResultSet resultSet = statement.executeQuery(sql);//獲取里面的數據,并打印在控制臺中,下表是從1開始的。while(resultSet.next()){int id = resultSet.getInt(1);String cid = resultSet.getString(2);String name = resultSet.getString(3);System.out.println(id+ "\t" + cid + name);}
conn.close();}
}
5、悲觀鎖和樂觀鎖的概念
事務1–>讀取到版本號1.1
事務2—>讀取到版本號1.1
其中事務1先修改了,修改之后看了版本號是1.1 ,于是提交修改的數據,將版本號修改為1.2 其中事務2后修改的,修改之后準備提交的時候,發現版本號是1.2 ,和它最初讀的版本號不一致。回滾。
悲觀鎖:事務必須排隊執行。數據鎖住了,不允許并發。 (行級鎖: select后面添加for update )
樂觀鎖:支持并發,事務也不需要排隊,只不過需要一個版本號。