前面介紹瞭如何經過JDBC獲取數據庫鏈接,但是Connection對象不能直接執行SQL語句,須要引入Statement報告對象才能操做SQL。Statement對象由Connection的createStatement方法得到,它主要提供了下列兩個方法:
executeUpdate:執行數據庫的管理語句,主要包含建表、改表結構、刪表、增長記錄、修改記錄、刪除記錄等等。它的返回值是整型,存放着當前語句的操做記錄數量,例如刪除了多少條記錄、更新了多少條記錄等。
executeQuery:執行數據庫的查詢語句,專用於select命令。它的返回值是ResultSet類型,查詢的結果集可經由ResultSet對象獲得。
對於管理類型的SQL指令來講,完整的操做過程分紅如下三個步驟:
一、獲取數據庫鏈接:該步驟調用DriverManager類的getConnection方法得到鏈接對象。
二、建立該鏈接的執行報告:該步驟調用Connection對象的createStatement方法得到執行報告。
三、命令報告執行SQL語句:該步驟調用報告對象的executeUpdate方法來執行SQL語句。
把以上的三步驟串聯起來,便獲得了下面的數據庫操做模板:html
// 先獲取數據庫鏈接,再建立該鏈接的執行報告 try (Connection conn = DriverManager.getConnection(dbUrl, dbUserName, dbPassword); Statement stmt = conn.createStatement()) { String sql = "這裏是待執行SQL語句"; stmt.executeUpdate(sql); // 執行處理語句 // createTable(stmt); // 建立表格 // insertRecord(stmt); // 插入記錄 // updateRecord(stmt); // 更新記錄 } catch (SQLException e) { e.printStackTrace(); }
接下來看幾個具體的SQL執行例子,首先建立一張名叫teacher的新表,則編寫以下所示的建表代碼:sql
// 建立表格 private static void createTable(Statement stmt) throws SQLException { String sql = "create table teacher (" // 建表語句 + " gonghao INT NOT NULL," + " name VARCHAR(32) NOT NULL," + " birthday DATE NULL," + " sex INT NOT NULL," + " course VARCHAR(32) NOT NULL," + " PRIMARY KEY (gonghao))" + "comment = '教師信息表';"; int count = stmt.executeUpdate(sql); // 執行處理語句 System.out.println("建表語句的返回結果爲"+count); }
在以前的try代碼內部調用createTable方法,運行測試程序後觀察到如下的輸出日誌。數據庫
建表語句的返回結果爲0
因爲建表語句自己沒有影響任何記錄,所以executeUpdate方法在建表之時返回了0。接着打開MySQL的工做臺,就能在工做臺左側看到如圖所示的teacher表了。測試
建好了表,還要往裏面添加幾條記錄,因而編寫下面的插表代碼:日誌
// 插入記錄 private static void insertRecord(Statement stmt) throws SQLException { List<String> sqlList = Arrays.asList( // 如下每一個語句插入一條記錄 "insert into teacher (gonghao, name, birthday, sex, course) VALUES ('1', '張老師', '1983-03-03', 1, '語文')", "insert into teacher (gonghao, name, birthday, sex, course) VALUES ('2', '李老師', '1984-04-04', 0, '數學')", "insert into teacher (gonghao, name, birthday, sex, course) VALUES ('3', '王老師', '1985-05-05', 1, '英語')", "insert into teacher (gonghao, name, birthday, sex, course) VALUES ('4', '趙老師', '1986-06-06', 0, '物理')", "insert into teacher (gonghao, name, birthday, sex, course) VALUES ('5', '劉老師', '1987-07-07', 1, '化學')"); for (String sql : sqlList) { int count = stmt.executeUpdate(sql); // 執行處理語句 System.out.println("添加記錄語句的返回結果爲"+count); } }
一樣在try代碼中調用insertRecord方法,運行測試程序觀察到下列的日誌文本。htm
添加記錄語句的返回結果爲1 添加記錄語句的返回結果爲1 添加記錄語句的返回結果爲1 添加記錄語句的返回結果爲1 添加記錄語句的返回結果爲1
由於每一個insert語句插入一條記錄,因此executeUpdate在插表時返回的數量是1。回到工做臺查詢teacher表的全部記錄,便能看到如圖所示的五條記錄。對象
而後準備修改記錄字段,讓全部女老師去教英語,則包含update語句的方法代碼以下所示:blog
// 更新記錄 private static void updateRecord(Statement stmt) throws SQLException { String sql = "update teacher set course='英語' where sex='1'"; // 記錄更新語句 int count = stmt.executeUpdate(sql); // 執行處理語句。返回被更新的記錄數量 System.out.println("更新記錄語句的返回結果爲"+count); }
在try代碼中調用updateRecord方法,運行測試程序後觀察到如下的日誌信息。開發
更新記錄語句的返回結果爲3
由日誌可見,這個update語句更新了三條數據庫記錄,於是executeUpdate方法此時的返回值爲3。回到MySQL工做臺,從新查詢teacher表,此時的記錄結果如圖所示,果真三個女老師的任教課程都變爲英語了。get
更多Java技術文章參見《Java開發筆記(序)章節目錄》