【问题标题】:Sysdate as stringSysdate 作为字符串
【发布时间】:2013-03-29 14:14:56
【问题描述】:

我正在从安卓设备发送到服务器字符串sysdate()。问题是代码没有向 mysql 数据库插入任何内容。 first 列是 DATETIME。我正在使用 mysql 工作台,当我在工作台中输入INSERT INTO test (first) VALUES (sysdate()); 时,它可以工作。

<%
     String t = request.getParameter("time");
            Connection connection = null;
            PreparedStatement pstatement = null;
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            int updateQuery = 0;
            if (t != null) {
                if (t != "" ) {
                    try {
                        connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
                        Statement st = connection.createStatement();
                        String queryString1 = "INSERT INTO test (first) VALUES (?)";
                        pstatement = connection.prepareStatement(queryString1);
                        pstatement.setString(1, t);
                        updateQuery = pstatement.executeUpdate();
                        if (updateQuery != 0) {
                            response.setStatus(400);
                        }
                    } catch (Exception ex) {
                        out.println(ex);

                    } finally {
                        pstatement.close();
                        connection.close();
                    }
                } 
            } 
        %>

【问题讨论】:

  • 来自 Android 的日期是什么样的?换句话说,你的变量t 的值是多少?是3/29/2013吗? 2013-03-29?另外,您是否真的有一个控制台来查看在您的catch 中输出的异常?你可以检查一下。
  • 看起来像sysdate()。我不转换它...

标签: mysql jsp prepared-statement sysdate


【解决方案1】:

我的 Java 非常生锈,但没有其他人参与,所以我会尝试一下。我记得日期对于 JDBC 来说很棘手。

这里有两次尝试,但请注意它们未经测试,因为我现在没有设置来测试它们。

方法#1:将日期作为字符串传递并让 MySQL 对其进行转换。而不是你的INSERT 声明:

String queryString1 = "INSERT INTO test (first) VALUES (?)";

...试试这个:

String queryString1 = "INSERT INTO test (first) VALUES (str_to_date(?, '%Y-%m-%d %H:%i:%s'))";

方法#2:使用PreparedStatement.setDate 而不是PreparedStatement.setString请注意,这使用了您原来的 INSERT 语句,而不是方法 1 中建议的语句。这意味着将字符串日期t 转换为java.util.Date,然后再转换为java.sql.date

而不是这个给你的set

pstatement.setString(1, t);

...试试这个:

// Change string to java.util.Date
java.util.Date dt = new java.text.SimpleDateFormat(
    "yyyy-MM-dd HH:mm:ss", java.util.Locale.ENGLISH).parse(t);

// Change java.util.Date to java.sql.Date
java.sql.Date sqlDt = new java.sql.Date(dt.getTime());

// Set parameter as a date
pstatement.setDate(1, sqlDt);

【讨论】:

  • 不客气!我已经很多年没有使用 Java(很遗憾,因为我喜欢它),所以我担心我的回答可能弊大于利。我很高兴它有帮助:)
猜你喜欢
  • 2016-05-01
  • 2012-01-25
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
相关资源
最近更新 更多