Java 正在将mysql.Array转换为字符串[]
我正在使用Java Mysql连接器,提取结果时遇到问题: 这是需要执行的查询和准备好的语句:Java 正在将mysql.Array转换为字符串[],java,mysql,Java,Mysql,我正在使用Java Mysql连接器,提取结果时遇到问题: 这是需要执行的查询和准备好的语句: String statement1 = " select sentence from sentences ; "; PreparedStatement preparedstatement = conn.prepareStatement(statement1); ResultSet res = preparedstatement.executeQuery(); 现在我尝试在数组中获取结果,因此我使用:
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类的工作方式有一个根本性的误解。那太弱了,我不是巨魔,从来没有。