JDBC连接已连接但结果集没有查询结果

时间:2013-08-12 23:38:36

标签: java sql eclipse jdbc

我正在尝试做这个项目,但它有一个重大问题。我用属性cid创建了表test2。我在sql命令行中使用以下命令行将用户添加到cid中:

create table test2(cid varchar(20));
insert into test2 values('hello');

select cid from test2;

然后我得到结果

CID
-----------------------
HELLO

我的问题是,当我尝试将jdbc与eclipe一起使用到服务器时,我将rs.next()视为false(rs是结果集)。显然我在表test2中有'你好'。这是我的代码,如果有人可以帮助我,我会很感激:

public boolean connect(String username, String password)
{
    String connectURL = "jdbc:oracle:thin:@dbhost.xxx.xx.xxx.ca:1522:ug"; 

    try 
    {
        con = DriverManager.getConnection(connectURL,username,password);
        System.out.println("\nConnected to Oracle!");
        ResultSet  rs;
        try
        {
            Statement stmt = con.createStatement();

            rs = stmt.executeQuery("SELECT cid FROM test2");
            System.out.println("here");
            while(rs.next())
            {
                System.out.println("there");
                System.out.println("cid isssssssssss: " + rs.getString("cid"));

            }
            System.out.println("after here");
            stmt.close();
        }
        catch (SQLException ex)
        {
            System.out.print("Message: " + ex.getMessage());
        }
        try {
            con.close();
        } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        return true;
    }
    catch (SQLException ex)
    {
        System.out.println("Message: " + ex.getMessage());
        return false;
    }
}

连接是存在的,因为当我将cid更改为其他内容时,sqlexception给了我一条错误消息。所以它连接但没有从服务器获得任何查询。

rs = stmt.executeQuery("SELECT something FROM test2");

Connected to Oracle!
Message: ORA-00904: "SOMETHING": invalid identifier

让我感到困惑。再次感谢。

3 个答案:

答案 0 :(得分:1)

此行为最可能的解释是您没有在执行COMMIT;的会话上发出“INSERT”语句。 (它没有显示。)

来自执行INSERT的同一会话的SELECT查询将返回该行。会话确实“看到”它所做的所有未提交的更改。但是Oracle会阻止任何其他会话看到这些未提交的更改,直到它们被提交为止。

我们希望看到的是:

SQL> insert into test2 values('hello');

1 row created.

SQL> commit;

Commit complete.

在提交之前,插入的行对其他会话不可见。


另一个(更不可能)解释是两个会话作为不同的Oracle用户连接到数据库,或连接到不同的数据库实例。

答案 1 :(得分:1)

你问:

  

我已经拥有数据库中的数据。我没有插入来自eclipse的数据,而是使用.sql文件将其加载到数据库中。那还需要提交吗?

我认为你使用SQL * Plus将数据加载到数据库中。

如果是这样,COMMIT是必需的,除非 SQL * Plus处于“自动提交”模式。

sql*plus: SQL> show autocommit; 
          autocommit OFF 
          SQL> set autocommit ON;

(如果没有“autocommit”或显式COMMIT语句,当您结束SQL * Plus会话时,事务将被回滚。这是您正在观察的内容的最可能的解释。)

答案 2 :(得分:0)

这是一个非常奇怪的问题。只有我能看到的缺失部分是

的Class.forName( “oracle.jdbc.driver.OracleDriver”);上面的代码片段中的语句。你可以尝试一下,看看输出是否有任何变化。

另外,请交叉检查您创建条目的数据库与上面代码中指定的数据库完全相同。

干杯