2014-11-01 75 views
0

失败的SQL脚本访问时,我在数据库中运行查询下面的查询工作同一个SQL查询的访问运行,但使用Java

INSERT INTO `M_DT_SaveAndClose` (`StoryName`, `Assignee`, `Createddate`, `CreatedBy`) 
VALUES (' DT_0019_BGL_2014_11_01_AM_01_MN_01_11_2014_12_07_06_281_000772.xml ', 
' T0003SathyabamaT ', ' 2014-11-01 12:08:22 ', ' Admin ') 

但是,当我使用Java通过SQL脚本运行相同的查询,它抛出误差作为在Java

"Error executing: INSERT INTO `M_DT_SaveAndClose` (`StoryName`, `Assignee`, `Createddate`, `CreatedBy`) 
    VALUES (' DT_0019_BGL_2014_11_01_AM_01_MN_01_11_2014_12_07_06_281_000772.xml ', 
    ' T0003SathyabamaT ', ' 2014-11-01 12:08:22 ', ' Admin '). 
Cause: net.ucanaccess.jdbc.UcanaccessSQLException: data exception: invalid datetime format" 

查询生成步骤:

savequery = "INSERT INTO `M_DT_SaveAndClose` (`StoryName`, `Assignee`, `Createddate`, `CreatedBy`) VALUES (' " + storyidgen.concat(".xml").trim() + " ', ' " + usernames.trim() + " ', ' " + dateFormat.format(date).trim() + " ', ' Admin ');"; 

访问表结构:

CREATE TABLE M_DT_SaveAndClose (\n" 
      + " slno Integer,\n" 
      + " StoryName VARCHAR,\n" 
      + " Assignee VARCHAR,\n" 
      + " [Createddate] DateTime,\n" 
      + " CreatedBy VARCHAR,\n" 
      + " [createdtime] DateTime\n" 
      + ") 

我正在使用ucanaccess-2.0.6.2.jar。建议一些想法。

+0

参数化查询你为什么不修剪“2014年11月1日12时08分22秒”前插入?你有没有尝试修剪这个,然后运行查询? – UDPLover 2014-11-01 06:54:38

回答

1

我看到很多看起来可疑的空白空间。我建议你删除它,

INSERT INTO `M_DT_SaveAndClose` 
    (`StoryName`, `Assignee`, `Createddate`, `CreatedBy`) 
VALUES 
    ('DT_0019_BGL_2014_11_01_AM_01_MN_01_11_2014_12_07_06_281_000772.xml', 
    'T0003SathyabamaT', '2014-11-01 12:08:22', 'Admin') 
+0

在查询生成过程中没有使用修剪 – Dhinakar 2014-11-01 06:55:46

+0

System.out.println生成的查询,并在有问题的更新 – UDPLover 2014-11-01 06:56:55

+0

@Dhinakar不根据您的异常(或您发布的查询)。 – 2014-11-01 06:56:59

1

事实上,它是字符串常量对于那些搞乱您[Createddate]在开头和结尾的空格。简单地改变

... + " ', ' " + dateFormat.format(date).trim() + " ', ' Admin ' ... 

... + " ', '" + dateFormat.format(date).trim() + "', ' Admin ' ... 

作出错误消失。然而,你的代码将是更清洁,更容易维护,安全如果你使用这样

String savequery = 
     "INSERT INTO M_DT_SaveAndClose (StoryName, Assignee, Createddate, CreatedBy) " + 
     "VALUES (?,?,?,?)"; 
try (PreparedStatement ps = conn.prepareStatement(savequery)) { 
    ps.setString(1, storyidgen.concat(".xml").trim()); 
    ps.setString(2, usernames.trim()); 
    ps.setTimestamp(3, new Timestamp(date.getTime())); 
    ps.setString(4, "Admin"); 
    ps.executeUpdate(); 
}