Java Jdbc从数据库返回未扩展的结果
这里的代码从数据库返回时返回了错误/意外的结果。我想不出这个问题。这是密码Java Jdbc从数据库返回未扩展的结果,java,oracle,jdbc,Java,Oracle,Jdbc,这里的代码从数据库返回时返回了错误/意外的结果。我想不出这个问题。这是密码 import java.sql.*; class test1 { public static void main(String [] args) { try { Class.forName("oracle.jdbc.OracleDriver"); System.out.println("Driver loaded successfully"); }
import java.sql.*;
class test1
{
public static void main(String [] args)
{
try
{
Class.forName("oracle.jdbc.OracleDriver");
System.out.println("Driver loaded successfully");
}
catch(ClassNotFoundException ex)
{
System.out.println("Could not load "+ex.getMessage());
System.exit(0);
}
Connection con=null;
try
{
con=DriverManager.getConnection("jdbc:oracle:thin:@//Apoorv-PC:1521/orcl","scott","tiger");
Statement st=con.createStatement();
//st.setMaxRows(2);
//System.out.println(st.getMaxRows());
ResultSet rs=st.executeQuery("Select park_space from park_available where area='M.P.Nagar'");
while(rs.next())
{
String p=rs.getString(1);
System.out.println(" "+p);
}
con.close();
System.out.println("Connection closed!");
}
catch(SQLException e)
{
System.out.println("Error in database"+e.getMessage());
}
if(con!=null)
{
System.out.println("Successful!");
}
}
}
oracle中的My park_available表有5列:area(varchar2)、arr_date(varchar2)、arr_time(varchar2)、park_space(number)、dept_time(varchar2)
这里我试图访问第4列“park_space”,它的每一行的值为“10”,但这里的代码在与getInt()一起使用时返回0,在使用getString()时返回null
我是否必须使用rs.next()方法,因为根据我的代码,返回的结果是特定行的特定列,即仅一个值?尝试以下操作:
while(rs.next()) {
BigDecimal p=rs.getBigDecimal(1);
System.out.println(" "+p);
}
我想,因为您的列是一个数字,所以它对于int来说太大了(例如,请参阅Oracle关于数据taype映射的注释:)
[编辑]
要导入“java.math.BigDecimal”,您必须添加如下导入语句:
import java.sql.*;
import java.math.BigDecimal;
到Java文件的开头。为了验证您的驱动程序没有问题,这里有一个完整的测试程序:
Dear The above your code is write no problem.
I think May be problem in Your Connection URL Check that Once clearly...
I was Executed code in Eclipse with localhost url i got output.No Errors
See Code Bellow
import java.sql.*;
class test1
{
public static void main(String [] args)
{
try
{
Class.forName("oracle.jdbc.OracleDriver");
System.out.println("Driver loaded successfully");
}
catch(ClassNotFoundException ex)
{
System.out.println("Could not load "+ex.getMessage());
System.exit(0);
}
Connection con=null;
try
{
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521","sample1","sample1");
Statement st=con.createStatement();
//st.setMaxRows(2);
//System.out.println(st.getMaxRows());
ResultSet rs=st.executeQuery("Select park_space from park_available where area='M.P.Nagar'");
while(rs.next())
{
String p=rs.getString(1);
System.out.println(" "+p);
}
con.close();
System.out.println("Connection closed!");
}
catch(SQLException e)
{
System.out.println("Error in database"+e.getMessage());
}
if(con!=null)
{
System.out.println("Successful!");
}
}
}
public static void main(String[] args) throws Exception {
try (Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@...", "...", "...")) {
try {
try (Statement stmt = conn.createStatement()) {
stmt.executeUpdate("CREATE TABLE NUMBER_TEST ( COL1 NUMBER )");
}
try (PreparedStatement stmt = conn.prepareStatement("INSERT INTO NUMBER_TEST VALUES (?)")) {
Random rnd = new Random();
for (int i = 0; i < 10; i++) {
stmt.setDouble(1, rnd.nextDouble() * 100.0);
stmt.executeUpdate();
}
}
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT COL1 FROM NUMBER_TEST")) {
while (rs.next()) {
System.out.println(rs.getInt(1) + " " + rs.getDouble(1) + " " + rs.getString(1));
}
}
} finally {
try (Statement stmt = conn.createStatement()) {
stmt.executeUpdate("DROP TABLE NUMBER_TEST");
} catch (Exception e) {
System.out.println("DROP failed: " + e);
}
}
}
}
如您所见,getInt
、getDouble
和getString
都返回良好的数据
在11.2.0.4JDBC驱动程序上针对9.2数据库进行测试
while(rs.next())
{
String p=rs.getInt(1);
System.out.println(" "+p);
}
@Apoorv singhai
您正在尝试接受字符串输入,而您的列由数字数据类型组成,请改用此代码。您能否提供“创建表…”脚本?我想看看这些列有什么类型。getString(1)
…这不返回第二列吗,它在您的RS中不存在吗?park\u space是数字数据类型rest all是varchar2type@Zirconrs中仅存在一列和一行。。。。如果我传递0或2或除1以外的任何值,它会生成“无效列索引”错误。您确定选定的行都有“10”作为park_space列的值吗?可能您已经在未提交的会话中插入/更新了它?它生成的“找不到符号错误”是否需要导入一些packageBigDecimal位于java.math中。您必须在java文件的开头添加一个“import java.math.BigDecimal;”,就在“import java.sql.*;”行下面。好的,谢谢。它正在工作。它与int一起工作,只是我连接到了另一个数据库。是我的错。