Вставка пользовательской даты и текущего времени в базу данных Oracle с использованием строковых переменных - PullRequest
2 голосов
/ 09 марта 2012

Итак, я хочу установить пользовательскую дату вместе с текущим временем в тип DATE в базе данных Oracle.Я получаю строку из textField в виде мм / дд / гггг

 String tdate = textDate.getText().trim();

Чтобы упростить детали, давайте просто вставим ДАТУ в небольшую таблицу.

 Calendar calendar = Calendar.getInstance();                                
 int hour = calendar.get(Calendar.HOUR);
 int minute = calendar.get(Calendar.MINUTE);
 int second = calendar.get(Calendar.SECOND);
 String current_time = hour+":"+minute+":"+second;

теперь у нас естьtdate как строка даты и current_time как текущее время.

для помещения в базу данных с таблицей, определенной как:

create table transaction(
              tranaction_num integer,
              time_of_transaction DATE);

, теперь в jdbc

PreparedStatement pStmt = Conn.prepareStatement("insert into transaction values(?,?));
pStmt.setString(1, "1");
pStmt.setString(2, "to_date( '"+tdate+" "+current_time+"','mm/dd/yyyy hh24:mi:ss')");
pStmt.executeUpdate();

Это дает мне ошибку, как показано ниже

 ORA-01858: a non-numeric character was found where a numeric was expected

Я знаю, что делаю что-то не так, но я пытался так много вещей, чтобы заставить это работать.Я не против получить текущее время другим способом, пока оно работает

Любая помощь будет оценена

Ответы [ 3 ]

4 голосов
/ 09 марта 2012

Вы должны разобрать строку даты перед передачей ее в базу данных, и вы должны использовать setInt() для первого параметра вместо setString()

SimpleDateFormat parser = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

Date date = parser.parse(tdate+" "+current_time);

String sqlStmt = "INSERT INTO transaction(tranaction_num, time_of_transaction) VALUES(?,?)";
PreparedStatement pStmt = Conn.prepareStatement(sqlStmt);
pStmt.setInt(1, 1);
pStmt.setDate(2, new java.sql.Date(date.getTime()));
pStmt.executeUpdate();
2 голосов
/ 09 марта 2012

Если вы хотите передать строку, вы, вероятно, хотите что-то вроде

String sqlStmt = "insert into transaction values(?,to_date(?,'mm/dd/yyyy hh24:mi:ss'))"
PreparedStatement pStmt = Conn.prepareStatement(sqlStmt);
pStmt.setString(1, "1");
pStmt.setString(2, tdate+" "+current_time);
pStmt.executeUpdate();

С хорошей точки зрения кодирования, однако, вам будет гораздо лучше сделать setInt для первого параметра иsetDate для второго параметра, а не для передачи всего в виде строк.

0 голосов
/ 09 марта 2012

вместо

pStmt.setString(1, "1");

Использование:

pStmt.setInt(1, 1);
...