JDBC學習筆記(四):執行SQL語句(Statement與PreparedStatement)

執行方法:使用Statement對象。

Statement簡介:

Statement是Connection對象返回的,提供了基本查詢的接口的類,一般用來執行簡單的、無參數的查詢語句。

執行稍微複雜的sql語句,一般選擇PreparedStatement,可以有效防止SQLInjection。

Statement對象的獲取:

	Statement stm = Connection.createStatement();

獲取stm對象後,便可以使用以下三種方法執行sql語句:

stm.executeQuery(String sql)用來執行DQL語句。

stm.executeUpdate(String sql)用來執行DML語句。

stm.execute(String sql)可以執行任何SQL語句,不過一般用來執行DDL語句。

例:根據ID查詢員工:

<span style="font-size:14px;">	public void testStatement(int empno){
		Connection con = null;
		try{
			con = DBUtil.getConnection();stm = con.createStatement(); 
			String sql = "SELECT * FROM emp WHERE empno="+empno;
			ResultSet rs = stm.executeQuery(sql); 
			while(rs.next()) 	//對結果集進行遍歷並輸出
			{System.out.println(rs.getString("name")+"..."+rs.getInt("empno"));}
		}catch(SQLExeption e){
		e.printStackTrack();
		throw new RuntimeException("查詢員工失敗",e); 
		}finally{ DBUtil.close(con);}}</span>



因爲Statement存在漏洞,容易發生SQLInjection,故複雜語句一般用PreparedStatement代替Statement

兩者用法不同:PreparedStatement在傳入sql語句時,用?代替變量,傳入後,會將整個sql語句進行分析後,再傳入其他參數執行語句。所以語義不會產生歧義,加強安全性。

PreparedStatement對象的獲取:

	PreparedStatement ps = con.prepareStatement();


例:使用PreparedStatement根據ID查詢員工:

<span style="font-size:14px;">	public void testPreparedStatement(){
		//假設傳入了部門ID
		int deptId = 1;
		
		try {
			Connection con = DBUtil.getConnection();
			
			String sql = "SELECT * FROM emps_zp WHERE deptno="+deptId;
			
			Statement stm = con.createStatement();
			/*
			 * 返回的結果集中包含多行多列數據,
			 * 該對象採用了迭代器模式,
			 * 因此可以直接while遍歷,
			 * 每次遍歷將得到一行數據,
			 * 再調用方法從這一行中取某列數據。
			 */
			ResultSet rs = stm.executeQuery(sql);
			
			while(rs.next()){
				System.out.println(rs.getInt("empno")+"..."+
											rs.getString("ename")+"..."+
											rs.getDouble("sal")+"..."+
											rs.getInt("deptno"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("查詢員工失敗",e);
		}
		
	}
	 </span>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章