【问题标题】:java.sql.SQLException: General errorjava.sql.SQLException:一般错误
【发布时间】:2012-03-24 23:47:18
【问题描述】:

获取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)

提前致谢

【问题讨论】:

  • 这可能是由于访问数据库时出错。它是否始终如一地发生?您是否确保数据库连接详细信息正确?

标签: java jdbc oracle10g odbc database-connection


【解决方案1】:

我明白了。

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

我们可以使用下面的代码来代替之前的代码来选择

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

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

干杯!!

【讨论】:

  • 您应该使用真正的 JDBC 驱动程序而不是JDBC/ODBC 桥。 Oracle 的“本机”JDBC 没有时间戳列的问题。 JDBC/ODBC 桥有缺陷(正如您刚刚发现的那样)并且速度很慢。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-02
    • 2016-07-25
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 2011-12-29
    • 2012-10-24
    相关资源
    最近更新 更多