Как вставить время (ЧЧ: ММ: СС) в таблицу базы данных MySQL в Java?

У меня есть таблица с типом столбца TIME (с именем myTime). строка t = "15:50:00"; Как преобразовать и вставить эту строку в столбец myTime (ЧЧ: ММ: СС).

Спасибо!


person Dũng Hoàng    schedule 13.08.2017    source источник
comment
Вы даже можете использовать varchar как тип данных в таблице mysql и сохранить его непосредственно как строку. Позже вы можете получить как строку и преобразовать в объект Date, если необходимо, с помощью кода Java.   -  person Sumit Badaya    schedule 13.08.2017
comment
пожалуйста! мне нужен тип TIME, а не DATETIME   -  person Dũng Hoàng    schedule 13.08.2017
comment
Добро пожаловать в Stack Overflow. Пожалуйста, изучите свой вопрос перед тем, как опубликовать его. Во многих случаях вы быстрее найдете ответ с помощью поисковой системы. Если вы этого не сделаете, когда вы расскажете нам, что вы нашли и чего не нашли, что вы пробовали и чего все еще не хватает, мы можем помочь вам более точно.   -  person Ole V.V.    schedule 13.08.2017
comment
Вы используете PreparedStatement для вставки в базу данных? Или Hibernate, SQL * J или какой-нибудь другой навороченный механизм?   -  person Ole V.V.    schedule 13.08.2017
comment
Для метки-дубликата: для сохранения времени дня как 15:50:00 в базе данных вы должны не использовать java.util.Date, как в связанном вопросе и принятом ответе на него. Лучше использовать java.time.LocalTime.   -  person Ole V.V.    schedule 14.08.2017


Ответы (4)


Вы можете использовать тип данных String для представления значения Time или вы можете использовать тип данных MySQL Time, а в коде Java использовать preparedStatement.setTime(), например:

Ваша таблица:

CREATE my_table (
    id          INT          PRIMARY KEY AUTO_INCREMENT,
    name        VARCHAR2(30) NOT NULL,
    time_from   TIME
);

Ваш код Java может выглядеть так:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Time;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MySQLDatabaseDemo {

   Connection conn = null;
   PreparedStatement preparedStatement = null;

   public static Connection getConnection() throws Exception {
      String driver = "org.gjt.mm.mysql.Driver";
      String url = "jdbc:mysql://localhost/databaseName";
      String username = "root";
      String password = "root";
      Class.forName(driver);
      Connection conn = DriverManager.getConnection(url, username, 
                                                    password);
      return conn;
   }

   /**
    * @param args [0] = value of "id"
    *             [1] = value of "name"
    *             [2] = value of "time_from"
    */
   public void insertRowWithTimeDatatype(String[] args) {

      String query = "insert into my_table (id, name, timefrom) " + 
                                   "values (?, ?, ?)";      

      DateFormat sdf = new SimpleDateFormat("hh:mm:ss");
      Date date = sdf.parse(args[2]);
      Time time = new Time(date.getTime());

      try {
         conn = getConnection();  // getConnection() is YOUR method

         preparedStatement = conn.prepareStatement(query);

         preparedStatement.setInt(1, Integer.parseInt(args[0]));
         preparedStatement.setString(2, args[1]);
         preparedStatement.setTime(3, time);

         // Execute statement and return the number of rows affected
         int rowCount = preparedStatement.executeUpdate();
         System.out.println("Number of rows affected: " + rowCount);
      } finally {
         preparedStatement.close();
         conn.close();
      }
   }
}
person Binyamin Regev    schedule 13.08.2017
comment
Пожалуйста, не учите молодых пользоваться давно устаревшими и заведомо неприятными классами Date, Time и SimpleDateFormat. По крайней мере, не как первый вариант и без всяких оговорок. Сегодня у нас намного лучше. - person Ole V.V.; 13.08.2017

Вы можете использовать TIME Datatype. Например,

CREATE TABLE tests (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(500) NOT NULL,
    start_time TIME,
    end_time TIME
);
person Sai Munikumar Nerukonda    schedule 13.08.2017
comment
У меня была таблица со столбцом (с именем myTime) типа TIME. но я не могу вставить в этот столбец строку t = string t = 15: 50: 00. Как преобразовать и вставить эту строку в столбец myTime. пожалуйста! - person Dũng Hoàng; 13.08.2017
comment
используйте setString() для типа данных SQL. - person Ashraf.Shk786; 13.08.2017

Вы можете использовать setString() для установки любого типа данных SQL. Попробуйте что-то вроде этого:

prepStatement.setString("myTime", "15:50:00");
person Usagi Miyamoto    schedule 13.08.2017

У меня лично нет опыта, но лучшее, что вы можете сделать, - это сохранить свое время в LocalTime объекте в Java и использовать yourPreparedStatement.setObject(parameterIndex, yourTime);, чтобы установить время как значение в вашем операторе SQL insert или update. Я уверен, что вы можете найти там примеры кода, руководства, документацию и т. Д. Пожалуйста, ищите.

Итак, откуда вы берете объект LocalTime?

LocalTime yourTime = LocalTime.parse(t);

(где t - это ваша строка времени, например 15:50:00, как в вопросе)

person Ole V.V.    schedule 13.08.2017