Javaは、データベース結果セットResultSetに指定されたカラム名があるかどうかを判断します.

1789 ワード


最近最もプロジェクト、プロジェクトの持続化部分はspring jdbcを使って、クエリーの結果セットはオブジェクトにマッピングして、毎回SQLをクエリーする方法の中で私有のmapper変数を定義して、内部はmapRow方法を実現して、少し浪費しているようで、1つの共通のmapRow実現を定義して、コードを節約して、メンテナンスを便利にしたいと思っています.
書く過程で、大きなオブジェクトに関連し、属性が非常に多いが、検索するたびに属性が異なるという共通mapRowはどのように書くのか、結果セットにある属性があるかどうかによって、マッピングされ、ないものはマッピングされないのではないかという問題を発見しました.
   
すぐにjdk apiをめくってResultSetを見つけて、探してまた探して、相応の方法が見つかりませんでした.
しかしjdkには、利用できる方法があります.どんな方法ですか.
findColumn
int findColumn(String columnLabel)
               throws SQLException     ResultSet         ResultSet    。 

  :
    columnLabel -    SQL AS         。      SQL AS   ,        
  :
              
  : 
    SQLException -    ResultSet          columnLabel   ,                        

ResultSetのfindColumnメソッドは、指定したカラム名の結果セットのインデックスを返し、インデックス値は1から始まります.
戻り結果セットにid,name,ageが順次含まれると,
findColumn("id") // 1

findColumn("name") // 2

findColumn("age") // 3

findColumnで存在しないカラム名を検索した場合、どうなりますか?SQLExceptionを放出します.
ここで紹介する方法はfindColumnとSQLExceptionを組み合わせて構成する方法です.
	/**
	 *               
	 * @param rs      
	 * @param columnName   
	 * @return true   ; false    
	 */
	public boolean isExistColumn(ResultSet rs, String columnName) {
		try {
			if (rs.findColumn(columnName) > 0 ) {
				return true;
			} 
		}
		catch (SQLException e) {
			return false;
		}
		
		return false;
	}


   
if条件内、
rs.findColumn(columnName)>0、ResultSet結果セットのカラムインデックスは1から始まり、配列とlistとは異なる0から始まるので、カラムが見つかった場合、そのインデックス値は必ず0より大きい.見つかっていなければSQLException異常が投げ出されますが、ここではこのSQLException異常を利用し、異常ブロックに入るとその列が見つからないことを説明し、falseに戻るだけでいいです.
このようにmapRowでは,複数の属性の場合,そのResultSetでその列がクエリされたか否かを判断するたびに,クエリが出たらマッピングを行い,クエリが出なければ具体的なことを行わず,mapRowをよりよく共用することができる.