Дата Java - Вставляет в базу данных

Выполните следующие шаги:

  1. Откройте catalina.sh из tomcat / bin.

  2. Измените JAVA_OPTS на

    JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1536m 
    -Xmx1536m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m 
    -XX:MaxPermSize=256m -XX:+DisableExplicitGC"
    
  3. Перезагрузите кота

14
задан zSynopsis 4 July 2009 в 01:47
поделиться

6 ответов

Конечно, PreparedStatement сделает ваш код лучше, но чтобы ответить на ваш вопрос, вам нужно сообщить СУБД формат вашего строкового представления Date. В Oracle (вы не называете поставщика базы данных) строка даты преобразуется в Date с помощью функции TO_DATE () :

INSERT INTO TABLE_NAME(
  date_column
)values(
  TO_DATE('06/06/2006', 'mm/dd/yyyy')
)
7
ответ дан 1 December 2019 в 08:53
поделиться

Прежде чем я отвечу на ваш вопрос, я хотел бы упомянуть, что вам, вероятно, следует изучить возможность использования какого-либо решения ORM (например, Hibernate), скрытого за уровнем доступа к данным. То, что вы делаете, кажется очень анти-ОО. По общему признанию, я не знаю, как выглядит остальная часть вашего кода, но в целом, если вы начинаете видеть себя использующим множество служебных классов, вы, вероятно, принимаете слишком структурный подход.

Чтобы ответить на свой вопрос, как и другие уже упоминалось, просмотрите java.sql.PreparedStatement и используйте java.sql.Date или java.sql.Timestamp . Что-то вроде (чтобы максимально использовать исходный код, вы, вероятно, захотите изменить его еще больше):

java.util.Date myDate = new java.util.Date("10/10/2009");
java.sql.Date sqlDate = new java.sql.Date(myDate.getTime());

sb.append("INSERT INTO USERS");
sb.append("(USER_ID, FIRST_NAME, LAST_NAME, SEX, DATE) ");
sb.append("VALUES ( ");
sb.append("?, ?, ?, ?, ?");
sb.append(")");

Connection conn = ...;// you'll have to get this connection somehow
PreparedStatement stmt = conn.prepareStatement(sb.toString());
stmt.setString(1, userId);
stmt.setString(2, myUser.GetFirstName());
stmt.setString(3, myUser.GetLastName());
stmt.setString(4, myUser.GetSex());
stmt.setDate(5, sqlDate);

stmt.executeUpdate(); // optionally check the return value of this call

Еще одно преимущество этого подхода заключается в том, что он автоматически экранирует ваши строки (например,

13
ответ дан 1 December 2019 в 08:53
поделиться

PreparedStatement

Вы обязательно должны использовать PreparedStatement . ( Учебник )

Таким образом вы можете вызвать:

pstmt.setDate( 1, aDate );

Драйвер JDBC будет выполнять обработку даты и времени, соответствующую вашей конкретной базе данных.

Кроме того, PreparedStatement останавливает любые попытки взлома SQL-инъекции - очень важно! ( юмор )

Это должно выглядеть так:

SimpleDateFormat format = new SimpleDateFormat( "MM/dd/yyyy" );  // United States style of format.
java.util.Date myDate = format.parse( "10/10/2009" );  // Notice the ".util." of package name.

PreparedStatement pstmt = connection.prepareStatement(
"INSERT INTO USERS ( USER_ID, FIRST_NAME, LAST_NAME, SEX, DATE ) " +
" values (?, ?, ?, ?, ? )");

pstmt.setString( 1, userId );
pstmt.setString( 3, myUser.getLastName() ); 
pstmt.setString( 2, myUser.getFirstName() ); // please use "getFir…" instead of "GetFir…", per Java conventions.
pstmt.setString( 4, myUser.getSex() );
java.sql.Date sqlDate = new java.sql.Date( myDate.getTime() ); // Notice the ".sql." (not "util") in package name.
pstmt.setDate( 5, sqlDate ); 

И все, драйвер JDBC создаст для вас правильный синтаксис SQL.

Получение

При извлечении объекта Date вы можете использовать SimpleDateFormat для создания форматированного строкового представления даты. временная стоимость.

Вот одна строка быстрого примера, но поищите в StackOverflow много больше.

String s = new SimpleDateFormat("dd/MM/yyyy").format( aDate ); 
8
ответ дан 1 December 2019 в 08:53
поделиться

, если вы используете mysql .., вы можете сохранить дату, например, как «2009-12-31».

update person set birthday_date = '2009-12-31'

, но я предпочитаю использовать jdbc, хотя вам нужно создать java.sql.Date ...

* Дата - это своего рода зло в этом мире. ..:)

1
ответ дан 1 December 2019 в 08:53
поделиться

Используйте подготовленные операторы, у них есть методы для правильной установки параметров для каждого собственного типа Java.

Посмотрите api для setDate и примеры

0
ответ дан 1 December 2019 в 08:53
поделиться

Вы должны использовать java.sql.Timestamp вместо java.util.Date. Кроме того, использование PreparedStatement избавит вас от забот о форматировании.

0
ответ дан 1 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: