0

Linux プラットフォームで JDBC を使用するために、Oracle DB と Java アプリケーションを使用しようとしています。

ダウンロードしたojdbc6.jarおよびojdbc6dms.jar

Linux にSQLDeveloperをインストールしました。

SQLDeveloper で次の名前の接続を確立しました: Dummy

UserName : abc
Password : abc
DB Name : oracle
DB port : 8181

DB のテーブル名: usertable テーブルの列:ユーザー名、連絡先番号

テーブルには3 つのエントリが含まれています。

Java コード スニペットは次のとおりです。

package com.demo.oracleDB;


import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JC {

    /**
     * @param args
     */
    public static void main(String[] args) {

                System.out.println("-------- Oracle JDBC Connection Testing ------");

                try {

                    Class.forName("oracle.jdbc.driver.OracleDriver");

                } catch (ClassNotFoundException e) {

                    System.out.println("Where is your Oracle JDBC Driver?");
                    e.printStackTrace();
                    return;

                }

                System.out.println("Oracle JDBC Driver Registered!");

                Connection connection = null;

                try {

                    connection = DriverManager.getConnection(
                            "jdbc:oracle:thin:@IP:8181:oracle", "abc",
                            "abc");


                    PreparedStatement Pstmt=connection.prepareStatement("select * from abc.usertable");
                    ResultSet rst=null;

                    rst=Pstmt.executeQuery();

                    System.out.println("Before LOOP");

                    System.out.println("Row is  "  +  rst.getRow());
                    System.out.println("Count is   "   +  rst.getFetchSize());

                    while(rst.next())
                    {
                        System.out.println("Values from DB are " );
                        System.out.println("UserName  "  +  rst.getString("username"));

                        System.out.println("Contact NUmber   "  +  rst.getString("contactnumber"));
                    }

                } catch (SQLException e) {

                    System.out.println("Connection Failed! Check output console");
                    e.printStackTrace();
                    return;

                }

                if (connection != null) {
                    System.out.println("You made it.");
                } else {
                    System.out.println("Failed to make connection!");
                }
            }

        }

Linux での出力は次のとおりです。

-------- Oracle JDBC Connection Testing ------
Oracle JDBC Driver Registered!
Before LOOP
Row is  0
Count is   10

カウントが 10 を示しているのに、なぜ ResultSet ループ内に入らないのかはわかりません。テーブルには 3 つのエントリしかありませんが、それでもカウントは 10 と表示されています。

クエリ文字列が正しいかどうか教えてください。

コンソールのテーブルからデータの印刷を開始するように動作させる方法を教えてください。

4

2 に答える 2

1

フェッチ サイズは、返される行の総数とは異なります。

たとえば、クエリで 10,000 件の一致が見つかった場合、データベースから 10,000 行すべてが返されるわけではありません。ここで、フェッチ サイズの出番です。fetchSize が 10 の場合、最初に最初の 10 行が取得されます。

于 2013-06-06T15:01:11.267 に答える
0

fetchSize フィールドは、一度に返されるレコード数のヒントとしてのみ使用され、パフォーマンス チューニングに使用されます。setFetchSize() を使用して値が指定されていない場合、getFetchSize() の戻り値はドライバーの実装によって異なります。

Statement.getFetchSize()

Oracle ドライバの実装では、結果が見つからない場合でも、デフォルトの fetchSize がおそらく 10 になっています。

または、rst.last() および rst.getRow() を呼び出して、ResultSet の最後の行のインデックス番号を返すこともできます。ループに入る前に rst.beforeFirst() を必ず呼び出してください。

結果セット.getRow()

コードが ResultSet ループに入らない理由については、権限を調べて、データベース ユーザーがそのテーブルにアクセスできることを確認する必要がある場合があります。

于 2013-06-07T21:35:17.897 に答える