Разрешить неверный формат для ошибки времени в Java? - PullRequest
3 голосов
/ 16 августа 2010

Я работаю с Java, чтобы извлечь значения столбца времени в таблице в MySQL.

код ниже показывает запрос, который я отправляю.

String query="select id,time from table where Hour(time)<=32 ";
ResultSet res = stmt.executeQuery(query);
while (res.next()) {
  String id = res.getString(1); 
  Time tc = res.getTime("time");
  System.out.println(tc);
}

значения времени могут быть отрицательными (-56: 00: 00, что означает, что мы превзошли определенную задержку. проблема в том, что я получаю: java.sql.SQLException: java.sql.SQLException: Bad format для времени '-05: 48: 49' в столбце 2.

спасибо за вашу помощь.

Ответы [ 4 ]

2 голосов
/ 16 августа 2010

Если преобразование, выполненное реализацией ResultSet, не работает для отрицательных значений времени, вы все равно можете прочитать значение как строку и реализовать свой собственный метод для преобразования строки в дату (и наоборот):

  String query="select * from table where Hour(time)<=32 ";
  ResultSet res = stmt.executeQuery(query);
  while (res.next()) {
    String id = res.getString(1); 
    Time tc = convertToDate(res.getString("time"));
    System.out.println(tc);
  }

  // ....

}

private Time convertToDate(String s) {
  // implement magic here

}
1 голос
/ 09 марта 2012

Может быть, этот ответ так поздно.Но вы можете решить это, просто заключив строку в нужное вам поле.Я имею в виду:

select id,concat(time,'') from table where Hour(time)<=32

С уважением, Саул Идальго.

1 голос
/ 16 августа 2010

Как ответили на ваш предыдущий вопрос , вам нужно сохранить и обработать его в виде секунд, которые хранятся как целое число со знаком .

Тип времени не может быть отрицательным,Вы также не можете выполнить математику для varchar / строки и массировать ее вперед и назад в работоспособный формат, как предложено Andreas_D, только добавив ненужные накладные расходы.Целое число со знаком - действительно лучший тип данных, который вы можете использовать для этого.Используйте PreparedStatement#setInt() для его хранения и используйте ResultSet#getInt() для его получения.

0 голосов
/ 16 августа 2010

Я думаю, что проблема в самом запросе.

Когда вы запускаете запрос [select * from table, где Hour (time) <= 32], он не возвращает ошибку?Я предполагаю, что ошибка в предложении where [Час (время) <= 32] </p>

В наборе результатов нет никакой информации о предложении where.Он просто возвращает все столбцы.

Вам нужно проверить возврат столбцов, чтобы проверить, не возвращаете ли вы какой-то странный тип.

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