1. 程式人生 > >java連線資料庫後進行更新插入操作

java連線資料庫後進行更新插入操作

接上一次的查詢操作,這次將更新與插入的程式碼補充

首先是服務端的接收端,接收到客戶端的請求則傳送相應操作

					if ("1".equals(message)) {
						//從mysql資料庫倉庫中查詢資料
						jc.mysqlSelect("select * from cangku");
						
//						//從oracle資料庫訂單表中查詢資料
//						jc.oracleSelect("select * from freshbin_dingdan");
						
						//當oracle資料中連線不上時候,就從本地的mysql資料庫的訂單表獲取資料
						jc.mysqlSelectDingDan("select * from dingdan");
						
						//獲取訂單表與倉庫表比較後,數量不同的結果
						jc.writeIO();
						
						//將兩張表比較後的結果返回給客戶端
						os.write(jc.writeIO().toString().getBytes());
						os.flush();
					}
					
					//這是更新操作的功能程式碼
					if("2".equals(message)) {
						UpdateMySqlCangKuNumber umsck = new UpdateMySqlCangKuNumber();
						//將需要更新以及插入的資料傳送給客戶端
						StringBuffer sb = umsck.getUpdateInsertNumber();
						os.write(sb.toString().getBytes());
					}
					os.write(("請輸入1或2(1為查詢,2為更新):\n").getBytes());
				}


然後是獲取需要更新與插入的id與數量

// 執行查詢倉庫與訂單的語句,獲取需要更細與插入的商品編號與數量
	public void getNewNumber() {
		// 從mysql資料庫倉庫中查詢資料並儲存起來
		mysqlMap = jc.mysqlSelect("select * from cangku");

		// 從mysql資料庫訂單表中獲取資料並存儲起來
		mysqlDingDanMap = jc.mysqlSelectDingDan("select * from dingdan");

		// 獲取倉庫表的所有資料
		Set<Integer> mysqlSet = mysqlMap.keySet();

		// 獲取訂單表的資料
		Set<Integer> mysqlDingDanSet = mysqlDingDanMap.keySet();

		for (Integer mn : mysqlSet) {
			// 定義一個boolean型別的變數來表示當倉庫的商品編號在訂單表中不存在時,就設定為true
			boolean flag = true;

			for (Integer on : mysqlDingDanSet) {
				if (mn.intValue() == on.intValue()) {
					if (mysqlMap.get(mn).intValue() != mysqlDingDanMap.get(mn)
							.intValue()) {
						updateNewNumber.put(mn, mysqlMap.get(mn));
					}
					flag = false;
				}
			}
			// 當flag為true時,就把訂單表中沒有的商品編號存起來
			if (flag) {
				insertNewNumber.put(mn, mysqlMap.get(mn));
			}
		}
	}


接著是執行更新操作和插入操作,以及把結果以字串的形式傳送給客戶端

// 進行更新操作
	public void updateNumber() {
		// 執行查詢倉庫與訂單的語句,獲取需要更細與插入的商品編號與數量
		getNewNumber();
		// 獲取所有需要更新的商品編號
		Set<Integer> mysqlDingDanNumber = updateNewNumber.keySet();
		for (Integer i : mysqlDingDanNumber) {
			// 將需要更新的商品編號和數量更新到訂單表中
			jc.getMsPool().getUPstmt(
					"update dingdan set dingdannumber=? WHERE id=?", i,
					updateNewNumber.get(i));
		}
	}

	// 進行插入操作
	public void insertNumber() {
		// 獲取所有需要插入的商品編號
		Set<Integer> mysqlDingDanNumber = insertNewNumber.keySet();
		for (Integer i : mysqlDingDanNumber) {
			// 將需要插入的商品編號和數量插入到訂單表中
			jc.getMsPool().getUPstmt(
					"insert into dingdan(dingdannumber,id) values(?,?)", i,
					insertNewNumber.get(i));
		}
	}

	// 遍歷需要更新的資料,以字串形式儲存,以便將來發送給客戶端
	public StringBuffer getUpdateInsertNumber() {
		// 進行更新操作
		updateNumber();
		// 進行插入操作
		insertNumber();
		// 獲取所有需要更新的商品編號
		Set<Integer> mysqlDingDanNumber = updateNewNumber.keySet();

		for (Integer i : mysqlDingDanNumber) {
			SBUpdateNumber.append("更新了商品編號為:" + i + "的商品-----此次更新的數量為:"
					+ updateNewNumber.get(i) + "\r\n");
		}
		
		// 獲取所有需要插入的商品編號
		Set<Integer> mysqlDingDanInsertNumber = insertNewNumber.keySet();

		for (Integer i : mysqlDingDanInsertNumber) {
			SBUpdateNumber.append("插入了新的商品編號為:" + i + "的商品-----此次插入的數量為:"
					+ insertNewNumber.get(i) + "\r\n");
		}
		
		return SBUpdateNumber;
	}

最後,當然是上圖了


下面這張圖是我僅僅實現了更新功能時候的測試


然後是執行更新與插入的圖



這個小小的程式經過改了又改,雖然有點浪費時間,但是實現效果後,自己感覺還是挺開心的.....雖然已經很晚了,但是頓時感覺很清醒..........好,可以去睡覺了...........加油!,.......................