2017-08-03 24 views
1

我想運行一個JDBC項目,SF員工管理和工資 我張貼我的代碼,任何人都可以請幫java.lang.NumberFormatException在JDBC項目

package com.ibs.emp; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.ResultSetMetaData; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.Properties; 

public class DBConnectionTest { 

    static ResultSet rs; 
    static ResultSetMetaData rm; 
    static int ch, nof; 
    static double tax, total; 
    static EmpDetails empDetails = new EmpDetails(); 

    public static double gross(){ 
     if(EmpDetails.getHours() > 40)  
      return EmpDetails.getHours() * EmpDetails.getOrate(); 
     else 
      return EmpDetails.getHours() * EmpDetails.getRate(); 
    } 

    public static double net(){ 
     if(EmpDetails.getStatus().equalsIgnoreCase("married")) 
      return total *= 0.75; 
     else 
      return total *= 0.70; 
    } 

    public static void display(double total, double tax){ 
     System.out.println("Gross pay: " + total); 
     System.out.println("Net pay: " + tax); 
    } 

    public static void main(String[] args) throws NumberFormatException, IOException, SQLException, ClassNotFoundException { 

     DBConnection dbConnection = new DBConnection(); 

     System.out.println("Connecting to a selected database..."); 
     Connection con = dbConnection.getConnection(); 
     System.out.println("Connected database successfully..."); 
     Statement st = con.createStatement(); 
     BufferedReader bin = new BufferedReader(new InputStreamReader(System.in)); 

     while(true){ 
      System.out.println("Choose Option"); 
      System.out.println("1. Select"); 
      System.out.println("2. Insert"); 
      System.out.println("3. Update"); 
      System.out.println("4. Delete"); 
      System.out.println("5. Payslip"); 
      System.out.println("0. Exit"); 
      ch = Integer.parseInt(bin.readLine()); 
      if (ch==1){ 
       rs = st.executeQuery("select * from emp"); 
       rm = rs.getMetaData(); 
       nof = rm.getColumnCount(); 
       for(int i=1; i<=nof; i++) 
       { 
        System.out.print(rm.getColumnName(i)+"\t\t"); 
       } 
       System.out.println(); 
       while(rs.next()) 
       { 
        for(int i=1; i<=nof; i++) 
        { 
         System.out.print(rs.getString(i) +"\t\t"); 
        } 
        System.out.println(); 
       } 
      } 
      else if(ch==2) 
      { 
       System.out.println("Enter Name"); 
       empDetails.setEmp_name(bin.readLine()); 
       System.out.println("Enter Designation"); 
       empDetails.setEmp_designation(bin.readLine()); 
       System.out.println("Enter Emp_age"); 
       empDetails.setEmp_age(bin.read()); 
       System.out.println("Enter Salary"); 
       empDetails.setEmp_salary(bin.read()); 
       System.out.println("How many hours worked?"); 
       empDetails.setHours(bin.read()); 
       System.out.println("Rate of pay?"); 
       empDetails.setRate(bin.read()); 
       System.out.println("Over time rate?"); 
       empDetails.setOrate(bin.read()); 
       System.out.println("Married or Single?"); 
       empDetails.setStatus(bin.readLine()); 
       total = gross(); 
       tax = net(); 

       st.execute("insert into emp values('"+empDetails.getEmp_name()+"','"+empDetails.getEmp_age()+"','"+empDetails.getEmp_designation()+"','"+empDetails.getEmp_salary()+"','"+empDetails.getStatus()+"','"+empDetails.getOrate()+"','"+empDetails.getRate()+"','"+empDetails.getHours()+"','toatal','tax')"); 
       System.out.println("1 Record inserted"); 
      } 
      else if(ch==3) 
      { 
       System.out.println("Enter Emp_id"); 
       empDetails.setEmp_id(bin.read()); 
       System.out.println("Enter Name"); 
       empDetails.setEmp_name(bin.readLine()); 
       System.out.println("Enter Designation"); 
       empDetails.setEmp_designation(bin.readLine()); 
       System.out.println("Enter Emp_age"); 
       empDetails.setEmp_age(bin.read()); 
       System.out.println("Enter Salary"); 
       empDetails.setEmp_salary(bin.read()); 
       System.out.println("How many hours worked?"); 
       empDetails.setHours(bin.read()); 
       System.out.println("Rate of pay?"); 
       empDetails.setEmp_name(bin.readLine()); 
       System.out.println("Over time rate?"); 
       empDetails.setEmp_name(bin.readLine()); 
       System.out.println("Married or Single?"); 
       empDetails.setEmp_name(bin.readLine()); 
       total = gross(); 
       tax = net(); 

       st.execute("update emp set emp_name='"+empDetails.getEmp_name()+"',emp_age='"+empDetails.getEmp_age()+"',emp_designation='"+empDetails.getEmp_designation()+"',emp_salary='"+empDetails.getEmp_salary()+"',status='"+empDetails.getStatus()+"',orate='"+empDetails.getOrate()+"',rate='"+empDetails.getRate()+"',hours='"+empDetails.getHours()+"',taotal='toatal',tax='tax' where emp_id ="+empDetails.getEmp_id()); 
       System.out.println("1 Record Updated"); 

      } 
      else if(ch==4) 
      { 
       System.out.println("Enter Emp_id. to Delete :"); 
       empDetails.setEmp_id(bin.read()); 
       st.execute("delete from emp where eno ="+empDetails.getEmp_id()); 
       System.out.println("Record Deleted"); 
      } 
      else if(ch==5) 
      { 
       System.out.println("Enter Emp_id"); 
       empDetails.setEmp_id(bin.read()); 
       rs = st.executeQuery("select * from emp"); 
       rm = rs.getMetaData(); 
       nof = rm.getColumnCount(); 
       for(int i=1; i<=nof; i++) 
       { 
        System.out.print(rm.getColumnName(i)+"\t\t"); 
       } 
       System.out.println(); 
       while(rs.next()) 
       { 
        for(int i=1; i<=nof; i++) 
        { 
         System.out.print(rs.getString(i) +"\t\t"); 
        } 
        System.out.println(); 
       } 
       display(total, tax); 
      } 
      else if(ch==0) 
      { 
       bin.close(); 
       con.close(); 
       System.exit(0); 
      } 
     } 
    } 
} 

和我得到跟隨錯誤。 控制檯

Exception in thread "main" java.lang.NumberFormatException: For input string: "" 
    at java.lang.NumberFormatException.forInputString(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at com.ibs.emp.DBConnectionTest.main(DBConnectionTest.java) 

任何建議都歡迎,請大家幫忙

+4

空字符串不能格式化爲數字 – Jens

+4

請用事先準備好的聲明,而不是,你的代碼是開放的SQL注入 –

+0

@rabbitguy 。否,那裏的錯誤必須在main直接調用'Integer.valueOf()'看到堆棧跟蹤的行中。我想這是在這一行:'ch = Integer.parseInt(bin.readLine());'只輸入EOL的地方。 OP調用'rs.getString(i)'不需要將其解析爲int – Jens

回答

0

你必須在運行你的代碼,通過一些整數值,試圖通過一些參數運行一段時間。如果您使用的是Eclipse IDE,那麼您必須運行配置並單擊參數選項卡來傳遞參數。

0

我認爲這是由於沒有選擇選項造成的。例如,如果用戶只是點擊回車而沒有選擇一個選項,就可能發生這種情況。

嘗試更換行:

ch = Integer.parseInt(bin.readLine()); 

通過

String readLine = bin.readLine(); 
ch = Integer.parseInt(readLine != null && !readLine.isEmpty() ? readLine : "0");