簡體   English   中英

Java無法讀取if語句的數據ResultSet之一,getter返回“0”

[英]Java can't read one of data ResultSet for if statement, getter returns "0"

我有“用戶”和“報告”表。 有 3 種類型的用戶,“position_no”為 0(管理員)、1(經理)、2(職員)。

關系設置正確。

我想要

  • 向管理員顯示帶有 position_no 1 和 2 的報告。
  • 向經理顯示帶有 position_no 1 和 2 的報告。
  • 向職員顯示帶有 position_no 2 的報告。

我已經為此編寫了代碼。 我的問題是我無法檢測到哪個用戶登錄。 rs.getString("position_no"); 給出錯誤: “未報告的異常 SQLException” ,如果我嘗試捕獲,仍然相同。

如果我手動將 new1 定義為 0、1 或 2,它可以正常工作,但不能解決我的問題。 例如我定義為 0,如果登錄用戶是 3,他會看到為 0。我不想要這個。

“查看報告”的 jframe 窗口:jframe 窗口

用戶的 phpmyadmin 表:用戶表

用於報告的 phpmyadmin 表:報告表

作為替代方法,我將 getter 和 setter 添加到 login_form.java 然后設置為當前用戶。

如果我在同一個文件 (loginform) 中打印 getter,它會顯示正確的用戶 position_no。 如果我設置為 2 並在其他文件(如 clerk.java)上打印 getter,它會打印“0”而不是 2。為什么?

public void fillReportJTable(JTable table){       

    loginf.setUserTip(0);
  //System.out.println("Loginf value: " + loginf.getUserTip()); //getter shows 0 for all users
    //int new1 = loginf.getUserTip(); //temporary non-working solution with getter setter
    PreparedStatement st;
    ResultSet rs = null;
    String selectQuery = "SELECT * FROM `users` WHERE `position_no` = ?";

    //String selectQuery = "SELECT * FROM `reports`";

    //if(rs.next()){ //it gives error. works without it.

    //this gets position no from db then goes to if statement 

    String tip = rs.getString("position_no");
    //System.out.println("new1 degeri: " + new1);
    int new1 = Integer.parseInt(tip);

    if(new1==0){
        selectQuery = "SELECT * FROM `reports`";
    }
    if(new1==1){
        selectQuery = "SELECT * FROM `reports` WHERE `position_no` = 1";
    }
    if(new1==2){
        selectQuery = "SELECT * FROM `reports` WHERE `position_no` = 2";
    }
    //}

    try {
        st= mcas.getConnection().prepareStatement(selectQuery);
        rs= st.executeQuery();

        DefaultTableModel tableModel = (DefaultTableModel)table.getModel();

        Object[] row;
        while(rs.next()){
            row = new Object[5];
            row[0] = rs.getInt(1); // productid
            row[1] = rs.getString(2); //product name
            row[2] = rs.getString(3); //report topic
            row[3] = rs.getString(4); //report text
            row[4] = rs.getString(5); //position_no

            tableModel.addRow(row);
        }
    } catch (SQLException ex) {
        Logger.getLogger(CLIENT.class.getName()).log(Level.SEVERE, null, ex);
    }
}

這是 login_form.java 中的一些代碼:

            String tip = rs.getString("position_no");

            System.out.println(tip);
            int new1 = Integer.parseInt(tip);

            Login_Form loginf = new Login_Form(); //welcome yazisi icin
            //int girisdegeri = new1;
            loginf.setUserTip(new1); //reports icin user tip
            System.out.println("Loginf degeri: " + loginf.getUserTip());

login_form 頂部:

public class Login_Form extends javax.swing.JFrame {

private String publicusername; //username get set almak icin lazim
private int publicusertip; //user tipi alma see reports icin

login_form 中的 getter 和 setter:

public int getUserTip() {
return publicusertip;
}

public void setUserTip(int newName) {  // Usertip Setter    
this.publicusertip = newName;
}  

看起來您正在使用參數定義准備好的語句,但實際上並未設置該參數。 如果您不需要使用該參數,則只需將其用作您的第一個 sql 語句。

SELECT * FROM `users`

我還假設這里有一些釋義,因為看起來您實際上並沒有從當前或注釋的代碼中獲得結果集。 所以也許檢查你是否真的在執行語句,有或沒有參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM