0

尝试使用 Oracle DB 和 Java 应用程序以便在 Linux 平台上使用 JDBC。

下载了 ojdbc6.jarojdbc6dms.jar

在 Linux 上安装了SQLDeveloper 。

在 SQLDeveloper 中建立了一个连接,名称为:Dummy

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

数据库中的表名: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

不知道为什么它没有进入 ResultSet 循环,尽管计数显示为 10。表中只有 3 个条目,但计数仍显示为 10。

有人可以告诉查询字符串是否正确。

有人可以指导我如何让它工作,以便它开始从控制台上的表格中打印数据。

4

2 回答 2

1

提取大小与返回的总行数不同。

例如,如果您的查询找到 10,000 个匹配项,它不会从数据库中返回所有 10,000 行。这就是 fetch size 发挥作用的地方。如果 fetchSize 为 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 回答