当尝试从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成为假。
答案 0 :(得分:1)
在Oracle 11g(通常是Oracle版本)中,CHAR是固定宽度类型,如果给它一个小于给定宽度的值,它将用空格填充(如果只是转储表内容)。在这种情况下,您的密钥长度为3,而字符串“ 01”的长度为2,因此无法使用。
尝试使用VARCHAR2作为列类型,这是一个可变长度的字符串。