如何在使用rs.getString时修复“终止”

时间:2019-09-10 21:02:02

标签: java sql

当尝试从SQL数据库中提取数据时,我进入了Java控制台。

我可以在prepareStatement中手动输入ID,但是不能使用setString与prepareStatement一起使用。

我还没有尝试太多,但是我确实发现问题在while语句内。 rs.next在应返回true时返回false。 SQL中的信息已经提交,我可以使用读取整个表的函数调用java中的所有信息。

getemployeeDataById("01");
private static void getemployeeDataById(String e_id) {
    DBConnection dbConnection = DBConnection.getInstance();
    PreparedStatement ps;

    try {
        ps = dbConnection.getConnection().prepareStatement("select * from employee where E_ID = ?");
        ps.setString(1, e_id);
        ResultSet rs = ps.executeQuery();

        while (rs.next()) {
            System.out.println(rs.getString("ename"));
        }
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

SQL

CREATE TABLE EMPLOYEE
(E_ID CHAR(3) PRIMARY KEY,
ENAME CHAR(25),
DOB CHAR(25),
EMAIL CHAR(25),
PHONE CHAR(25),
ADDRESS CHAR(25));

INSERT INTO EMPLOYEE
VALUES
('01','JEREMY MANN','12/23/1992','jeremy@jeremy.com','317-528-1234','123 CandyCane Lane');

我希望在控制台中输出该名称,因此在本示例中为“ JEREMY MANN”。代码运行,然后在Eclipse Java控制台中显示Application [Java Application]。在while语句中遇到了问题,但是我不确定是什么原因导致rs.next成为假。

1 个答案:

答案 0 :(得分:1)

在Oracle 11g(通常是Oracle版本)中,CHAR是固定宽度类型,如果给它一个小于给定宽度的值,它将用空格填充(如果只是转储表内容)。在这种情况下,您的密钥长度为3,而字符串“ 01”的长度为2,因此无法使用。

尝试使用VARCHAR2作为列类型,这是一个可变长度的字符串。