MySQL筆記--JDBC
阿新 • • 發佈:2020-07-15
MySQL筆記--JDBC
一、基本概念
Java database connection java 連線資料庫
Sun公司定義個用java連線所有資料庫的一組介面
不同資料庫廠商根據自己的資料庫 提供jdbc的實現類 用於實現與java連線---資料庫驅動
二、步驟
- 匯入驅動 jar 包
- 準備 JDBC 四大引數
- 驅動類
- 賬號
- 密碼
- 資料庫伺服器的 URL
- URL 格式: 協議名稱/主機名:埠號/目錄/資源?請求引數
- JDBC 的 URL :
jdbc:mysql://localhost:3306/db_26
String name ="root"; // MySQL 使用者名稱 String pwd = "root"; // MySQL 密碼 String driverClass="com.mysql.jdbc.Driver"; // 驅動 String url="jdbc:mysql://127.0.0.1:3306/db_26" // URL
- 載入驅動類
com.sql.jabc.Driver
Class.forName(URL); # 驅動類的全稱
- 獲取連結
Connection
Connection con = DriverManager.getConneretcion(url,name,pwd);
- 通過 Statement 獲取 SQL 語句的傳送器物件
Statement sta = con.createStatement();
- 準備 SQL 語句
String sql = "select * from student";
- 通過 Statement 傳送 SQL 語句
ResultSet set = sta.executeQuery(sql);
- 解析結果集
// 通過 next 方法判斷 set 是否還有元素可以遍歷 while(set.next()){ // 獲取本行每列的資料 // 指定列的索引,索引從 1 開始 int sid = set.getInt(1); // 指定列名 String sname = set.getString("sname"); }
- 關閉 連線
set.close(); sta.close(); con.close();
三、常用的介面
Class
對類和位元組碼檔案的封裝- 靜態方法:
Class.forName("com.mysql.jdbc.Driver");
於載入引數字元表示的類 類名必須是類的全稱- 可能丟擲異常:
ClassNotFoundException
- 可能丟擲異常:
- 靜態方法:
DriverManager
驅動管理類riverManager.getConnection(url,username,userPwd);
取url指定的資料庫伺服器的連線- 可能丟擲異常:
QLException
- 可能丟擲異常:
Connection
封裝連線的介面- 例項方法:
onnection.createStatement();
取sql語句發生器物件 - 例項方法:
onnection.close();
關閉連線
- 例項方法:
Statement
用於 Java 給 資料庫 傳送 SQL 語句- 例項方法:
sultSet Statement.executeQuery(sql)
執行select查詢 獲取結果集 - 例項方法:
nt Statement.executeUpdate(sql)
執行dml/ddl查詢 獲取影響的行數 - 例項方法:
tatement.close();
關閉
- 例項方法:
ResultSet
封裝 select 的結果集- 例項方法:
ResultSet Statement.executeQuery(sql)
執行select查詢 獲取結果集 - 例項方法:
int Statement.executeUpdate(sql)
執行dml/ddl查詢 獲取影響的行數 - 例項方法:
Statement.close();
關閉
- 例項方法:
- 練習 通過 JDBC 實現 增刪更改查
Static ArrayList<Student> getAll();
Static Student getOne(int sid);
Static boolean addOne(Student s);
Static boolean UpdateOne(Student s);
Static boolean deleteOne(int sid);
四、JDBC 工具類
package com.zhiyou100.javawebreview.jdbc.learn;
import java.sql.*;
/**
* @packageName: MyUtilOfMySQL
* @className: com.zhiyou100.javawebreview.jdbc.learn
* @Description: TODO JDBC 工具類
* @author: yang
* @date: 7/14/20
*/
public class MyTool {
{
try {
Class.forName(DRIVER_CLASS);
} catch (ClassNotFoundException e) {
throw new RuntimeException("載入驅動失敗");
}
}
private static final String IP = "192.168.217.82";
private static final String PORT = "3306";
private static final String DATABASE_NAME = "db_26";
private static final String USER_NAME = "root";
private static final String USER_PASSWORD = "1";
private static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";
private static final String URL = "jdbc:mysql://" + IP + ":" + PORT + "/" + DATABASE_NAME;
/**
* @Description: TODO 獲取連線
* @name: getConnection
* @param: []
* @return: java.sql.Connection
* @date: 7/14/20 17:55
* @author: yang
*/
public static Connection getConnection() {
try {
return DriverManager.getConnection(URL, USER_NAME, USER_PASSWORD);
} catch (SQLException throwable) {
throw new RuntimeException("獲取連線失敗");
}
}
/**
* @Description: TODO 關閉 JDBC
* @name: close
* @param: [resultSet, statement, connection]
* @return: void
* @date: 7/14/20 19:07
* @author: yang
*/
public static void close(ResultSet resultSet, Statement statement, Connection connection) {
if (resultSet == null) {
// 如果 resultSet 為 null,關閉 後兩個
close(statement, connection);
return;
}
if (statement == null || connection == null) {
throw new RuntimeException("statement 或者 connection 為 null");
}
try {
resultSet.close();
} catch (SQLException throwable) {
throw new RuntimeException("resultSet 關閉失敗");
}
try {
statement.close();
} catch (SQLException throwable) {
throw new RuntimeException("statement 關閉失敗");
}
try {
connection.close();
} catch (SQLException throwable) {
throw new RuntimeException("connection 關閉失敗");
}
}
/**
* @Description: TODO 關閉 JDBC
* @name: close
* @param: [statement, connection]
* @return: void
* @date: 7/14/20 19:07
* @author: yang
*/
public static void close(Statement statement, Connection connection) {
try {
statement.close();
} catch (SQLException throwable) {
throw new RuntimeException("statement 關閉失敗");
}
try {
connection.close();
} catch (SQLException throwable) {
throw new RuntimeException("connection 關閉失敗");
}
}
public static void main(String[] args) throws SQLException {
// Connection connection = getConnection();
// Statement statement = connection.createStatement();
// String sql = "select * from student";
// ResultSet resultSet = statement.executeQuery(sql);
// while (resultSet.next()) {
// int sid = resultSet.getInt("sid");
// String sname = resultSet.getString("sname");
// char sex = resultSet.getString("sex").charAt(0);
// int sage = resultSet.getInt("sage");
// int scid = resultSet.getInt("scid");
// Student student = new Student(sid, sname, sex, sage, scid);
// System.out.println(student);
// }
// close(resultSet, statement, connection);
Connection connection = getConnection();
Statement statement = connection.createStatement();
String sql = "alter table tab_3 drop tname ";
int i = statement.executeUpdate(sql);
System.out.println(i);
close(statement, connection);
}
}
五、預編譯物件 preparedStatement
private static Student getOne(int sid) throws SQLException {
Student student = new Student();
Connection connection = getConnection();
// 準備 sql 模版
String sql = "select * from student where sid=?";
// 傳送 sql 模版,獲取預編譯物件
PreparedStatement statement = connection.prepareStatement(sql);
// 設定 模版的的引數
statement.setInt(1, sid);
// 執行查詢語句,獲取結果集
ResultSet resultSet = statement.executeQuery();
// 處理結果集
while (resultSet.next()) {
sid = resultSet.getInt("sid");
String sname = resultSet.getString("sname");
char sex = resultSet.getString("sex").charAt(0);
int sage = resultSet.getInt("sage");
int scid = resultSet.getInt("scid");
student = new Student(sid, sname, sex, sage, scid);
}
// 關閉連線
close(resultSet, statement, connection);
return student;
}