java基礎的學習之引數的變化使用

jsjqjy發表於2009-12-15
public class 集合的例項化 {
	//map的例項化
	private static final HashMap<String,String> map = new HashMap<String,String>(){
	{
		put("one", "myGog");
		put("one1", "myGog");
		put("one2", "myGog");
		put("one3", "myGog");
	}
	};
	//java之多個引數的寫法 ,其實就是陣列的變形
	public void praseArgs(Object ... objects ){
		//參看java.lang.reflect.Method
		//java.lang.reflect.Constructor
		//這2個類的一些方法就可以看出來
		process(objects);
	}
	private void process(Object[] obj){
	}
	
	public static void main(String[] args) {
		System.out.println(map.get("one"));
	}
}

 一個是java中map的內部類例項化方式,一個是陣列變化形式的寫法。無聊中!!

 

 

引數型別的判斷

 

//有時候對預處理語句的引數的處理,我們可能需要判斷引數的型別
	private void processArgsData(PreparedStatement prepStmt, Object[] args) throws SQLException {
		if (prepStmt == null || args == null || args.length == 0) {
			return;
		}
		Object obj = null;
		int parameterIndex = 0;
		for (int i = 0; i < args.length; i++) {
			obj = args[i];
			parameterIndex = i + 1;
			if (obj instanceof String) {
				//字串型別處理
				prepStmt.setString(parameterIndex, obj.toString());
			} else if (obj instanceof Integer) {
				prepStmt.setInt(parameterIndex, 整型處理(obj));
			} else if (obj instanceof Long) {
				prepStmt.setLong(parameterIndex, 長整型處理(obj));
			} else {
				//Object型別處理
				prepStmt.setObject(parameterIndex, obj);
			}
		}
	}

 下面模擬spring中 JDBC或者 Hibernate處理查詢的方式

/**
	 * 
	 * @param sql 預處理sql
	 * @param args 引數,用於預處理用
	 * @param rch RowCallbackHandler 使用者實現的介面
	 * @throws BaseException
	 */
	public final void query (String sql, Object[] args, RowCallbackHandler rch) throws BaseException {

		PreparedStatement pst = null;
		ResultSet rs = null;
		try {
			//根據sql得到預處理語句
			pst = this.prepareStatement(sql);
			//處理引數
			this.processArgsData(pst, args);

			rs = pst.executeQuery();
			while (rs.next()) {
				//使用者呼叫自己實現處理結果集的方法 processRow 
				rch.processRow(rs);
			}
		} catch (Exception e) {
			this.closeResultSet(rs);
			this.closePreStatement(pst);
		}
	}

 

我們怎麼呼叫呢?

 

this.query(sql.toString(), null, new RowCallbackHandler() {

	public void processRow (ResultSet rs) throws SQLException {
                                    / /對查詢出來的結果集進行處理
			
			}
		});

 其中RowCallbackHandler是個介面:我們可以自己定義的,其實這個就是匿名內部類的使用,在spring中,到處可以看見的

相關文章