blog

異なるテーブルに対するjdbcクエリのカプセル化

ジェネリック+リフレクションによる実装...

Nov 23, 2020 · 2 min. read

ジェネリックス+リフレクションによる実装

// 異なるテーブルに対するジェネリッククエリ:オブジェクトを返す(バージョン1.0)
	public <T> T getInstance(Class<T> clazz, String sql, Object... args) {
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			// 1.データベース接続を取得する
			conn = JDBCUtils.getConnection();
			// 2.PreparedStatementオブジェクトを取得するためにSQL文をプリコンパイルする
			ps = conn.prepareStatement(sql);
			// 3.プレースホルダを埋める
			for (int i = 0; i < args.length; i++) {
				ps.setObject(i + 1, args[i]);
			}
			// 4.executeQuery()を実行し、結果セットを取得する: ResultSet
			rs = ps.executeQuery();
			// 5.結果セットのメタデータを取得する: ResultSetMetaData
			ResultSetMetaData rsmd = rs.getMetaData();
			// 6.1ResultSetMetaDataでcolumnCount,columnLabelを取得する。
			int columnCount = rsmd.getColumnCount();
			if (rs.next()) {
				T t = clazz.newInstance();
				for (int i = 0; i < columnCount; i++) {// 各列を繰り返し処理する
					// 列の値を取得する
					Object columnVal = rs.getObject(i + 1);
					// カラムのエイリアスを取得する:カラムのエイリアスを使用し、クラスのプロパティ名を
					String columnLabel = rsmd.getColumnLabel(i + 1);
					// 6.2リフレクションを使用して、オブジェクトの対応するプロパティに値を割り当てる
					Field field = clazz.getDeclaredField(columnLabel);
					field.setAccessible(true);
					field.set(t, columnVal);
				}
				return t;
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 7.リソースを閉じる
			JDBCUtils.closeResource(conn, ps, rs);
		}
		return null;
	}
Read next

クロス・マーケット・アービトラージの運用方法

クロスマーケットアービトラージは、暗号資産市場における最も初期のアービトラージ戦略であり、「ムービングブリック」とも呼ばれ、その主な原理は、異なる市場間の同じコインの価格差を通じて収入を得るために、安く買って高く売ることです。 統計によると、デジタル通貨の数は5,154コインに達し、デジタル通貨取引所の数は20,636に達し、そのほとんどが1日24時間取引されています。

Nov 23, 2020 · 2 min read

NIO入門

Nov 22, 2020 · 2 min read

DVWAを配置する

Nov 22, 2020 · 1 min read