oraclejdbc在linux上没有提供预期的输出

sd2nnvve  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(238)

为了在linux平台上使用jdbc,尝试使用oracledb和java应用程序。
下载了ojdbc6.jar和ojdbc6dms.jar
在linux上安装了sqldeveloper。
在sqldeveloper中建立了名为dummy的连接

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

数据库中的表名:usertable表中的列:username,contactnumber
表包含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。
有人能告诉我查询字符串是否正确吗。
有人能指导我如何让它工作,使它开始打印数据从控制台上的表。

sirbozc5

sirbozc51#

获取大小与返回的总行数不同。
例如,如果查询找到10000个匹配项,则不会返回数据库中的所有10000行。这就是fetch size发挥作用的地方。如果fetchsize是10,那么它将首先检索前10行。

fruv7luv

fruv7luv2#

fetchsize字段仅用于提示一次返回多少条记录,并用于性能调整。如果没有使用setfetchsize()指定该值,那么getfetchsize()的返回值取决于驱动程序实现。
语句。getfetchsize()
即使找不到结果,oracle驱动程序实现的默认fetchsize也可能是10。
或者,可以调用rst.last()和rst.getrow(),这将返回结果集最后一行的索引号。只要确保在进入循环之前调用rst.beforefirst()。
resultset.getrow()
至于代码没有进入resultset循环的原因,您可能需要查看权限,以确保数据库用户有权访问该表。

相关问题