【JDBC4.2】三、Statements

數據庫localhost:3306
DBname: test
表:student
這裏寫圖片描述


本編博客包括Statement接口,以及它的子接口PreparedStatement和CallableStatement

Statement接口

Statement的獲取

public class StatementTest {
    public static void main(String[] args) throws SQLException {
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?serverTimezone=UTC", 
                                                            "root", "123456");
        Statement statement = connection.createStatement();

    }
}

Statement的執行方法

如果是SQL查詢語句,使用executeQuery()方法,返回一個ResultSet對象。
如果是DDL語句,修改性質的DML語句,使用executeUpdate(),返回修改的行數。
如果SQL語句未知,則使用execute()方法。

SQL語句類型 備註 Statement方法
查詢語句 SELECT executeQuery
修改語句 INSERT、UPDATE或DELETE以及SQL DDL語句 executeUpdate
返回多個ResultSet或多個UpdateCount或二者組合 存儲過程或未知SQL execute

executeQuery方法

用法如下:

//...獲取statement省略...

ResultSet resultSet = statement.executeQuery("SELECT id,name,age FROM student");

while (resultSet.next()){
   //todo ...
}

如果executeQuery執行的Sql沒有返回一個ResultSet 對象,比如statement.executeQuery("INSERT INTO student('ABC123','Jack',12)");,則會拋出SQLException

executeUpdate方法

int rows1 = statement.executeUpdate("UPDATE student SET age=17 WHERE name='Li'");
int rows2 = statement.executeUpdate("DELETE FROM student WHERE name='Sam'");
//...

如果executeUpdate返回一個ResultSet 對象,則會拋出SQLException

execute方法

execute方法應該僅在語句能返回多個ResultSet對象、多個更新計數或ResultSet對象與更新計數的組合時使用。當執行某個已存儲過程或動態執行未知 SQL 字符串(即應用程序程序員在編譯時未知)時,有可能出現多個結果的情況。
某些驅動可能不支持多個ResultSet,可以使用Connection#getMetaData()#supportsMultipleResultSets()查看是否支持。

關閉Statement

關閉Connection雖然會關閉它創建的所有Statement,但是一個良好的編程習慣是手動關閉Statement
關閉Statement則不會關閉它創建的ResultSet所持有的資源(ResultSet會關閉),直到GC。
最好的做法是依次關閉ResultSet,Statement,Connection

resultSet.close();
statement.close();
connection.close();
//完美!

PreparedStatement

PreparedStatement繼承自Statement,具有設置SQL參數的能力。SQL語句能夠被預編譯,並且使用多次。它可以在SQL語句中使用“?”代替參數,執行的時候再指定。

創建一個PreparedStatement,並設置參數

String sql= "insert into student(id,name,age) values(?,?,?)"; 
ps=conn.prepareStatement(sql);
ps.setString(1, "1234ABCD"); 
ps.setString(2, "Mary"); 
ps.setInt(3, 13); 

使用setObject

ps.setObject(1,21,java.sql.Types.SHORT)//轉換爲SHORT
ps.setObject(1,21)//轉換爲默認的java.sql.Types.INTEGER

設置NULL參數

ps.setNull(2,java.sql.Types.VARCHAR)//設置varchar類型的參數威null

輸出和輸入數據描述

使用prepareStatement#getMetaData獲取輸出信息

使用prepareStatement#getParameterMetaData獲取參數信息

CallableStatement

CallableStatement繼承自PreparedStatement,用來執行存儲過程並獲取結果。

發佈了111 篇原創文章 · 獲贊 158 · 訪問量 37萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章