java为oracle VARCHAR2返回空字符串值

use*_*812 5 java string oracle jdbc varchar2

我有以下代码似乎可以正常工作,但没有显示 personCode 字符串的任何值。PERSON_CODE 是 Oracle 9i 数据库中的 VARCHAR2。

我的项目使用 Java SE 1.7 和 ojdbc7.jar。我是 Java 新手,有人可以帮我解决这个问题吗?

private static void GetEmployee(String input) {
String output = "";
Connection con=null;
PreparedStatement stmt = null;
String sql ="SELECT ALL BADGE_NUMBER, PERSON_CODE FROM BADGETABLE WHERE BADGE_NUMBER = ?";

try {
    //load driver
    Class.forName("oracle.jdbc.driver.OracleDriver");
    con=DriverManager.getConnection("jdbc:oracle:thin:username/password@host:1521:database");

    //declaring statement
    stmt = con.prepareStatement(sql);
    stmt.setString(1, input);

    // execute query
    ResultSet rows = stmt.executeQuery();

    int i = 0;
    while(rows.next()) {
        i++;
        String badgeCode = rows.getString(1);
        String personCode = rows.getString(2);
        String personType = rows.getString(3);
        System.out.println("Badge number: " + badgeCode);
        System.out.println("Employee ID: " + personCode);
    }
    System.out.println("Number of results: " + i);


    rows.close();    // All done with that resultset
    stmt.close();  // All done with that statement
    con.close();  // All done with that DB connection


}
catch (SQLException e) {
    System.err.println(e);
} 
catch (ClassNotFoundException e) {
    System.err.println(e);
}

return;
}
Run Code Online (Sandbox Code Playgroud)

NIN*_*OOP 2

看看你的查询:

String sql = "SELECT ALL BADGE_NUMBER, PERSON_CODE FROM BADGETABLE WHERE BADGE_NUMBER = ?";
Run Code Online (Sandbox Code Playgroud)

下面的代码将抛出异常:

String badgeCode = rows.getString(1);
String personCode = rows.getString(2);
// there is no third column in your resultset
String personType = rows.getString(3); 
Run Code Online (Sandbox Code Playgroud)

您可以将查询更改为(如果您不想使用列名称):

String sql = "SELECT * FROM BADGETABLE WHERE BADGE_NUMBER = ?";
Run Code Online (Sandbox Code Playgroud)

或者指定第三列:

String sql = "SELECT ALL BADGE_NUMBER, PERSON_CODE ,PERSON_TYPE FROM BADGETABLE WHERE BADGE_NUMBER = ?";
Run Code Online (Sandbox Code Playgroud)

并使用列名称检索数据:

String badgeCode = rows.getString("BADGE_NUMBER");
String personCode = rows.getString("PERSON_CODE");
String personType = rows.getString("PERSON_TYPE");
Run Code Online (Sandbox Code Playgroud)

另外,将close()语句移到该块下finally

} finally {
 try { rows.close(); } catch (Exception e) {  }
 try { stmt.close(); } catch (Exception e) {  }
 try { con.close(); } catch (Exception e) {  }
}
Run Code Online (Sandbox Code Playgroud)