2013-03-29 6 views
1

Я отправляю на сервер строку sysdate() с устройства Android. Проблема в том, что код не вставляет ничего в базу данных mysql. Колонка first - DATETIME. Я использую mysql workbench, когда я набираю INSERT INTO test (first) VALUES (sysdate()); в workbench, он работает.Sysdate as string

<% 
    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(); 
        } 
       } 
      } 
     %> 
+0

Что дата выглядеть, когда она исходит от Android? Другими словами, какова ценность вашей переменной 't'? Это '3/29/2013'? '2013-03-29'? Кроме того, у вас есть консоль для просмотра исключения, которое выводится в вашем 'catch'? Вы можете это проверить. –

+0

Похож на 'sysdate()'. Я не конвертирую его ... – steven967

ответ

1

My 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); 
+0

Спасибо, это помогло мне. – steven967

+1

Добро пожаловать! Я не использовал Java в течение многих лет (позор, потому что мне это нравится), поэтому я волновался, что могу нанести больше вреда, чем пользы с моим ответом. Я рад, что это помогло :) –