2014-01-14 49 views
-2

我使用的是Java的MySQL連接和我有結果提取一個問題:鑄造mysql.Array爲String []

這是一個必須執行的查詢和準備好的聲明:

String statement1 = " select sentence from sentences ; "; 
PreparedStatement preparedstatement = conn.prepareStatement(statement1); 
ResultSet res = preparedstatement.executeQuery(); 

現在,我試圖讓一個數組的結果,所以我用:

Array temp = res.getArray("sentence"); //(1) 
String[] temp2 = (String[])temp.getArray();  //(2) 

(1)返回一個包含一個定位,這是一個邏輯指向服務器上的SQL ARRAY一個mysql.array,和(2)應該d o一個溫度類型轉換並返回一個String [],但是我得到這個錯誤

java.sql.SQLFeatureNotSupportedException 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    at java.lang.Class.newInstance(Class.java:374) 
    at com.mysql.jdbc.SQLError.notImplemented(SQLError.java:1342) 
    at com.mysql.jdbc.ResultSetImpl.getArray(ResultSetImpl.java:1226) 
    at com.mysql.jdbc.ResultSetImpl.getArray(ResultSetImpl.java:1243) 
    at wikiparse.Wikiparse3.running(Wikiparse3.java:62) // this where I wrote (1) in my java file 
    at wikiparse.ActivateWikiparse3.main(ActivateWikiparse3.java:27) 

任何想法?

+0

我認爲在執行'preparedstatement.executeQuery()'後,數據已經在你身邊,而不是在服務器端。 – Rugal

+0

什麼是表'句子'聲明? –

+0

您的代碼片段不完整,但假設您在此調用之前調用'res.next()',因爲Javadoc指出,您的JDBC驅動程序不支持該操作。 –

回答

2

你應該重複througth的ResultSet

List<String> temp = new ArrayList<String>(); 
String statement1 = " select sentence from sentences "; 
PreparedStatement preparedstatement = conn.prepareStatement(statement1); 
try 
{ 
    ResultSet res = preparedstatement.executeQuery(); 

    while (res.next()) 
    { 
     temp.add(res.getString("sentence")); 
    } 
} 
finally{ 
    preparedstatement.close(); 
} 
String[] temp2 = temp.toArray(new String[0]); 
+0

'ArrayList'不實現或擴展'Array'。你編譯了你的代碼嗎? – ADS

+0

你說得對。我要糾正它! –

+0

這實際上沒有意義。 –

2

MySQL沒有數組類型,所以這種方法沒有實現。

http://forums.mysql.com/read.php?39,160525,160573

+0

這是來自教程:http://docs.oracle.com/javase/tutorial/jdbc/basics/array.html – kolonel

+1

@kolonel是的,和*第一句*說:「注意:MySQL和Java DB目前不支持ARRAY SQL數據類型「......更不用說了,因爲你的表定義中不可能有這樣的數據類型。 –

+0

@BrianRoach但它說這'在以下語句中,ResultSet方法getArray返回存儲在當前行的ZIPS列中的值作爲java.sql.Array對象z: Array z = rs.getArray(「ZIPS 「); 變量z包含一個定位器,它是服務器上SQL ARRAY的邏輯指針;它不包含ARRAY本身的元素。作爲一個邏輯指針,z可以用來操作服務器上的數組。# – kolonel

0

another tutorial這表明如何從ResultSet檢索數據。

你的情況,這將是

List<String> result = new LinkedList<>(); 
while (while (rs.next()) { 
    result.add(rs.getString(1)); 
} 
0

基礎上廣泛徵求意見,你似乎有一個數據庫是如何工作的,以及如果在MySQL支持它的陣列式甚至會意味着一個根本性的誤解(這它不是)。

我想遍歷ResultSet對象中的值,我可以使用getString()方法做到這一點,但我試圖看看是否有直接的方法來做到這一點。

當您查詢數據庫時,它將返回表中與查詢匹配的一組行。 JDBC將其表示爲ResultSet。要獲得所有給定列的結果,是的,你必須通過ResultSet迭代:

List<String> myList = new ArrayList<String>(); 
while (res.next()) { 
    myList.add(res.getString("sentence")); 
} 

有沒有快捷的方法有ResultSet爲你做這一點,並返回一個List

編輯add: PostgreSQL中的ARRAY類型(可能還有其他)是一個完全不同的野獸。它允許您將單個數據的數組存儲在一行中並以此方式進行檢索。這就是getArray()和相關Array類的用途。

+0

廣泛的評論是因爲我想了解一些東西,我試圖看看是否能以某種方式完成某件事情。你答案中的代碼就是我已經有的。 – kolonel

+0

ESP是在弗裏茨。那小小的信息會大大改善你的問題;我們至少會立即明白你的困惑。清楚的是,您將數據庫中的數據類型(以及訪問它的方法/類)混淆在數據庫中,該數據庫不是具有Java中的數據結構(ResultSet)的MySQL。 –

+0

你需要在代碼中添加一個throws子句,因爲除非你這樣做,否則不會工作。看來你對ResultSet類的工作原理有一個基本的誤解。 – kolonel