Jdbc常用操作まとめ 2772 ワード 一、照会データベースからデータをクエリーする場合、jdbcを使用するには、SqlRowSet、Listなど、さまざまな方法があります.Listの使い方は以下の通りです.String sql = "SELECT * FROM TAB_TEST"; MapSqlParameterSource params = new MapSqlParameterSource(); List<Map<String, Object>> ret = this.namedParameterJdbcTemplate.queryForList(sql, params); Iterator<Map<String, Object>> iter = ret.iterator(); while (iter.hasNext()) { Map<String, Object> item = iter.next(); String dataId = (String)item.get("DATA_ID"); String dataName = (String)item.get("DATA_NAME"); // }上記のコードでは、OracleタイプをJavaタイプに変換すると、NUMBER->Integerなどのいくつかのタイプで例外が発生するという問題があります.SqlRowSetの使い方は以下の通りです.String sql = "SELECT * FROM TAB_TEST"; MapSqlParameterSource params = new MapSqlParameterSource(); SqlRowSet rs = this.namedParameterJdbcTemplate.queryForRowSet(sql, params); while (rs.next()) { try { String dataId = rs.getString("DATA_ID"); if(rs.wasNull) { dataId = null; } String dataName = rs.getString("DATA_NAME"); if(rs.wasNull) {// getXXX dataName = null; } // } catch (InvalidResultSetAccessException e) { e1.printStackTrace(); logger.error(e.getMessage()); } catch (SQLException e) { e1.printStackTrace(); logger.error(e.getMessage()); } } 上記のコードは、第1セグメントのコードにおける異常な問題を回避することができ、rs.getXXX(key)のみを使用し、その後のwasNull判断を行わないと、フィールドがnullであってもデフォルト値が得られる(この場合は有利で弊害があり、通常は弊害が利益より大きいと考えられる)、もう1つは、re.wasNullはgetXXXの後に呼び出され、そうでなければrs.wasNullは無効である.上記のコードの値取り部分をツールメソッドにカプセル化します.public static <T> T getDbValue(Class<T> type, T t, SqlRowSet rs) throws SQLException { return (rs.wasNull()) ? null : t; } 最適化されたコードは次のとおりです.String sql = "SELECT * FROM TAB_TEST"; MapSqlParameterSource params = new MapSqlParameterSource(); SqlRowSet rs = this.namedParameterJdbcTemplate.queryForRowSet(sql, params); while (rs.next()) { try { String dataId = getDbValue(String.class, rs.getString("DATA_ID"), rs); String dataName = getDbValue(String.class, rs.getString("DATA_NAME"), rs); // } catch (InvalidResultSetAccessException e) { e1.printStackTrace(); logger.error(e.getMessage()); } catch (SQLException e) { e1.printStackTrace(); logger.error(e.getMessage()); } } 全体的な感覚では、SqlRowSetを使用するとListより優れています. ダイナミックSQL接続は注入を防ぐ 微信のウェブページの開発の検証とインタフェースの経験の共有を呼び出します