Java Oracle JDBC在Linux上未提供预期输出
为了在Linux平台上使用JDBC,尝试使用Oracle DB和Java应用程序 下载的ojdbc6.jar和ojdbc6dms.jar 在Linux上安装了SQLDeveloper 在SQLDeveloper中建立了名为:Dummy的连接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
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不确定为什么它在循环时不进入
。只需一分钟,我就会发布一个变通方法。这个变通方法肯定没有帮助。不过,我在另一个类文件中复制/粘贴了相同的代码,并执行了它。它运行得很好。但仍然无法找出问题所在。