从字符串转换日期和/或时间时转换失败

man*_*ani 2 java sql-server

我想在sql server中插入记录.表名和列在此代码中指定,

      String str_date=date;

      DateFormat formatter ; 

      formatter = new SimpleDateFormat("MM/dd/yyyy");

      date1 = (Date)formatter.parse(str_date);  

      System.out.println("Today is " +date1 );
Run Code Online (Sandbox Code Playgroud)
     try{

      String query="INSERT INTO BULT_DATA " +
                "(ULDT_ID" +
                ",ULDT_DESC" +
                ",ULDT_DT" +
                ",ULDT_ULTH_ID" +
                ",ULDT_DATA_FILE" +
                ",ULDT_MAX_ROW_NO" +
                ",ULDT_REC_STS" +
                ",ULDT_CRE_USER_ID" +
                ",ULDT_CRE_DT" +
                ",ULDT_UPD_USER_ID" +
                ",ULDT_UPD_DT" +
                ",ULDT_APRV_USER_ID" +
                ",ULDT_APRV_DT)" +
                "VALUES ('"+
                uploadID+"','"+
                uploadDes+"','"+
                date1+"','" +
                templateID+"','"+
                dataFile+"','"+
                noRows+"','" +
                        "N','" +
                        "admin','" +
                        "2011-12-05 18:41:50.000','" +
                        "admin','" +
                        "2011-12-05 18:41:50.000','" +
                        "NULL','" +
                        "NULL')";


            System.out.println("query :: "+query);

        int stmnt= stmt.executeUpdate(query);

                 }catch (Exception e) {

        e.printStackTrace();
 }
Run Code Online (Sandbox Code Playgroud)

但我得到了这个例外

com.microsoft.sqlserver.jdbc.SQLServerException:从字符串转换日期和/或时间时转换失败.

Boh*_*ian 5

首先,只有美国人使用延迟MM-DD-YYYY格式作为日期 - 每个人/所有其他人,尤其是数据库,都使用ISO格式YYYY-MM-DD.

其次,如果你按照它应该使用的方式使用JDBC,你就不必担心了.您可以继续使用延迟格式,因为JDBC驱动程序将为您处理将对象格式化为SQL.

第三(这是未成年人),喜欢stmt.execute()stmt.executeUpdate()的插入-插入不更新,这是一个插件.虽然,它可以使用任何一种.

把它们放在一起,你会得到这样的东西(例如):

String sql = "insert into table (int_col, date_col, boolean_col, text_col)" +
   " values (?, ?, ?, ?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setObject(1, 7);
statement.setObject(2, new Date());
statement.setObject(3, true);
statement.setObject(4, "hello");
statement.execute();
Run Code Online (Sandbox Code Playgroud)

注意:

  • ?在sql中使用占位符
  • 指某东西的用途 statement.setObject(n, object)
  • 日期和文本占位符周围没有引号

JDBC驱动程序将为所有"常用"java对象执行所有必要的转换和格式化,特别是如果该列/数据类型需要引号,则将值括在引号中.

你可以改变你自己的代码,以我在这里演示的方式工作.