Java 正在将mysql.Array转换为字符串[]

Java 正在将mysql.Array转换为字符串[],java,mysql,Java,Mysql,我正在使用Java Mysql连接器,提取结果时遇到问题: 这是需要执行的查询和准备好的语句: String statement1 = " select sentence from sentences ; "; PreparedStatement preparedstatement = conn.prepareStatement(statement1); ResultSet res = preparedstatement.executeQuery(); 现在我尝试在数组中获取结果,因此我使用:

我正在使用Java Mysql连接器,提取结果时遇到问题:

这是需要执行的查询和准备好的语句:

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) 返回一个mysql.array,其中包含一个定位器,它是指向服务器上SQL数组的逻辑指针,(2)应该执行temp类型转换并返回字符串[],但是我遇到了这个错误

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)

有什么想法吗?

你应该反复浏览
结果集

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]);
List temp=new ArrayList();
String语句1=“从句子中选择句子”;
PreparedStatement PreparedStatement=conn.prepareStatement(语句1);
尝试
{
ResultSet res=preparedstatement.executeQuery();
while(res.next())
{
临时添加(res.getString(“句子”);
}
}
最后{
preparedstatement.close();
}
字符串[]temp2=临时数组(新字符串[0]);

MySQL没有数组类型,因此未实现此方法

请参见

中的,其中显示了如何从
结果集
检索数据

在你的情况下是这样的

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

根据大量的评论,您似乎对数据库的工作原理以及数组类型的含义有着根本性的误解,即使MySQL支持它(它不支持)

我想迭代ResultSet对象中的值,我可以使用getString()方法进行迭代,但是我想看看是否有直接的方法

查询数据库时,它会从表中返回一组与查询匹配的行。JDBC将其表示为
ResultSet
。要获得给定列的所有结果,必须遍历
ResultSet

List<String> myList = new ArrayList<String>();
while (res.next()) {
    myList.add(res.getString("sentence"));
} 
List myList=new ArrayList();
while(res.next()){
添加(res.getString(“句子”);
} 
没有快捷方式让
结果集为您执行此操作并返回
列表



编辑以添加:PostgreSQL中的数组类型(可能还有其他类型)是一个完全不同的beast。它允许您将数据数组存储在一行中,然后以这种方式检索。这就是
和关联的
数组
类是for。

我认为在执行
preparedstatement.executeQuery()之后
,数据已经在您这边,而不是服务器端。什么是表
语句
声明?@Rugal
在下面的语句中,ResultSet方法getArray返回存储在当前行的列ZIPS中的值,即java.sql.Array对象z:Array z=rs.getArray(“ZIPS”);变量z包含一个定位器,该定位器是指向服务器上SQL数组的逻辑指针;它不包含数组本身的元素。作为一个逻辑指针,z可用于操作服务器上的数组。
由于问题中OP链接到的文档在fir中进行了解释,因此该问题似乎与主题无关st句为什么这不适用于MySQL。@kolonel你能看到海报使用的是
postgres
而不是
MySQL
?这来自教程:@kolonel是的,第一句说:“注意:MySQL和Java DB目前不支持数组SQL数据类型”…更不用说,因为您的表定义中不可能包含该值。@BrianRoach,但它在下面的语句中指出,
,ResultSet方法getArray返回存储在当前行ZIP列中的值,即java.sql.Array对象z:Array z=rs.getArray(“ZIPS”);变量z包含一个定位器,它是指向服务器上SQL数组的逻辑指针;它不包含数组本身的元素。作为一个逻辑指针,z可用于操作服务器上的数组。
@BrianRoach还有此帖子
http://stackoverflow.com/questions/14935016/convert-a-result-set-from-sql-数组到字符串数组
显然,您也不明白MySQL和PostgreSQL是具有不同功能集的完全不同的数据库。
ArrayList
没有实现或扩展
array
。您编译了代码吗?这毫无意义。对不起,但是……为什么?这段代码从da获取所有值tabase table column并将它们存储在内存数组中…
array temp=new ArrayList();
(正如广告指出的那样)?请解释一下。(我认为这只是一个输入错误)我继续并修复了它;)大量的注释是因为我试图理解一些东西,我试图看看是否可以用某种方式完成某些事情。你答案中的代码是我已经知道的。ESP是错误的。这一点信息会大大改善你的问题;我们至少会立刻理解你的困惑。需要明确的是,您混淆了非MySQL数据库中可用的数据类型(以及访问它的方法/类)和Java中的数据结构(ResultSet)。您需要在代码中添加一个throws子句,因为除非您这样做,否则它将无法工作。似乎您对ResultSet类的工作方式有一个根本性的误解。那太弱了,我不是巨魔,从来没有。