2

私はこのプロジェクトをやろうとしていますが、大きな問題があります。属性 cid を持つテーブル test2 を作成しました。SQL コマンド ラインで次のコマンド ラインを使用して、ユーザーを cid に追加しました。

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

select cid from test2;

次に、結果を次のように取得します

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

私の質問は、サーバーへのEclipseでjdbcを使用しようとしたときに、rs.next()がfalseとして取得されることです(rsは結果セットです)。明らかに、テーブル test2 内に 'hello' があります。これが私のコードです。誰かがこれを手伝ってくれるなら、私はそれを感謝します:

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

私を困惑させます。再度、感謝します。

4

3 に答える 3

1

この動作の最も可能性の高い説明COMMIT;は、INSERT. (表示されません。)

SELECTINSERT を実行した同じセッションからのクエリは、行を返します。セッションは、コミットされていないすべての変更を「見る」ことができます。ただし、Oracle は、コミットされるまで、コミットされていない変更を他のセッションが参照できないようにします。

私たちが見たいのは:

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

1 row created.

SQL> commit;

Commit complete.

挿入された行は、コミット後まで他のセッションから見えません。


もう 1 つの (あまりありそうにない) 説明は、2 つのセッションが異なる Oracle ユーザーとしてデータベースに接続されているか、異なるデータベース インスタンスに接続されていることです。

于 2013-08-12T23:49:05.067 に答える
0

これは非常に奇妙な問題です。私が見ることができた唯一の欠けている部分は

Class.forName("oracle.jdbc.driver.OracleDriver"); 上記のコード スニペットのステートメント。入れてみて、出力に変化があるかどうかを確認してください。

また、エントリを作成したデータベースが、上記のコードで指定したものとまったく同じであることを確認してください。

乾杯

于 2013-08-12T23:46:55.263 に答える