JDBC---用Java操作資料庫
阿新 • • 發佈:2021-01-21
什麼是JDBC
Java database connectivity——Java資料庫連結,Java語言操作資料庫。
資料庫驅動----資料庫廠商提供的可以和Java連結的介面。
jdbc是官方定義的一套操作所有關係型資料庫的規則,即介面,各個資料庫廠商實現介面,
提供資料庫驅動jar包,通過JDBC程式設計,真正執行程式碼的是驅動的jar包中的程式。
JDBC快速入門
import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; /** * JDBC快速入門 * */ public class JDBCDemo1 { public static void main(String[] args) throws Exception { //1.匯入jar包---mysql-connector-java-8.0.13 /* 建立目錄 方便管理 第三方庫 新建目錄 轉為 庫 將jar包複製到專案的目錄檔案下 */ //2.註冊驅動 Class.forName("com.mysql.jdbc.Driver"); //3.獲取資料庫連線物件 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "15367485979"); //4.定義一個SQL語句 String sql = "update mytable set score = 500 where ages =5"; //5.執行SQL物件 statement Statement statement = conn.createStatement(); //6執行sql int count = statement.executeUpdate(sql); //7.處理結果 System.out.println(count); //8.釋放資源 statement.close(); conn.close(); /* 如果報錯和時區有關的錯誤時,可以參考下面的部落格,親測有效 https://blog.csdn.net/manongxf/article/details/87615026 */ } }
JDBC 介面
**DriverManager; 驅動管理物件** 功能: 註冊驅動---告訴程式哪個資料庫驅動jar,MySQL5之後的jar包可以省略註冊驅動程式。 Class.forName("com.mysql.jdbc.Driver"); 通過檢視原始碼發現在com.mysql.jdbc.Driver類中存在靜態程式碼塊 ---註冊驅動部分程式碼; 獲取資料庫連線 Connection conn=DriverManager.getConnection ("jdbc:mysql://localhost:3306/db3", "root", "15367485979"); "jdbc:mysql://localhost:3306/db3"指定連結資料。 ------------------------------------------------------------------------------------------------------------- **Connection; 資料庫連結物件** 功能: 獲取執行SQL的物件 statement createstatement() preparedstatement preparestatement(string sql) 管理事務 開啟事務 setautocommit(boolean autocommit)引數為false 開啟事務 提交事務 commit() 回滾事務 rollback() ----------------------------------------------------------------------------------------------------------- **Statement; 執行SQL物件** int executeUpdate(string sql)執行DML(insert update delete)語句DDL(create alter drop)語句,返回值指影響的行數,即資料庫表中被修改的資料記錄條數。 Boolean execute(string sql)可以執行任意的SQL瞭解 resultset executequery(string sql)執行DQL(select)語句 ------------------------------------------------------------------------------------------------------ **ResultSet; 結果集物件** Boolean next()遊標向下移動一行 get資料型別:獲取資料(引數),引數為列名
// ResultSet rset=null;
rset= stat.executeQuery(sql2);
for (int i=0;i<5;i++){
//處理結果
//讓游標向下移動一行
rset.next();
//獲取資料
int value = rset.getInt(1);
int value2 = rset.getInt(2);
System.out.println(value+","+value2);}
利用返回值和while來進行遍歷
// ResultSet rset=null; rset= stat.executeQuery(sql2); boolean v=rset.next(); while(v){ //處理結果 //獲取資料 int value = rset.getInt(1); int value2 = rset.getInt(2); System.out.println(value+","+value2); //讓游標向下移動一行 v = rset.next(); }
---------------------------------------------------------------------------------------------------------
**PreparedStatement; 執行SQL的物件**
public static void main(String[] args) {
Connection conn=null;
Statement stat=null;
//註冊驅動
try {
Class.forName("com.mysql.jdbc.Driver");
//建立連結
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "15367485979");
//定義SQL
String sql = "insert into mytable value(5,6)";
//執行SQL
stat = conn.createStatement();
int s = stat.executeUpdate(sql);
boolean ss = stat.execute(sql);
if(s>0){
System.out.println("資料執行成功");
} else{
System.out.println("資料執行失敗");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
//避免空指標異常
if (stat!=null){
//關閉資源
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn!=null){
//關閉資源
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
編寫JDBC工具類
目的:簡化書寫
分析:
1.註冊驅動抽取
2.抽取一個方法獲取連結物件
3.釋放資源
工具類的實現
/**
* JDBC工具類
* 使用配置檔案傳遞引數
*/
public class JDBCUtils {
private static String url;
private static String user;
private static String password;
private static String driver;
static {//靜態程式碼塊 能夠使得在類載入的時候就獲取資料
//建立集合類
Properties pro = null;
try {
pro = new Properties();//集合類 基於雜湊表
//載入檔案
pro.load(new FileReader("utils\\jabc.properties"));
//獲取資料 賦值
url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
driver = pro.getProperty("driver");
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 獲取連結物件
* @return
*/
public static Connection getConnection(){
try {
Class.forName(driver);
return DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* 釋放資源
*/
public static void close(ResultSet rs,Statement stmt, Connection conn){
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}