1、何為JDBC
jdbc:(java database connection),從這個專有名詞的全拼來看,就是Java用來連接配接資料庫的,就是這麼簡單,那麼接下來就是介紹如何連接配接和一系列操作了。
一、連接配接
注意:Java連接配接資料庫需要使用到第三方的庫,mysql-connector-java-8.0.19,目前我的版本是最新的,适配資料庫8.0版本。
jar包的下載下傳官網位址:https://dev.mysql.com/downloads/connector/j/
1、導包
在自己程式的根目錄建立一個lib檔案,然後把下載下傳的庫丢進去,然後滑鼠右鍵單擊選擇add as Library,編譯器就能将這個庫解析了,這樣才能使用這個庫。
2、加載驅動
Class.forName("com.mysql.cj.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/javajdbc?useSSL=false&serverTimezone=Asia/Shanghai";
String users="root";
String password="abcdef";
第一句是将庫中的Driver驅動類加載程序式,這個類是所有資料庫的标準連接配接方式,
第二句就是資料庫的URL位址 格式:
jdbc:mysql://資料庫的ip位址:端口号/資料庫名稱?useSSL=false&serverTimezone=Asia/Shanghai";
?表示是否需要加參數,&表示參數之間的連接配接
從庫的第六個版本就需要加上useSSL=false&serverTimezone=Asia/Shanghai";這兩個參數,一個是協定,一個是時區**
第三、第四句就是資料庫使用者的名稱和登入密碼
3、連接配接
我個人比較喜歡使用這種方式去連接配接資料庫
那麼經過上面三步,隻要書寫正确那麼就已經能正确的與自身電腦或者伺服器的資料庫取得連接配接了,當然當中的異常我并沒指出,下面就是我完整的連接配接代碼
public class Text{
public static void main(String[] args){
Connection connection=null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/javajdbc?useSSL=false&serverTimezone=Asia/shanghai";
String username="Travel Time";
String password="abcdef";
connection= DriverManager.getConnection(url,username,password);
if(connection!=null) System.out.println("Successful");
else System.out.println("Error");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
結果:
Successful
2、SQL 語句的注入
一、Statement接口
**由于不能直接執行個體化,是以需要用到連接配接對象來産生Statement對象**
Statement statement=connection.createStatement();
**執行SQL語句***
statement.executeQuery(SQL語句);
二、PrepareStatement接口
**SQL語句***
String sql="SELECT * FROM tbl_user WHERE userId=?";
**得到Statement對象***
prepareStatement ps=connection.prepareStatement(sql);
**對占位符進行設定***
ps.setInt(1,1);//第一個參數表示ps的第一個問号
**進行查詢***
resultSet=ps.executeQuery();
Statement和PrepareStatement的差別
1、Statement對于SQL語句的操作太固定,而且如何需要操作到大量的SQL語句時太複雜而且對于SQL語句的适配性太差,
2、而PrepareStatement引入了占位符,隻需要在後期對占位符進行設定便可以設配同類型的SQL語句,而且PrepareStatement最大的特點就是采用了預編譯的功能,對編譯過的代碼有緩存區。
3、查詢
查詢我們需要使用到一個方法:executeQuery();
傳回結果為一個Result類型的結果集
String sql="SELECT * FROM tbl_user WHERE userId=?";
pstat=connection.prepareStatement(sql);
pstat.setInt(1,1);//第一個參數表示pstat的第一個問号
resultSet=pstat.executeQuery();
UserInformation user=null;
while(resultSet.next()){//next()方法一次取一行資料
//操作語句;
}
4、增、删、改
**在JDBC中這三個操作的思想都是一樣的,對資料表中的資料進行更新操作。響應的語句為:executeUpdate();方法 其他的操作都大緻相同,不同的地方就在于SQL語句,因為這始終是在操作資料庫,這隻不過是通過Java來實作操作而已,是以想學好JDBC,SQL知識少不了
一、增加
String sql = "INSERT INTO tbl_user(username,password,sex,hobby,nativePlace,identify)" +
"values(?,?,?,?,?,?)";
pstat = connection.prepareStatement(sql);
pstat.setString(1,"張三");
pstat.setString(2,"99999999");
pstat.setString(3,"男");
pstat.setString(4,"唱歌跳舞");
pstat.setString(5,"長沙天心區");
pstat.setString(6,"身份證");
int row=pstat.executeUpdate();
PrepareStatement是可以使用多個占位符的,隻需要在後期進行挨個設定就行了,是以這個比Statement更友善的點就在這裡
二、删除
String sql = "DELETE FROM tbl_user WHERE userId=?";
pstat = connection.prepareStatement(sql);
pstat.setInt(1,4);
int row=pstat.executeUpdate();
三、改
String sql = "UPDATE tbl_user set hobby=? WHERE userId=1";
pstat=connection.prepareStatement(sql);
pstat.setString(1,"琴棋書畫");
int result=pstat.executeUpdate();
是吧,操作都差不多吧,主要的還是在SQL語句,是以其他的資料庫操作通過其他的SQL語句便能完成,是以這種隻要知道SQL語句就行
但是,上面的這種方法在如果要向資料庫内寫入上萬條資料時,是非常慢的,而且在實際應用開發時也不可能使用這種方式,(這裡隻是入門而已)
如果京東這種大型的網站在剁手節采用了這種設計,那麼不出十秒,整個伺服器……崩潰。
是以這是需要優化的,我們後期揭曉,嘿嘿🤭