JavaWeb研究ノート7:メタデータとDBUtilsの内部の仕組みを探ります

1 - メタデータを学習

メタデータ
Meata data
SQL文字列であり、メタデータと呼ばれるデータを記述するデータのこの文字列、:
数据库元数据 DatabaseMetaData
参数元数据 ParameterMetaData
结果集元数据 ResultSetMetaData
ParameterMetaData Anは使用:
内部DBUtils実装原理を、充填サイクルを使用してパラメータps.setObject()メソッドは、パラメータの数が実現されます配列の長さ。一部の列の更新と完了するために必要な他の動作パラメータ、ユーザー渡されたパラメータが(多かれ少なかれ疑問符よりパラメータ)疑問符に対応していない場合、それはエラーを実行します:Parameter index out of range (3 > number of parameters, which is 2)
このエラーParameterMetaDataの問題を解決するために使用することができ、特定の使用ここに方法は次のとおりです。

ParameterMetaData pmd = ps.getParameterMetaData();	//ps要先装载sql语句
int count = pmd.getParameterCount();	//count为sql语句中?长度
内部2-アナログ実装の更新及び書類を検索します

以下は、内部の更新カスタムコードの原理です。

public void updateUtil(String sql,Object ...args){
	MyDataSource ds = new MyDataSource();
	Connection conn = null;
	PreparedStatement ps = null;
	ParameterMetaData pmd = null;	//利用到了元数据
	try {
		conn = ds.getConnection();
		ps = conn.prepareStatement(sql);
		pmd = ps.getParameterMetaData();
		int count = pmd.getParameterCount();	//得到sql语句中的参数数量
		if(count==args.length)
		for (int i = 0; i < args.length; i++) {
			ps.setObject((i+1), args[i]);
		}
		ps.executeUpdate();
	} catch (SQLException e) {
		e.printStackTrace();
	} finally{
		try {
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

内部原則を見つけるために、次のカスタムコード:

public <T> T queryUtil(String sql,ResultSetHandler<T> rsh,Object ...args){
	T handle = null;
	MyDataSource ds = new MyDataSource();
	Connection conn = null;
	PreparedStatement ps = null;
	ResultSet rs = null;
	try {
		conn = ds.getConnection();
		ps = conn.prepareStatement(sql);
		rs = ps.executeQuery(sql);
		while(rs.next()){
			handle = (T)rsh.handle(rs);
		}
	} catch (SQLException e) {
		e.printStackTrace();
	} finally{
		try {
			JDBCUtil_old.closeAll(rs, ps, conn);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	return handle;
}

以下は、テストクエリ機能コードです:

public void queryTest(){
	DBUtilsInnerImplement db = new DBUtilsInnerImplement();
	ArrayList<Account> list = (ArrayList<Account>) db.queryUtil("select * from account", new ResultSetHandler<List<Account>>() {
		@Override
		public List<Account> handle(ResultSet arg0) throws SQLException {
			List<Account> list = new ArrayList<Account>();
			while(arg0.next()){
				Account account = new Account();
				String name = (String) arg0.getObject("name");
				int money = (int) arg0.getObject("money");
				account.setName(name);
				account.setMoney(money);
				list.add(account);
			}
			return list;
		}
	});
	for (Account account : list) {
		System.out.println(account.toString());
	}
}

クエリパラメータ(SQL文、ResultSetHandler RSH、オブジェクト...引数)のDBUtils
Tは、一般的なrshのあるすべてのタイプがパラメータとして渡される可能性があるということです。したがって、一般的な方法は修飾も有する
Tを-修飾ジェネリッククラスと、クラスの全てのメソッドは、一般的に使用することができます。しかし、場合によっては唯一の方法に変更することができます
クエリメソッドResultSetHandlerは、ユーザーが独自に定義することができます難易嘘の原則焦点(ハンドラここでは最大のインタフェースである)、定義されている
ので、一般的なクエリ方法により、対応するデータとリターンのタイプを決定することができた後、引数として

3-JSP開発者モードとMVCモデル

ここでは、2つのモードでの二つの絵によって、簡単な紹介:
JSP開発者モード
MVCパターン
2つのモードがよりよく理解され、学生管理システムはまた、MVCパターンを使用する前に、はっきりMVCはあなたのコードのルックスは非常に厄介させることなく、あなたの労働者の明確な区分をすることができますおよび改訂または更新時にノー開始。
特定の参照:終了を発表!学生管理システムの紆余曲折の後

HPF-自己概要

  それのその部分は、コンテンツの多くが、内容のほとんどは、その上に上記のブログの記事のように直視され、包括的なケース管理システム上でやっています。
  ジェネリック医薬品の使用は、私はちょうどそれを考えるこのノートを読んだ後、私は本当に非常に一般的な感じ、柔軟性のあるバックは、この一般的なものについて可能な限り使用しようとします。
  さあ!

公開された15元の記事 ウォン称賛18 ビュー4572

おすすめ

転載: blog.csdn.net/oZuoShen123/article/details/105185227