1 Statement接口簡介
當獲取了java.sql.Connection接口對象之後,那麼其核心目的一定不是只爲了連接,而是爲了進行數據庫的操作,而進行數據庫的開發操作應該使用標準SQL語句來完成,所以需要有一個SQL的執行器,而這個執行器就可以利用Statement接口完成。
java.sql.Statement是JDBC之中提供的數據庫的操作接口,利用其可以實現數據的更新與查詢的處理操作,該接口定義如下:
public interface Statement extends Wrapper, AutoCloseable
該接口是AutoCloseable子接口,所以可以得出結論:每一次進行數據庫操作完成之後都應該關閉Statement操作,即一條SQL的執行一定是一個Statement接口對象,但是如果要想獲取Statement接口對象,那麼必須依靠Connection接口提供的方法:
(1)獲取Statement接口對象:Statement createStatement() throws SQLException
|——此時拋出的SQLException是JDBC數據開發之中的最大異常;
當獲取了Statement接口對象之後,就可以使用SQL進行處理了,而這裏面需要兩個方法的支持:
(1)數據更新處理(INSERT、UPDATE、DELETE):int executeUpdate(String sql) throws SQLException
(2)數據查詢處理(SELECT、統計查詢、複雜查詢):ResultSet executeQuery(String sql) throws SQLException
這兩個數據庫的操作方法裏面都需要接收SQL的字符串,也就是說Statement接口可以直接使用SQL語句實現開發。
2 Statement實現數據更新
在SQL語句之中數據的更新操作一共分爲三種:增加(INSERT)、修改(UPDATE)、刪除(DELETE)。Statement接口的最大特點是可以直接執行一個標準的SQL語句。
範例:實現數據的增加處理
(1)增加SQL語句:INSERT INTO 表名稱(字段,字段,…) VALUES(值,值,…);
package org.lks.demo;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class MySQLJDBCDemo {
private static final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/research_managerment?useSSL=true&serverTimezone=UTC";
private static final String DATABASE_USER = "root";
private static final String DATABASE_PASSWORD = "19990821";
public static void main(String[] args) throws Exception{
String sql = " INSERT INTO PERSON_INFO_TABLE(id,name,dateofbirth,idnumber,placeoforigin) "
+ " VALUES(1000, 'LKS', DATE('1996-10-15'), '123456199610153546', '河南') ";
Connection conn = null;
Class.forName(DATABASE_DRIVER);
conn = DriverManager.getConnection(DATABASE_URL, DATABASE_USER, DATABASE_PASSWORD);
Statement stat = conn.createStatement();
int num = stat.executeUpdate(sql);
System.out.println(num);
conn.close();
}
}
對於SQL語句而言,由於一般都比較長,所以一定要考慮換行編寫,一旦換行了,強烈建議在每個字符串的前後多追加一個空格(避免錯誤帶來的麻煩)。
範例:更新操作,在進行更新操作的時候一般都是做條件性的更新;
(1)更新的SQL語句:UPDATE 表名稱 SET 字段=值,… WHERE 更新條件;
package org.lks.demo;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class MySQLJDBCDemo {
private static final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/research_managerment?useSSL=true&serverTimezone=UTC";
private static final String DATABASE_USER = "root";
private static final String DATABASE_PASSWORD = "19990821";
public static void main(String[] args) throws Exception{
String sql = "UPDATE PERSON_INFO_TABLE SET id=1001,name='hhy' WHERE id=1000";
Connection conn = null;
Class.forName(DATABASE_DRIVER);
conn = DriverManager.getConnection(DATABASE_URL, DATABASE_USER, DATABASE_PASSWORD);
Statement stat = conn.createStatement();
int num = stat.executeUpdate(sql);
System.out.println(num);
conn.close();
}
}
範例:數據刪除
(1)刪除語法:DELETE FROM 表名稱 WHERE 刪除條件(s);
package org.lks.demo;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class MySQLJDBCDemo {
private static final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/research_managerment?useSSL=true&serverTimezone=UTC";
private static final String DATABASE_USER = "root";
private static final String DATABASE_PASSWORD = "19990821";
public static void main(String[] args) throws Exception{
String sql = "DELETE FROM PERSON_INFO_TABLE WHERE id=1001";
Connection conn = null;
Class.forName(DATABASE_DRIVER);
conn = DriverManager.getConnection(DATABASE_URL, DATABASE_USER, DATABASE_PASSWORD);
Statement stat = conn.createStatement();
int num = stat.executeUpdate(sql);
System.out.println(num);
conn.close();
}
}
數據修改裏面只需要考慮到不同的SQL語句即可,這也是Statement接口的最大特點(直接執行SQL語句) 。
3 Statement實現數據查詢
數據更新主要是接收其影響的數據行數,但是數據查詢就比較麻煩了,因爲查詢一定要將結果返回給程序,由程序來進行結果的處理,所以在Java裏面通過ResultSet接口來描述查詢結果。
範例:實現數據的查詢處理
package org.lks.demo;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class MySQLJDBCDemo {
private static final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/research_managerment?useSSL=true&serverTimezone=UTC";
private static final String DATABASE_USER = "root";
private static final String DATABASE_PASSWORD = "19990821";
public static void main(String[] args) throws Exception{
String sql = "SELECT ID,NAME,DATEOFBIRTH FROM PERSON_INFO_TABLE";
Connection conn = null;
Class.forName(DATABASE_DRIVER);
conn = DriverManager.getConnection(DATABASE_URL, DATABASE_USER, DATABASE_PASSWORD);
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery(sql);
while(rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
Date date = rs.getDate("dateofbirth");
System.out.println(id + " " + name + " " + date.toString());
}
conn.close();
}
}
需要注意的是,ResultSet對象是保存在內存之中的,如果說你查詢數據的返回結果過大,那麼程序也將出現問題。