如何使用SQLite从SQLException或PreparedStatement获取结果代码

时间:2015-03-16 14:39:34

标签: java jdbc sqlexception

我正在构建REST API,并正在努力将正确的状态代码返回给客户端。我有一个SQLite数据库并创建了一个这样的表:

CREATE TABLE views(id INTEGER PRIMARY KEY AUTOINCREMENT, name varchar(10) UNIQUE NOT NULL, data varchar(10) NOT NULL)

与数据库的连接正常。我也可以在表中添加一个视图实体。当我运行prepStmnt.execute()以添加另一个视图与相同名称作为第一个视图时,我得到了一个预期的SQLException(因为name是唯一的)。

由于此方法可能因多种原因而抛出SQLException,因此我希望能够知道原因何时是约束违规,因此我可以将HTTP状态代码409 Conflict返回给客户端。我尝试通过打印getErrorCode()和getMessage():

来做到这一点
catch(SQLException e)
{
    System.out.println(e.getErrorCode() + ": " + e.getMessage());
}
  

0:[SQLITE_CONSTRAINT]因违反约束而中止(列名不唯一)

正如您所看到的,我得到的错误代码为0.根据SQLite文档,结果代码0表示正常。 https://www.sqlite.org/rescode.html

相反,我应该为SQLITE_CONSTRAINT获取代码19。该消息似乎是正确的,但我宁愿不解析该消息。在SQLite中,错误代码是结果代码的子集,JDBC是否考虑到这一点或错误代码完全不同?如何从SQLException或预准备语句中获取结果代码?

0 个答案:

没有答案