2012-03-24 3 views
2

Получение java.sql.SQLExceptionjava.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) 

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

+0

Возможно, это связано с ошибкой при доступе к базе данных. Это происходит последовательно? Убедитесь, что данные о соединении с базой данных верны? – Bernard

ответ

3

Я понимаю.

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

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

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

Это прекрасно работает, я проверял.

Cheers !!

+2

Вы должны использовать ** настоящий ** JDBC-драйвер вместо моста JDBC/ODBC. «Собственный» JDBC от Oracle не имеет проблем с столбцом timestamp. Мост JDBC/ODBC неисправен (как вы только что открыли) и медленно. –

0

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

Добавить наконец блокировать и перемещать близкие заявления там проверку на нуль:

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(); 
    } 
}