富豪的SQLの実例

http://d.hatena.ne.jp/rokugen/20070625#1182754549
http://d.hatena.ne.jp/aufheben/20070624/1182708030
はてなRSS巡回先で微妙に盛り上がってるので、微妙に反応してみる。ただし、SQLレッスンの趣旨からちょっと離れるだろうけど。
流れ的にはid:aufheben氏の「解答3」だったりid:rokugen氏の後者だったりに近いんだけど、思いっきり富豪的にこうしてしまうかも。

	String sql1 = "SELECT * FROM Prefecturals\n";
	ResultSet rs = connection.createStatement().executeQuery(sql1);
	
	while(rs.next()){
		String prefecturalID = rs.getString("PrefecturalID");
		String prefecturalName = rs.getString("PrefecturalName");
		int count = 0;
		
		String sql2 = "SELECT COUNT(*) as count FROM Customers\n" +
			"WHERE PrefecturalID = '" + prefecturalID + "'";
		ResultSet rs2 = connection.createStatement().executeQuery(sql2);
		
		if(rs2.next()){
			count = rs2.getInt("count");
		}
		
		//以下、諸々
	}
		//以下、諸々

メリットは

  • SQL1発行とSQL2発行を外に出すと使い回せる
    • オブジェクト化しやすい
  • 可読性がよい(と思う。コードとしては案外素直じゃないですか?)

の2点でしょうか。
デメリットはダントツ遅さでしょうが、この例だとSQL1の結果は50件もないですし、案外気にならない程度に収まるかと。そのうち実測してみます。