java - 当我尝试在 SQL Server 上执行此查询时,为什么会在日期字段上出现此错误?

标签 java sql sql-server sql-server-2008 rdbms

我发现尝试将此 SQL 查询(在 Microsoft SQL Server)执行到 Java 应用程序中时遇到一些困难。

所以我有这个方法来执行一个简单的选择查询:

public void insertOrUpdate_TIRConsolidatoPolizza(QS_TirPolizza qsTir) throws Exception {

    try{
        log.debug("PucManager.insertOrUpdate_TIRConsolidatoPolizza");

        // Reperisce i parametri della query dal parametro passato:
        String numeroPolizza = qsTir.getPolizzaid().toString();
        Long annoRiferimento = qsTir.getAnnoRiferimento();
        String dataRiferimentoNav = qsTir.getDataRiferimentoNav() != null ? "'"+qsTir.getDataRiferimentoNav()+"'" : null; 
        String timestamp = qsTir.getTimestamp() != null ? "'"+qsTir.getTimestamp()+"'" : null; 
        String sql = "select * from TirConsolidatoPolizza" +
                " where Polizzaid = " + numeroPolizza +
                " and DataRiferimentoNav = " + dataRiferimentoNav;

        log.debug("Query: " + sql);
        PreparedStatement ps = con.prepareStatement( sql );
        log.debug("Eseguo Query");
        ResultSet rs = ps.executeQuery();

        ...................................................
        ...................................................
        DO SOMETHING ELSE
        ...................................................
        ...................................................
}

String sql 变量值是(我看到它由 log.debug() 打印):

select * from TirConsolidatoPolizza where Polizzaid = 9999999999 and DataRiferimentoNav = 'Thu Jun 23 10:36:43 CEST 2016'

此查询无法运行,因为我的 DataRiferimentoNav 值似乎有问题。

我收到以下错误消息:

 10:42:41  [SELECT - 0 row(s), 0.000 secs]  [Error Code: 241, SQL State: S0001]  Conversion failed when converting date and/or time from character string.

DataRiferimentoNav(它是数据库表上的一个日期时间)值取自 qsTir.getDataRiferimentoNav() 对象字段代表日期的 String(我不能更改它),它是在我的代码的其他地方以这种方式设置的:

qsTir.setDataRiferimentoNav(new Date().toString());

那么,有什么问题吗?我错过了什么?我该如何解决这个问题并正确执行我的查询?

最佳答案

您需要正确设置日期格式才能被数据库理解:

Format formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formatted = formatter.format(qsTir.getDataRiferimentoNav());

理想情况下,您应该避免连接 SQL,因为这会导致您 SQL injection vulnerabilities .尝试使用 parameterized queries实现您的目标。

关于java - 当我尝试在 SQL Server 上执行此查询时,为什么会在日期字段上出现此错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37986660/

相关文章:

MySQL 子查询语法 + ZF2 语法

sql - 无法从表中删除 UNIQUE 索引

java - 在storm中使用字段分组时,已知字段值是否有限制或超时?

java - DefaultJwtParser : how to merely decode the JWT?(无秘钥,无验证)

sql - 当子查询什么都不返回时,如何使 0>All() 返回 false?

php - 如何从 SQL 中的引号中选择特定文本

sql - 使用 NULLIF 除以零

sql - 在不知道字符串长度的情况下删除额外的逗号

java - 在字符串中寻找标点符号,然后找到它们的索引来做一个子串

Java OOPS parking 场示例设计