java.sql.SQLException:一般错误

时间:2012-03-24 23:47:18

标签: java jdbc oracle10g odbc database-connection

获取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 个答案:

答案 0 :(得分:3)

我明白了。

由于在update_time中使用了数据类型timestamp(6)而引发错误。每当我们尝试执行包含以时间戳作为数据类型的列的select语句时,都会抛出异常。

我们可以使用以下代码选择

,而不是以前的代码
    query="select latitude,longitude,to_char(update_time,'HH24:MI:SS'),to_char(update,time,'DD-MON-YY') from user_location_table";    

这很好,我已经测试过了。

干杯!!

答案 1 :(得分:0)

有几点想法。如果它仅在第一次执行时发生,则可能是数据库中存在无效且正在编译的内容。其次,你可能有一些漏洞,因为你没有在finally块中关闭你的连接和语句。因此,如果您遇到异常,则不会关闭连接,并且可能会在数据库上创建锁定。

添加一个finally块并将close语句移动到那里检查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....

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