2013-11-09 68 views
1

我試圖從數據庫中檢索電子郵件地址,但沒有成功。我的代碼如下:從SQL陣列Java獲取ResultSet失敗

主營:

System.out.println(PortfolioData.getEmails(58)); //So Far Returning null 

PortfolioData:

public static String[] getEmails(int i){  
    DebugMessage.M("Retrieving Email Records for Person Key Number: " + i); 
    eq.query("SELECT EmailAddresses" 
      + " FROM Emails as E" 
      + " JOIN People AS P ON E.PersonKey = P.PersonKey" 
      + " WHERE P.PersonKey = ?",i); 
    return (String[])eq.getOnceMultipleRows("EmailAddresses"); 
} 

DBEasyQuery:

public Object getOnceMultipleRows(String label){ 
    if(next()){ 
     try { 
      Array a = rs.getArray(label); 
      String[] x = (String[])a.getArray(); 
      smartClose(); 
      return x; 
      //return rs.getArray(label).getArray(); 
     } catch (SQLException e) { 
      DebugMessage.E("getOnceMultipleRows() Failed on Query: " + queryExecuted()); 
      DebugMessage.E("getOnceMultiple() Failed on Label: " + label); 
      notExecuted(e); 
     } 
    } 
    smartClose(); 
    return null; 
} 

這是我的日誌文件和錯誤:

MESSAGE: Retrieving Person Records for Person Key Number: 58 
MESSAGE: SharedConnection dziemba created 
SQLQUERY: SELECT AlphaID, FirstName, LastName, Street, City, State, Zip, Country, AcctType, SecID FROM People AS P JOIN Addresses AS A ON P.PersonKey = A.PersonKey LEFT JOIN Role AS R ON P.PersonKey = R.PersonKey WHERE P.PersonKey = 58 
MESSAGE: Retrieving Email Records for Person Key Number: 58 
SQLQUERY: SELECT EmailAddresses FROM Emails as E JOIN People AS P ON E.PersonKey = P.PersonKey WHERE P.PersonKey = 58 
ERROR: getOnceMultipleRows() Failed on Query: SELECT EmailAddresses FROM Emails as E JOIN People AS P ON E.PersonKey = P.PersonKey WHERE P.PersonKey = 58 
ERROR: getOnceMultiple() Failed on Label: EmailAddresses 
ERROR: 
The Following Query Was NOT Executed: 
SELECT EmailAddresses FROM Emails as E JOIN People AS P ON E.PersonKey = P.PersonKey WHERE P.PersonKey = 58 
Stack Trace: 
ERROR: sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
ERROR: sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
ERROR: sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
ERROR: java.lang.reflect.Constructor.newInstance(Unknown Source) 
ERROR: java.lang.Class.newInstance(Unknown Source) 
ERROR: com.mysql.jdbc.SQLError.notImplemented(SQLError.java:1334) 
ERROR: com.mysql.jdbc.ResultSetImpl.getArray(ResultSetImpl.java:1230) 
ERROR: com.mysql.jdbc.ResultSetImpl.getArray(ResultSetImpl.java:1247) 
ERROR: unl.cse.DBEasyQuery.getOnceMultipleRows(DBEasyQuery.java:218) 
ERROR: unl.cse.PortfolioData.getEmails(PortfolioData.java:136) 
ERROR: unl.cse.Main.main(Main.java:44) 
ERROR: 

Kayaman評論說我的錯誤日誌不顯示實際的異常。所以我刪除了我的錯誤日誌和捕獲。以下是我現在在終端獲得:

[Ljava.lang.String;@59966240 
java.sql.SQLFeatureNotSupportedException 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at java.lang.Class.newInstance(Unknown Source) 
    at com.mysql.jdbc.SQLError.notImplemented(SQLError.java:1334) 
    at com.mysql.jdbc.ResultSetImpl.getArray(ResultSetImpl.java:1230) 
    at com.mysql.jdbc.ResultSetImpl.getArray(ResultSetImpl.java:1247) 
    at unl.cse.DBEasyQuery.getOnceMultipleRows(DBEasyQuery.java:220) 
    at unl.cse.PortfolioData.getEmails(PortfolioData.java:136) 
    at unl.cse.Main.main(Main.java:44) 
Exception in thread "main" java.lang.NullPointerException 
    at unl.cse.DBEasyQuery.getOnceMultipleRows(DBEasyQuery.java:227) 
    at unl.cse.PortfolioData.getEmails(PortfolioData.java:136) 
    at unl.cse.Main.main(Main.java:44) 

查詢本身執行MySQL工作臺內的罰款: enter image description here

一些DBEasyQuery的額外支持的代碼可以在下面的圖中可以看出。我刪除它從後顯示,因爲它使後很長:http://i.stack.imgur.com/WZDkL.png

我不認爲在這一個錯誤,因爲它工作正常,一切我可以扔了:

+0

你的堆棧跟蹤似乎缺少實際的異常。這使得它在調試中毫無價值。 – Kayaman

+0

我剛編輯我的帖子,看來錯誤是:java.sql.SQLFeatureNotSupportedException –

回答

1

的問題在於JDBC驅動程序。並非所有驅動程序都支持所有功能,並且您使用的驅動程序不支持此功能。

解決方案:找到支持該功能的其他驅動程序(如果存在)。編輯: 它在駕駛方看起來不太好。您可能需要以不同的方式執行您的查詢。

編輯#2:它似乎MySQL doesn't support the ARRAY type所以你需要以舊式的方式做事情。

+0

謝謝!而該死的.. –