Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Oracle JDBC在Linux上未提供预期输出_Java_Database_Linux_Oracle_Jdbc - Fatal编程技术网

Java Oracle JDBC在Linux上未提供预期输出

Java Oracle JDBC在Linux上未提供预期输出,java,database,linux,oracle,jdbc,Java,Database,Linux,Oracle,Jdbc,为了在Linux平台上使用JDBC,尝试使用Oracle DB和Java应用程序 下载的ojdbc6.jar和ojdbc6dms.jar 在Linux上安装了SQLDeveloper 在SQLDeveloper中建立了名为:Dummy的连接 UserName : abc Password : abc DB Name : oracle DB port : 8181 数据库中的表名:usertable 表中的列:用户名、联系人号码 表包含3个条目 java代码片段是: package com.de

为了在Linux平台上使用JDBC,尝试使用Oracle DB和Java应用程序

下载的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
尽管计数显示为10,但不知道它为什么没有进入ResultSet循环表中只有3个条目,但计数仍显示为10。

有人能告诉我查询字符串是否正确。


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

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


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

fetchSize字段仅用于提示一次返回多少条记录,并用于性能调整。如果未使用setFetchSize()指定该值,则getFetchSize()的返回值取决于驱动程序实现

Oracle驱动程序实现的默认fetchSize可能为10,即使找不到结果

或者,可以调用rst.last()和rst.getRow(),这将返回结果集最后一行的索引号。只需确保在进入循环之前调用rst.beforeFirst()


至于代码没有进入ResultSet循环的原因,您可能需要查看权限,以确保数据库用户有权访问该表。

获取大小仅控制分配给服务器和客户端之间传输数据的缓冲区。它与查询返回的行数无关。请阅读JavaDocs,他们确实解释了。好的。你能告诉我为什么它没有进入while循环吗。这个表中有3个条目。如果它没有进入循环,我假设表中没有3行。您确定连接到了正确的数据库吗?如果您从jdbc执行一些插入操作会怎么样?它们会出现在结果集中吗?插入是从JDBC还是从SQL客户机完成并不重要。如果您从正确的数据库和表中读取数据,您将看到值。表中只有3行。为什么输出显示为10。此外,它为什么没有进入while循环..您显示的是获取大小,而不是上面解释的行数。TBH不确定为什么它在循环时不进入
。只需一分钟,我就会发布一个变通方法。这个变通方法肯定没有帮助。不过,我在另一个类文件中复制/粘贴了相同的代码,并执行了它。它运行得很好。但仍然无法找出问题所在。