private Iterator<QueryRow> getResultData(final ResultSet resultSet) throws SQLException { Collection<QueryRow> result = new LinkedList<>(); while (resultSet.next()) { List<Object> rowData = new ArrayList<>(columnLabelAndIndexMap.size()); for (int columnIndex = 1; columnIndex <= resultSet.getMetaData().getColumnCount(); columnIndex++) { rowData.add(resultSet.getObject(columnIndex)); } result.add(new QueryRow(rowData)); } return result.iterator(); }
/** * 用于获取 Db.save(tableName, record) 以后自动生成的主键值,可通过覆盖此方法实现更精细的控制 * 目前只有 PostgreSqlDialect,覆盖过此方法 */ public void getRecordGeneratedKey(PreparedStatement pst, Record record, String[] pKeys) throws SQLException { ResultSet rs = pst.getGeneratedKeys(); for (String pKey : pKeys) { if (record.get(pKey) == null || isOracle()) { if (rs.next()) { record.set(pKey, rs.getObject(1)); // It returns Long for int colType for mysql } } } rs.close(); }
pstmt = cn.prepareStatement( "select id, geom from geomtest where type = ? order by id" ); pstmt.setString( 1, type ); results = pstmt.executeQuery(); while ( results.next() ) { Integer id = results.getInt( 1 ); Object obj = results.getObject( 2 ); map.put( id, obj ); try { if ( results != null ) { results.close();
@Override public void run(Connection conn) throws Exception { try (PreparedStatement stmt = conn.prepareStatement("SELECT 'zzz'")) { ResultSet rs = stmt.executeQuery(); rs.next(); rs.getObject(1, List.class); } } }, "0700B", "Cannot convert to");
@Test public void testQueryForListWithParamMap() throws Exception { given(resultSet.getMetaData()).willReturn(resultSetMetaData); given(resultSet.next()).willReturn(true, true, false); given(resultSet.getObject(1)).willReturn(11, 12); MapSqlParameterSource params = new MapSqlParameterSource(); params.addValue("id", 3); List<Map<String, Object>> li = template.queryForList( "SELECT AGE FROM CUSTMR WHERE ID < :id", params); assertEquals("All rows returned", 2, li.size()); assertEquals("First row is Integer", 11, ((Integer) li.get(0).get("age")).intValue()); assertEquals("Second row is Integer", 12, ((Integer) li.get(1).get("age")).intValue()); verify(connection).prepareStatement("SELECT AGE FROM CUSTMR WHERE ID < ?"); verify(preparedStatement).setObject(1, 3); }
@Test(expected = TypeMismatchDataAccessException.class) // SPR-16483 public void doesNotUseConversionService() throws SQLException { SingleColumnRowMapper<LocalDateTime> rowMapper = SingleColumnRowMapper.newInstance(LocalDateTime.class, null); ResultSet resultSet = mock(ResultSet.class); ResultSetMetaData metaData = mock(ResultSetMetaData.class); given(metaData.getColumnCount()).willReturn(1); given(resultSet.getMetaData()).willReturn(metaData); given(resultSet.getObject(1, LocalDateTime.class)) .willThrow(new SQLFeatureNotSupportedException()); given(resultSet.getTimestamp(1)).willReturn(new Timestamp(0)); rowMapper.mapRow(resultSet, 1); }
private static void assertColumnSpec(ResultSet rs, int jdbcType, Long columnSize, Long numPrecRadix, Long decimalDigits, Long charOctetLength, Type type) throws SQLException { String message = " of " + type.getDisplayName() + ": "; assertTrue(rs.next()); assertEquals(rs.getObject("DATA_TYPE"), (long) jdbcType, "DATA_TYPE" + message); assertEquals(rs.getObject("COLUMN_SIZE"), columnSize, "COLUMN_SIZE" + message); assertEquals(rs.getObject("NUM_PREC_RADIX"), numPrecRadix, "NUM_PREC_RADIX" + message); assertEquals(rs.getObject("DECIMAL_DIGITS"), decimalDigits, "DECIMAL_DIGITS" + message); assertEquals(rs.getObject("CHAR_OCTET_LENGTH"), charOctetLength, "CHAR_OCTET_LENGTH" + message); }
public List<Map> selectByParams(String sql, List params) throws SQLException { List<Map> list = new ArrayList<> (); int index = 1; pstmt = conn.prepareStatement(sql); if (null != params && !params.isEmpty()) { for (int i = 0; i < params.size(); i ++) { pstmt.setObject(index++, params.get(i)); } } rs = pstmt.executeQuery(); ResultSetMetaData metaData = rs.getMetaData(); int colsLen = metaData.getColumnCount(); while (rs.next()) { Map map = new HashMap(colsLen); for (int i = 0; i < colsLen; i ++) { String columnName = metaData.getColumnName(i + 1); Object columnValue = rs.getObject(columnName); if (null == columnValue) { columnValue = ""; } map.put(columnName, columnValue); } list.add(map); } return list; }
/** * 解决 PostgreSql 获取自增主键时 rs.getObject(1) 总是返回第一个字段的值,而非返回了 id 值 * issue: https://www.oschina.net/question/2312705_2243354 * * 相对于 Dialect 中的默认实现,仅将 rs.getXxx(1) 改成了 rs.getXxx(pKey) */ public void getRecordGeneratedKey(PreparedStatement pst, Record record, String[] pKeys) throws SQLException { ResultSet rs = pst.getGeneratedKeys(); for (String pKey : pKeys) { if (record.get(pKey) == null || isOracle()) { if (rs.next()) { record.set(pKey, rs.getObject(pKey)); } } } rs.close(); } }
LOG.info( "Native SQL is: " + nativeSQLStatement.toString() ); results = preparedStatement.executeQuery(); while ( results.next() ) { int id = results.getInt( 1 ); switch ( type ) { case GEOMETRY: expected.put( id, (T) decode( results.getObject( 2 ) ) ); break; case STRING: expected.put( id, (T) results.getString( 2 ) ); break; case INTEGER: break; default: T val = (T) results.getObject( 2 ); if ( results != null ) { try { results.close();
try { rs = stmt.executeQuery("show variables"); while (rs.next()) { String name = rs.getString(1); Object value = rs.getObject(2); variables.put(name, value); try { rs = stmt.executeQuery("show global variables"); while (rs.next()) { String name = rs.getString(1); Object value = rs.getObject(2); globalVariables.put(name, value);
@Test public void testBuildSqlWithFloat() throws SQLException { TupleDomain<ColumnHandle> tupleDomain = TupleDomain.withColumnDomains(ImmutableMap.of( columns.get(10), Domain.create(SortedRangeSet.copyOf(REAL, ImmutableList.of( Range.equal(REAL, (long) floatToRawIntBits(100.0f + 0)), Range.equal(REAL, (long) floatToRawIntBits(100.008f + 0)), Range.equal(REAL, (long) floatToRawIntBits(100.0f + 14)))), false))); Connection connection = database.getConnection(); try (PreparedStatement preparedStatement = new QueryBuilder("\"").buildSql(jdbcClient, connection, "", "", "test_table", columns, tupleDomain, Optional.empty()); ResultSet resultSet = preparedStatement.executeQuery()) { ImmutableSet.Builder<Long> longBuilder = ImmutableSet.builder(); ImmutableSet.Builder<Float> floatBuilder = ImmutableSet.builder(); while (resultSet.next()) { longBuilder.add((Long) resultSet.getObject("col_0")); floatBuilder.add((Float) resultSet.getObject("col_10")); } assertEquals(longBuilder.build(), ImmutableSet.of(0L, 14L)); assertEquals(floatBuilder.build(), ImmutableSet.of(100.0f, 114.0f)); } }
@Test public void testQueryForMapWithParamMapAndSingleRowAndColumn() throws Exception { given(resultSet.getMetaData()).willReturn(resultSetMetaData); given(resultSet.next()).willReturn(true, false); given(resultSet.getObject(1)).willReturn(11); MapSqlParameterSource params = new MapSqlParameterSource(); params.addValue("id", 3); Map<String, Object> map = template.queryForMap("SELECT AGE FROM CUSTMR WHERE ID < :id", params); assertEquals("Row is Integer", 11, ((Integer) map.get("age")).intValue()); verify(connection).prepareStatement("SELECT AGE FROM CUSTMR WHERE ID < ?"); verify(preparedStatement).setObject(1, 3); }
@Test // SPR-16483 public void useDefaultConversionService() throws SQLException { Timestamp timestamp = new Timestamp(0); SingleColumnRowMapper<LocalDateTime> rowMapper = SingleColumnRowMapper.newInstance(LocalDateTime.class); ResultSet resultSet = mock(ResultSet.class); ResultSetMetaData metaData = mock(ResultSetMetaData.class); given(metaData.getColumnCount()).willReturn(1); given(resultSet.getMetaData()).willReturn(metaData); given(resultSet.getObject(1, LocalDateTime.class)) .willThrow(new SQLFeatureNotSupportedException()); given(resultSet.getTimestamp(1)).willReturn(timestamp); LocalDateTime actualLocalDateTime = rowMapper.mapRow(resultSet, 1); assertEquals(timestamp.toLocalDateTime(), actualLocalDateTime); }
public List resultSetToArrayList(ResultSet rs) throws SQLException{ ResultSetMetaData md = rs.getMetaData(); int columns = md.getColumnCount(); ArrayList list = new ArrayList(50); while (rs.next()){ HashMap row = new HashMap(columns); for(int i=1; i<=columns; ++i){ row.put(md.getColumnName(i),rs.getObject(i)); } list.add(row); } return list; }