java.sql.SQLException: общая ошибка - PullRequest
2 голосов
/ 25 марта 2012

Получение java.sql.SQLException

java.sql.SQLException: General error
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6986)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3110)
at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338)
at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(JdbcOdbcStatement.java:253)
at com.test.Temp.main(Temp.java:29)

Я использую следующий код

Connection con=null;
ResultSet rs=null;
Statement stmt=null;

try {
  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  con=DriverManager.getConnection("jdbc:odbc:locator","locator","locator");

  stmt=con.createStatement();
  System.out.println("Before query");
  String query=null;
  query="select * from user_location_table";
  System.out.println("after query12");

  rs=stmt.executeQuery(query);
  //perform certain operation....
  rs.close();
  stmt.close();
  con.close();
} catch(Exception e) {
  e.printStackTrace();
}

Исключение выдается в stmt.executeQuery(query).

user_location_table содержит следующие поля

user_id:number  not null,
latitude:number,
longitude:number,
update_time:timestamp(6)

Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 25 марта 2012

Я понял.

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

Вместо предыдущего кода мы можем использовать следующий код для выбора

    query="select latitude,longitude,to_char(update_time,'HH24:MI:SS'),to_char(update,time,'DD-MON-YY') from user_location_table";    

Это отлично работает, я проверял.

Ура !!

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

Пара мыслей. Если это происходит только при первом выполнении, возможно, что в базе данных есть что-то недопустимое, и она компилируется. Во-вторых, у вас может что-то просочиться, потому что вы не закрываете свое соединение и оператор в блоке finally. Поэтому, если вы получаете исключение, вы не закрываете соединения и, возможно, создаете блокировку вашей БД.

Добавьте блок finally и переместите туда свои операторы close, проверяя наличие нуля:

try {
  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  con=DriverManager.getConnection("jdbc:odbc:locator","locator","locator");

  stmt=con.createStatement();
  System.out.println("Before query");
  String query=null;
  query="select * from user_location_table";
  System.out.println("after query12");

  rs=stmt.executeQuery(query);
  //perform certain operation....

} catch (Exception e) {
  e.printStackTrace();
}
finally {
  try {
    if (rs!=null)
      rs.close();
  } catch (SQLException e) {
    e.printStackTrace();
  }
  try {
      if (stm!=null)
        stmt.close();
      } catch (SQLException e) {
      e.printStackTrace();
    }
  try {
    if (con!=null)
      con.close();
  } catch (SQLException e) {
    e.printStackTrace();
  }
}
...