[英]Java get ResultSet from SQL Array is Failing
我試圖從數據庫中檢索電子郵件地址,但沒有成功。 我的代碼如下:
主要:
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:
卡亞曼評論說我的錯誤日志沒有顯示實際的異常。 因此,我已經刪除了錯誤記錄和捕獲功能。 這是我現在要進入終端的內容:
[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 Workbench內可以正常執行:
下圖提供了DBEasyQuery的一些其他支持代碼。 我將其從帖子中顯示中刪除了,因為它使帖子變得很長: http : //i.stack.imgur.com/WZDkL.png
我認為其中沒有錯誤,因為它可以很好地解決所有其他問題:
問題出在JDBC驅動程序中。 並非所有驅動程序都支持所有功能,並且您使用的驅動程序不支持此功能。
解決方案:找到支持該功能的其他驅動程序(如果存在)。
編輯:在驅動程序方面看起來不太好。 您可能必須以不同的方式執行查詢。
編輯#2:看來MySQL不支持ARRAY類型,因此您將需要以老式的方式進行操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.