2016-02-19 17 views
0

Я полный noob для java и sqlite. Это должно быть просто, но я пытался и искал и не могу заставить его работать. У меня есть поле даты в SQL, которое я форматирую как дату sql (MM/dd/yy). Я хочу удалить на основе даты. На данный момент я просто пытаюсь отобразить строки на основе прошедшей даты.sql удалить по дате

Мой код для выполнения запроса является:

String query = "select * from Peter1Score where DateSort='"+convertSQLDate("09/20/15")+"'"; 
PreparedStatement pst = connection.prepareStatement(query); 
ResultSet rs = pst.executeQuery(); 

Мой converSQLDate() является:

public static java.sql.Date convertSQLDate (String sqlDateIn) 
{ 
    java.sql.Date returnDate = null; 

    SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yy"); 
    Date parsed; 
    try 
    { 
     parsed = formatter.parse(sqlDateIn); 
     java.sql.Date sqlDate = new java.sql.Date(parsed.getTime()); 
     returnDate = sqlDate; 
    } 
    catch (ParseException e) 
    { 
     e.printStackTrace(); 
    } 
    return returnDate; 
} 

Я передаю 09/20/15 только для тестирования. У меня есть запись с этой датой, но она не выбрана.

+0

Самый простой способ сделать это, чтобы использовать 'PreparedStatement' и передать дату (не строка) в запросе через' SETDATE (1, MyDate) '. Вам также может потребоваться передать «Календарь» для явного определения часового пояса, если ваша JVM будет находиться в другой зоне/локали, чем SQLite. –

+0

Я думал, что это то, что я делаю. –

+0

Вы не _binding_ любые переменные в инструкции (используя методы 'setXY()'). Вы просто конкатенируете строковое значение (результат 'Date.toString()') в литерал запроса. –

ответ

2

Вы не привязываете какие-либо переменные в инструкции (используя методы setXY()PreparedStatement). Вместо этого вы связываете строковое значение (результат Date.toString()) в литерал запроса.

Попробуйте вместо этого:

String query = "select * from Peter1Score where DateSort=?"; 
PreparedStatement pst = connection.prepareStatement(query); 
pst.setDate(1, convertSQLDate("09/20/15")); 
+1

Прекрасный и достаточный ответ, хотя попытки использования ресурсов могли быть показаны как вполне подходящие для JDBC. –

+0

Я нахожусь на мобильном телефоне, поэтому мне нужно было свести код к минимуму; мог бы изменить его с надлежащей обработкой ресурсов позже сегодня. –

+0

Это сработало отлично. Я знал, что это будет что-то простое, и я также подозревал, что это связано с несоответствием строки/даты, но не видел леса для деревьев. Спасибо. –

Смежные вопросы