1

SnappyData v.0-5 と ClientDriver JDBC ドライバー。

SnappyData に、sensor_data という名前の永続的な行テーブルがあります。

snappy> シェルから、このクエリは数千行を返します。

snappy> select * from sensor_data where year_num = 2013 and month_num = 1;

SpringBoot で JDBC 接続から実行すると、次のエラーが発生します。

PreparedStatementCallback; uncategorized SQLException for SQL [select * from sensor_data where year_num = ? および month_num = ?]; SQL 状態 [XCL14]; エラーコード [20000]; (SQLState=XCL14 Severity=20000) 列位置 '1' が範囲外です。この ResultSet の列数は「0」です。

Java コードは次のとおりです。

List<SensorData> list = jdbcTemplateBean.query("select * from sensor_data where year_num = ? and month_num = ?", 
                new Object[] {year, month},  new SensorDataRowMapper());

この JDBC の問題を解決するにはどうすればよいですか?

Spring ブートのトリミングされたスタック トレース:

org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [select * from sensor_data where year_num = ? および month_num = ?]; SQL 状態 [XCL14]; エラーコード [20000]; (SQLState=XCL14 Severity=20000) 列位置 '1' が範囲外です。この ResultSet の列数は '0' です。; ネストされた例外は java.sql.SQLException: (SQLState=XCL14 Severity=20000) 列の位置 '1' が範囲外です。この ResultSet の列数は「0」です。org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84) で org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) で org.springframework. (SQLState=XCL14 Severity=20000) 列位置 '1' が範囲外です。この ResultSet の列数は「0」です。... 原因: エラー XCL14: 列位置 '1' が範囲外です。この ResultSet の列数は「0」です。com.pivotal.gemfirexd.internal.client.am.ColumnMetaData.checkForValidColumnIndex(ColumnMetaData.java:856) で com.pivotal.gemfirexd.internal.client.am.ColumnMetaData.getColumnType(ColumnMetaData.java:638) ... 72もっと

4

2 に答える 2

1

スタックからは、NamedParameterJdbcTemplateが使用されているように見えますが、'?' プレースホルダーが使用されています。NamedParameterJdbcTemplateの場合、 hereのような名前付きパラメーターを使用する必要があります

標準の「?」を使用することをお勧めします。次のようなJdbcTemplateを使用したプレースホルダーメカニズム:

private JdbcTemplate jdbcTemplateBean;

public void setDataSource(DataSource dataSource) {
  this.jdbcTemplateBean = new JdbcTemplate(dataSource);
}

List<SensorData> list = jdbcTemplateBean.query(
    "select * from sensor_data where year_num = ? and month_num = ?",
    new Object[] { year, month },  new SensorDataRowMapper());
于 2016-07-27T06:59:31.093 に答える