JBDC
概述:
- 什麼是 JDBC?
Java數據庫連接,(Java Database Connectivity,簡稱JDBC)是Java語言中用來規範客戶端程序如何來訪問數據庫的應用程序接口,提供了諸如查詢和更新數據庫中數據的方法,通常說的JDBC是面向關係型數據庫的,SUN 公司爲了簡化開發人員的(對數據庫的統一)操作,提供了一個Java操作數據庫的規範。 - Java需要的數據庫驅動包下載地址:多版本的下載地址 點擊這裏
- 在IDEA中導入需要的jar包:
第一個JDBC程序
- 創建一個測試數據庫
CREATE DATABASE jdbcStudy CHARACTER SET utf8 COLLATE utf8_general_ci;
USE jdbcStudy;
CREATE TABLE users(
id INT PRIMARY KEY,
NAME VARCHAR(40),
PASSWORD VARCHAR(40),
email VARCHAR(60),
birthday DATE
);
INSERT INTO users(id,NAME,PASSWORD,email,birthday)
VALUES(1,'zhangsan','123456','[email protected]','1980-12-04'),
(2,'lisi','123456','[email protected]','1981-12-04'),
(3,'wangwu','123456','[email protected]','1979-12-04');
- 編寫Java測試代碼
import java.sql.*;
public class JdbcFirstDemo {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1. 加載驅動
Class.forName("com.mysql.jdbc.Driver"); // 固定寫法,加載驅動
//註冊驅動:DriverManager.registerDriver(new com.mysql.jdbc.Driver());等同上面的
//2. 用戶信息和 url
String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true";
String username = "root";
String password = "123456";
//3. 連接成功,數據庫對象 Connection(url,用戶,密碼)
Connection connection = DriverManager.getConnection(url, username, password);
//4. 執行SQL的對象
Statement statement = connection.createStatement();
//5. 用執行SQL的對象去執行SQL語句
String sql = "SELECT * FROM users";
//返回的結果集,結果集中封裝了我們全部的查詢出來的結果
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()){
System.out.println("id=" + resultSet.getObject("id"));
System.out.println("name=" + resultSet.getObject("NAME"));
System.out.println("pwd=" + resultSet.getObject("PASSWORD"));
System.out.println("email=" + resultSet.getObject("email"));
System.out.println("birth=" + resultSet.getObject("birthday"));
System.out.println("==================================");
}
//6、釋放連接
resultSet.close();
statement.close();
connection.close();
}
}
- 運行結果:
- 總結:
1、加載驅動;
2、編寫用戶信息和 url;
3、連接數據庫 DriverManager;
4、獲得執行sql的對象 Statement;
5、獲得返回的結果集;
6、釋放資源。
- 提取工具類:
由於編寫用戶信息和 url、釋放資源這兩步操作都是固定的,所以我們一般都會單獨放到一個配置文件裏,然後寫一個工具類,使用的時候直接調用即可:
在 src 下建立資源文件 (db.properties):
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true
username=root
password=123456
工具類(jdbcUtils):
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class jdbcUtils {
private static String driver = null;
private static String url = null;
private static String username = null;
private static String password = null;
static {
try {
InputStream in = jdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
Properties properties = new Properties();
properties.load(in);
driver = properties.getProperty("driver");
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");
//加載驅動
Class.forName(driver);
} catch (Exception e) {
e.printStackTrace();
}
}
//獲取連接
public static Connection getConnecction() throws SQLException {
return DriverManager.getConnection(url, username, password);
}
//釋放資源
public static void release(Connection conn, Statement st, ResultSet rs){
if (rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (st!=null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
當我們編寫完這兩個後,就可以使用它們進行增刪改查:
這裏演示一個插入數據操作,其他類似:
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestInsert {
public static void main(String[] args) {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConnection(); //獲取數據庫連接
st = conn.createStatement(); //獲得SQL的執行對象
//編寫sql語句
String sql = "INSERT INTO users(id,`NAME`,`PASSWORD`,`email`,`birthday`)" +
"VALUES(4,'zhangsan','123456','[email protected]','2020-01-01')";
int i = st.executeUpdate(sql);
if (i>0){
System.out.println("插入成功!");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtils.release(conn,st,rs);
}
}
}
常用對象
- DriverManager
管理一組 JDBC 驅動程序的基本服務
//註冊驅動
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//固定寫法,加載驅動
Class.forName("com.mysql.jdbc.Driver");
//連接
Connection connection = DriverManager.getConnection(url, username, password);
//事務滾回
connection.rollback();
//事務提交
connection.commit();
//數據庫設置自動提交
connection.setAutoCommit();
- URL
mysql :" jdbc:mysql://主機地址:端口號(3306)/數據庫名?參數1&參數2&參數3 "
String url = "jdbc:mysql://localhost:3306/jdbcstudy? useUnicode=true&characterEncoding=utf8&useSSL=true";
- Statement
執行SQL 的對象
statement.executeQuery(sql); //查詢操作返回 ResultSet
statement.execute(); //執行任何SQL
statement.executeUpdate(); //更新、插入、刪除。返回一個受影響的行數
- ResultSet
查詢的結果集:封裝了所有的查詢結果
// 在不知道列類型的情況下使用
resultSet.getObject();
// 知道列的類型就使用指定的類型
resultSet.getString();
resultSet.getInt();
resultSet.getFloat();
resultSet.getDate();
resultSet.getObject();
...
遍歷、指針
resultSet.beforeFirst(); //移動到前面
resultSet.afterLast(); //移動到後面
resultSet.next(); //移動到下一個數據
resultSet.previous(); //移動到前一行
resultSet.absolute(row); //移動到指定行
- 釋放資源
耗費資源,用完關掉
resultSet.close();
statement.close();
connection.close();
statement對象詳述:
- 概述:JDBC中的statement對象用於向數據庫發送SQL語句,想完成對數據庫的增刪改查,通過這個對象向數據庫發送增刪改查語句即可。
- Statement.executeUpdate方法,用於向數據庫發送增、刪、改的sql語句,executeUpdate執行完後,將會返回一個整數(即增刪改語句導致了數據庫幾行數據發生了變化);
Statement.executeQuery方法用於向數據庫發送查詢語句,executeQuery方法返回代表查詢結果的 ResultSet對象。 - CRUD操作(creat、read、update、delete)
- creat:數據添加操作
Statement st = conn.createStatement();
String sql = "insert into user(….) values(…..) ";
int num = st.executeUpdate(sql);
if(num>0){
System.out.println("插入成功!");
}
- read:數據查詢操作
Statement st = conn.createStatement();
String sql = "select * from user where id=1";
ResultSet rs = st.executeQuery(sql);
while(rs.next()){
//根據獲取列的數據類型,分別調用rs的相應方法映射到java對象中
}
- update:數據修改操作
Statement st = conn.createStatement();
String sql = "update user set name='' where name=''";
int num = st.executeUpdate(sql);
if(num>0){
System.out.println(“修改成功!");
}
- delete:數據刪除操作
Statement st = conn.createStatement();
String sql = "delete from user where id=1";
int num = st.executeUpdate(sql);
if(num>0){
System.out.println(“刪除成功!");
}
// 下篇再見…謝謝