Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL集是什么Java类?_Java_Sql_Mariadb - Fatal编程技术网

SQL集是什么Java类?

SQL集是什么Java类?,java,sql,mariadb,Java,Sql,Mariadb,我有一个简短的问题。在java中执行SQL查询时,我使用什么方法从结果集中获取SQL集? 如果我有这样一张桌子: 创建表mytable(id int,myset set(“value0”、“value1”、“value2”) 在Java中如何获取myset列中的值?它是一个字符串还是一个列表或其他什么 编辑:我之所以发布这个问题,是因为我在其他任何地方都找不到答案,也因为我目前没有办法测试它。我想这是MySQL设置的东西 它不是JDBC的一部分,但是JDBC为JDBC驱动程序提供了支持非标准类型

我有一个简短的问题。在java中执行SQL查询时,我使用什么方法从结果集中获取SQL集? 如果我有这样一张桌子:

创建表mytable(id int,myset set(“value0”、“value1”、“value2”)

在Java中如何获取
myset
列中的值?它是一个字符串还是一个列表或其他什么


编辑:我之所以发布这个问题,是因为我在其他任何地方都找不到答案,也因为我目前没有办法测试它。

我想这是MySQL设置的东西

它不是JDBC的一部分,但是JDBC为JDBC驱动程序提供了支持非标准类型的工具。要设置它们,请执行以下操作:

preparedStatement.setObject(idx/name, value, targetSqlType);
其中targetSqlType是可选的(如果省略,则使用
value
的类型来尝试找出它),以及一个int。应该有什么值?¯\(ツ)/“-让我们希望JDBC驱动程序有一个int常量。
value
应该是什么?”\(ツ)/“”-mysql JDBC驱动程序的文档应该告诉您,因为JDBC规范不会告诉您

要获取它们,请执行以下操作:

resultSet.getObject(idx/colname, SomeType.class);
这里,同样,什么
SomeType
应该是由MySQL JDBC驱动程序决定的

请注意,MySQL的“set list”的实现是作为一个具有单个long(64位)值的位集实现的。然后,可能传递longs,或者可能传递
位集
,但最有可能的是MySQL JDBC驱动程序根本不支持这一点

根据MySQL JDBC驱动程序(出于某种原因称为Connector/J)文档

这对我来说似乎很奇怪。试试看:做一个集合,集合一些东西,然后去查询它

编辑:还可以查看文档,它似乎建议您只..
.setString(1,“梅花,黑桃”)
,您可以使用
.getString(1)
获得它们,它将返回
“梅花,黑桃”
。所以,这些东西中没有逗号,而且性能极度缺乏,我猜?Oof


好消息是,您可以与JDBC中的MySQL集类型进行交互。坏消息是,以最愚蠢的方式进行交互。

底线是,JDBC规范不包含此数据类型,因此您要受特定JDBC驱动程序及其版本的支配。@TheImpler这就是我在MySQL JDBC驱动程序文档中查找它的原因:)当以SQL文本文本形式显示设置值的示例(例如,
'
'one'
'two'
'two'
,以及
'one,two'
)的文档开始时,为什么
列的值作为
字符串返回的信息看起来很奇怪?@Andreas它是SET,而不是ENUM.eNUM是一个单值。据我所知,在MySQL中,“SET”类似于java.util.EnumSet。它可能以与链接文档中相同的方式在JDBC之间传递(我将更新我的答案并包含该链接,它似乎也很相关),但我们在java中不使用数组,比如:
int[]x=“1,2,3,4”
两者都有。我本来希望
java.sql.Array
或自定义数据类型。这也是非常低效的。在磁盘上,这些东西都是一个很长的。JDBC应该更喜欢高性能的代码。但是,MySQL是一个垃圾。你看过我链接的文档了吗?它清楚地说明了这一点“一个
SET
是一个字符串对象,可以有零个或多个值,每个值都必须从允许值列表中选择”。因此,是的,我同意Java等价物将是一个
EnumSet
。但它接着说:“例如,一个列指定为
SET('one','two'))NOTNULL
可以具有以下任意值:
'
'one'
'two'
、或
'one,two'
“数据类型为字符串类型,列为”值"以字符串形式返回,集合中存在逗号分隔的值列表。这是什么数据库方言?Oracle?SQL Server?MySQL?PostgreSQL?其他?请标记适当的方言。Andreas这是MariaDB。现在问题无缘无故地结束了。Andreas问题从一开始就用SQL标记。我知道它是正如从一开始就标记的SQL一样,但是
SET
不是标准的SQL类型,因此我们需要知道您使用的是哪种专有方言,这样我们就可以充分回答您的问题。我们当然不必搜索所有的通用方言来了解您的想法。正如下面的相关问题所示,您将
数据类型设置为
字符串
,当集合中存在多个值时,使用逗号分隔: