【问题标题】:Getting Timestamp results in java.sql.SQLException: General error获取时间戳导致 java.sql.SQLException:一般错误
【发布时间】:2011-12-02 08:50:48
【问题描述】:

我在从 Oracle 数据库获取时间戳时遇到问题。

创建表如下:

create table csi(start_time timestamp);

然后我选择的值如下:

import java.sql.*;

public class hel
{
    public static void main(String args[])
    {
        try
        {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            Connection con=DriverManager.getConnection("jdbc:odbc:mohit","system","rock");
            PreparedStatement ps=con.prepareStatement("select * from csi");
            ResultSet rs=ps.executeQuery();
            while(rs.next())
            {
                //System.out.println(rs.getString(4));
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

    }
}

但它会抛出以下异常:

java.sql.SQLException: General error
     at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
     at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
     at sun.jdbc.odbc.JdbcOdbc.SQLPrepare(Unknown Source)
     at sun.jdbc.odbc.JdbcOdbcConnection.prepareStatement(Unknown Source)
     at sun.jdbc.odbc.JdbcOdbcConnection.prepareStatement(Unknown Source)
     at hel.main(hel.java:10)

这是怎么引起的,我该如何解决?

【问题讨论】:

    标签: java oracle jdbc oracle10g


    【解决方案1】:

    下面是trace前几行的简单翻译(从下到上读取cmets):

    java.sql.SQLException: General error
      at sun.jdbc.odbc.JdbcOdbc.createSQLException         // I have to create and throw the SQL exception!
      at sun.jdbc.odbc.JdbcOdbc.standardError              // Uuuh, something failed?
      at sun.jdbc.odbc.JdbcOdbc.SQLPrepare                 // Let's start preparing it.
      at sun.jdbc.odbc.JdbcOdbcConnection.prepareStatement // Ah, a prepared statement is been requested.
    

    看起来 JDBC ODBC 桥接驱动程序不理解如何为 Oracle 10g 数据库创建准备好的语句。

    只是不要使用那个糟糕的驱动程序。您不是第一个遇到数据库特定问题的人。请改用真实 Oracle JDBC driver。

    【讨论】:

      【解决方案2】:

      请发布确切的错误。另外,您为什么要尝试从包含时间戳的内容中检索字符串?根据您的需要查看ResultSet 对象的getTimestamp 方法。

      【讨论】:

      • 它会在执行 PreparedStatement 时抛出错误。 getTimeStamp() 是 PreparedStatement 之后要执行的下一件事。
      • 需要更多信息;这是什么类型的数据库?此外,您创建的表称为“存储”,而在查询中您使用“csi”。您确定表“csi”存在并且考虑中的查询在从 SQL 编辑器触发时返回结果吗?
      • 哦,对不起,这是一个错误,我创建了名为 csi 的表,它不是 store。正如我之前所说,我使用的是 oracle(10g exp)。
      • SQLException 支持链接。能不能具体捕获SQLException,调用它的nextException()方法,看看里面有没有其他异常。或者更好的是,使用迭代器打印出所有链式异常。阅读:download.oracle.com/javase/6/docs/api/java/sql/…。同样如前所述,使用 oracle 提供的真实驱动程序而不是历史上的 JDBC-ODBC 桥。
      猜你喜欢
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 2015-03-31
      • 2018-09-01
      • 2022-12-03
      • 2017-10-06
      • 2022-01-04
      相关资源
      最近更新 更多