Java開發筆記(一百四十七)經過JDBC管理數據庫

前面介紹瞭如何經過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開發筆記(序)章節目錄

相關文章
相關標籤/搜索