Использование java.sql.Date - PullRequest
       0

Использование java.sql.Date

0 голосов
/ 13 августа 2011

Я использую jdbc для вызова sql-запроса ".... where mydate like '?%'" и хочу передать параметр в запрос с помощью:

PreparedStatement ps;  
ps.setDate(1, new java.sql.Date.valueOf("2000-01-13"));

Но эта последняя строка не компилируется, и я нене знаю почему.Когда я вписываю дату непосредственно в запрос выше, как в ".. где mydate как '2000-01-13%'", это работает.

Ответы [ 2 ]

5 голосов
/ 13 августа 2011

Помимо основной ошибки компиляции (просто удалите new), я обнаружил 2 серьезные проблемы:

  1. Учитывая тот факт, что LIKE работает, ваше поле mydate, очевидно, имеет тип varchar вместо полноценного типа date, datetime или timestamp. Это рецепт проблем. Вы всегда должны использовать правильный тип данных для информации, содержащейся в поле.

  2. % нельзя поставить после заполнителя подготовленного заявления ?. Это должно быть установлено в значение напрямую. Однако это работает только с String значениями (и, следовательно, varchar типами полей). Для полноценного типа date, datetime и timestamp вы бы предпочли использовать =, <, > или BETWEEN.

Есть 2 решения:

  1. Измените тип данных поля на действительный date, datetime или timestamp, чтобы можно было использовать правильный синтаксис SQL, например WHERE mydate BETWEEN ? AND ?.

  2. Используйте взамен preparedStatement.setString(1, "2000-01-13%") и удалите эти одинарные кавычки вокруг заполнителя ?, чтобы он заканчивался как WHERE mydate LIKE ?.

Смотри также:

1 голос
/ 13 августа 2011

Вы хотите использовать:

java.sql.Date.valueOf("2000-01-13")

То есть, не используйте new перед ним.Используя new, вы сообщаете компилятору, что хотите создать новый объект.Поскольку valueOf является статическим методом, вам не нужно создавать объект для его вызова.

Несмотря на это, причина, по которой он не компилируется, состоит в том, что new java.sql.Date.valueOf("str") недействительное утверждение.Вам нужно будет сказать new java.sql.Date() в скобках, если вы хотите создать новый экземпляр Date, который вы делаете, но другим способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...