运行时的代码打开了 jdbc 连接,但没有打印表数据。这段代码有啥问题?

Posted

技术标签:

【中文标题】运行时的代码打开了 jdbc 连接,但没有打印表数据。这段代码有啥问题?【英文标题】:The code when run opens the jdbc connection but it is not printing the table data.What is wrong with this code?运行时的代码打开了 jdbc 连接,但没有打印表数据。这段代码有什么问题? 【发布时间】:2016-09-11 13:40:54 【问题描述】:
package com.cg.tr.jdbc;
import java.sql.Connection; 
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import com.cg.trg.utilself.DBUtilSelf;

 public class MenuBase 
public static void main(String[] args) 
 Connection connection = DBUtilSelf.openConnection();
 System.out.println("Connection opened");
 String sql="SELECT BNUM FROM BOOK";

try
 
    Statement st=connection.createStatement();
    ResultSet rs=st.executeQuery(sql);
    System.out.println("Book details");
    while(rs.next())
    
        System.out.print(rs.getInt("BNUM")+"\t");
        System.out.print(rs.getString("BNAME")+"\t");
        System.out.print(rs.getFloat("BPRICE")+"\t");
        System.out.print(rs.getString("BAUTHOR")+"\t");
        System.out.println();
     


  catch(SQLException e)
  
    e.printStackTrace();
  
  finally
  
    DBUtilSelf.closeConnection();
   

  
 

此代码在 eclipse 上运行时不会打印 oracle 表中的数据。 输出是:

连接打开 图书详情

它没有进入while循环。也没有产生任何异常。我已确保表中的列名写入正确。仍然没有给出输出

包 com.cg.trg.utilself;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class DBUtilSelf 
 

 static Connection connection;
 static String url;
 static String username;
 static String password;

 static
 
    //load properties file...
    Properties prop =new Properties();
    FileInputStream fis;

    try
    
    fis=new FileInputStream("jdbc.properties");
    prop.load(fis);
    
   catch(IOException e)
    
System.out.println("Problem while loading properties file:"+e.getMessage());

     

 url=prop.getProperty("url");
 username=prop.getProperty("username");
password=prop.getProperty("password");

 
 public static Connection openConnection()
 
try
  
   connection=DriverManager.getConnection(url,username,password);
  
 catch(SQLException e)
 
  System.out.println("Error while opening connection"+e.getMessage());
 
return connection;
 

public static void closeConnection()

    if(connection!=null)
    
    try
    
    connection.close();
    
     catch(SQLException e)
      
    System.out.println("Error while closing connection:"+e.getMessage());
    
    
  
  

这是 DBUtilSelf.java 文件

【问题讨论】:

因为表是空的? 很明显,rs 没有给出任何数据。 从书中选择 *; BNUM BNAME BPRICE BAUTHOR ---------- -------- ---------- ------ -------------- 1001 Let Us C 1200 Yashvant Kanetkar 1002 Core JAVA 2100.65 H.Schild 1003 J2EE 2450 H.Schild 1004 计算机网络 2200 Tanenbaum 1005 操作系统 3290 Millan 1006 算法 1900 Coreman 1007 Complete C++ 1750.55 Yashvant Kanetkar 选择了 7 行。表格不为空 'SELECT BNUM FROM BOOK' 给出了什么? 它给出了所有的booknums BNUM ---------- 1001 1002 1003 1004 1005 1006 1007 【参考方案1】:

代码是正确的,但唯一的问题是在sql中创建表后,它没有提交。在 sql 中使用 commit 查询将更改保存在数据库中,以便它们可以通过 jdbc 可见。

【讨论】:

我认为这不可能。如果一个表没有提交到数据库,那么它在物理上是不可用的,即它不存在。由于它不可用/未提交,并且在这种情况下,如果尝试访问它,则会引发异常,例如:java.sql.SQLException: Table not found in statement [SELECT BNUM FROM BOOK] 对应于 check here。顺便说一句,这不是这种情况的解决方案。

以上是关于运行时的代码打开了 jdbc 连接,但没有打印表数据。这段代码有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

Java:单击按钮时的 JDBC 连接问题

求救:jdbc_odbc链接oracle数据库失败,代码如下,运行后,显示:常连接到数据库。 但没有抓到资料。

使用jdbc查询impala时的超时问题

一个mysql数据库, 最大可以支持多少个表数

PostgreSQL 对连接中的表数有限制吗?

我的 JDBC 程序编译成功但没有异常运行 [重复]