【发布时间】:2011-04-15 07:42:06
【问题描述】:
我有通过执行 PreparedStatement 插入数据库表的 JDBC 代码。当我在内存 HSQLDB 数据库上运行代码时(作为 JUnit 测试的一部分),我得到一个 SQLFeatureNotSupportedException,唯一的信息是消息“不支持功能”和供应商代码 -1500。我正在做的是对表的基本插入——我无法想象最新的 HSQLDB 不支持这一点。
我的代码:
public Observations saveOrUpdate(final Observations observations)
{
try
{
if (connection == null)
{
connection = getJdbcTemplate().getDataSource().getConnection();
}
// create the prepared statement
String sql = "INSERT INTO " + Observations.TABLE_NAME +
" (OBS_YEAR, WINTER, SPRING, SUMMER, FALL, ANNUAL, DATA_TYPE, CREATED_DATE, UPDATED_DATE, " +
Observations.ID_COLUMN_NAME +
") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, observations.getYear());
preparedStatement.setBigDecimal(2, observations.getJan());
preparedStatement.setBigDecimal(3, observations.getFeb());
preparedStatement.setBigDecimal(4, observations.getMar());
preparedStatement.setBigDecimal(5, observations.getApr());
preparedStatement.setBigDecimal(6, observations.getMay());
preparedStatement.setString(7, observations.getDataType().toString());
preparedStatement.setTimestamp(8, new Timestamp(observations.getCreatedDate().getTime()));
preparedStatement.setTimestamp(9, new Timestamp(observations.getUpdatedDate().getTime()));
preparedStatement.setLong(10, observations.getId());
preparedStatement.executeUpdate(sql);
return observations;
}
catch (SQLException ex)
{
throw new RuntimeException(ex);
}
}
任何人都可以提出可能是什么问题或我应该进一步调查的其他问题吗?提前感谢您的帮助。
--詹姆斯
【问题讨论】:
-
尝试发布更多信息:异常日志、您的 HSQLDB 版本(可能是 2.0)、您的 java 版本等。我正在搜索以帮助您。估计是jre和你的hsqldb的兼容性问题。
-
非常感谢,艾托。我正在使用 HSQLDB 2.0 JAR 文件。我正在运行代码作为 JUnit 4 测试的一部分。我从使用 1.6 JRE 的 Eclise IDE 启动它。 DataSource 是使用 Spring 配置的,我从 Spring JdbcTemplate 获取连接,我已配置到包含此代码的 DAO 类中。
标签: java sql exception jdbc hsqldb