2016-12-24 67 views
2

我是新來的Java和掙扎了一下。爲什麼此過程在MYSQL中運行,而不是在Java中運行?

我已經成立了一個程序在mysql中返回員工詳細信息輸入姓氏時:

CREATE PROCEDURE getEmployeeByLastName(IN in_last_name VARCHAR(16)) 
SELECT emp_no, first_name, last_name, gender, hire_date FROM oop_employees 
WHERE last_name = in_last_name; 

當我執行它這個工程在phpMyAdmin。

在我的Java的主要方法我要求用戶輸入姓氏......

System.out.println("Please enter the last name of the employee."); 
String last_name = keyboard.next(); 
Employee emp = getEmployeeByLastName(dbc.getConnection(), last_name);   
System.out.println(emp); 

getEmployeeByLastName是:

public static Employee getEmployeeByLastName(Connection conn, String lname) { 
    Employee emp = null; 
    try { 
     String sql = "CALL getEmployeeByLastName(\""+ lname +"\")"; 
     Statement st = conn.createStatement(); 
     ResultSet rs = st.executeQuery(sql);  
     while (rs.next())  
      emp = new Employee(rs.getInt("emp_no"), rs.getDate("birth_date"),rs.getString("first_name"),rs.getString("last_name"), rs.getString("gender"),rs.getDate("hire_date")); 
      rs.close(); 
      st.close(); 
    } 
    catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    return emp; 
} 

當我搜索一個姓,我得到幾個SQL異常錯誤,以及兩個錯誤在上面的代碼:

emp = new Employee(rs.getInt("emp_no"), rs.getDate("birth_date"),rs.getString("first_name"),rs.getString("last_name"), rs.getString("gender"),rs.getDate("hire_date")); 

和..

Employee emp = getEmployeeByLastName(dbc.getConnection(), last_name); 

我能夠創建其他程序,使用僱員類來顯示數據庫中的數據,這是我第一個需要用戶輸入的過程。

是否有一個明顯的原因,爲什麼這是在mysql中工作,但不是在eclipse中?所有幫助非常感謝,我發現這很難調試。請讓我知道是否需要更多信息。

編輯:

例外

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:959) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:898) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:887) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:862) 
at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1076) 
at com.mysql.jdbc.ResultSetImpl.getDate(ResultSetImpl.java:2034) 
+1

什麼是例外?發佈最小堆棧跟蹤 – developer

+1

在您的問題中包含例外 – Yousaf

+2

'rs。getDate(「birth_date」)' - 我不知道這是否是唯一的錯誤,但是您的過程不會獲取該列。 – Eran

回答

2

您查詢您oop_employees表中選擇5列:

SELECT emp_no, first_name, last_name, gender, hire_date FROM oop_employees 

但你的Java代碼試圖從ResultSet讀6列:

emp = new Employee(rs.getInt("emp_no"), rs.getDate("birth_date"),rs.getString("first_name"),rs.getString("last_name"), rs.getString("gender"),rs.getDate("hire_date")); 

你忘了,包括在birth_date列的SQL語句。

1

此問題,因爲JDBC代碼無法解析的結果集。該過程很好,但Java代碼需要修復。 SQL和結果集有所不同。正如其他評論員(@Eran)指出的那樣,您只需在SQL中選擇5列。

SELECT emp_no, first_name, last_name, gender, hire_date FROM oop_employees WHERE last_name = in_last_name; 

但您期待結果集查找6列。

emp = new Employee(rs.getInt("emp_no"), rs.getDate("birth_date"),rs.getString("first_name"),rs.getString("last_name"), rs.getString("gender"),rs.getDate("hire_date")); 

在SQL中添加「birth_date」列,然後重試。

另外,請在發佈問題時粘貼完整的堆棧跟蹤。您提供的堆棧跟蹤不完整。

相關問題