【问题标题】:How to display record from oracle database using select keyword如何使用 select 关键字显示 oracle 数据库中的记录
【发布时间】:2015-09-05 19:46:59
【问题描述】:

我想使用 select 关键字在 Java 中显示来自 Oracle 数据库的记录,但它不起作用。当我运行程序时,它会显示 SQL 命令,但不会显示我想要的结果。

我的代码是这样的:

static void modify()
{
  System.out.println("Enter employee ID");
  empid=sc.nextInt();
  try{
       con=Connection1.getConnection();
       stmt=con.createStatement();
       String d="select * from emp where empid='"+empid+"'";
       rs=stmt.executeQuery(d);
       System.out.println(""+d); 
   }
    catch(SQLException e)
  {
    e.printStackTrace();
  }       
}

当我运行应用程序时,会显示此结果而不是数据库中的记录:

select * from emp where empid='14'

【问题讨论】:

  • 你确定这是所有的代码吗?我什至看不到它将在哪里打印出 select 语句...我希望它是 toString 为 stmt 对象显示的任何内容...。您将需要遍历结果集并打印它给您的内容显示记录。
  • 您正在打印 SQL 语句。但是您永远不会从 ResultSet 对象中获取数据或显示该数据。所以你不会从数据库中看到任何信息。
  • 在您的结果集中,表中的字段可以通过索引访问。

标签: java sql jdbc oracle-xe


【解决方案1】:

您正在打印StatementtoString() 表示。相反,您应该执行该语句(您已执行),并从 ResultSet 获取相关字符串。

坦率地说,RestulSet 并没有提供最舒适的方式来迭代它的列,但它是可行的:

int colCount = rs.getMetaData().getColumnCount()
List<Object> columnValues = new ArrayList<>(colCount);

// Move to the first row
// If your query returns more than one row,
// you'd probably want to iterate over all of them
rs.next(); 

// Iterate the columns:
for (int i = 1; i <= colCount; ++i) {
    list.add(rs.getObject(i));
}
System.out.println ("Record: " + list);

【讨论】:

    【解决方案2】:

    问题是您只是打印结果的名称而不是结果本身。

    我已将您的代码更改如下,

      static void modify()
        {
        System.out.println("Enter employee ID");
            empid=sc.nextInt();
           try{
                con=Connection1.getConnection();
                stmt=con.createStatement();
                String d="select * from emp where empid='"+empid+"'";
                rs=stmt.executeQuery(d);
    
        while(rs.next()){
    
         //Getting column value from record by giving column no 
                    System.out.println(rs.getString(1)); //line 1
        //Getting column value from record by giving column name,
                    System.out.println(rs.getString("empid"));// line 2
        }
           }
           catch(SQLException e)
           {
               e.printStackTrace();
           }
    
        }
    

    请注意,上面的代码(第 1 行) 将打印您每条记录的第一列(从 db 返回),这里不保证返回列的顺序.

    如果要获取特定列,则可以在 resultSet 的 getString 方法中指定列名作为参数(第 2 行)

    您必须使用适当的方法来获取值,如果第 2 列在 DB 中的数据类型为 INTEGER,那么您必须使用 rs.getInt(2)

    在您的代码中,

     System.out.println(""+rs);
    

    在 Java 中,当您在 System.out 中调用 println(Object) 方法时,该方法将调用 String.valueOf(Object) 方法,该方法将再次调用 toString() 方法,该方法将返回对象的字符串表示形式,这里没有但您传递的查询,而不是记录。

    【讨论】:

      猜你喜欢
      • 2022-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      相关资源
      最近更新 更多