英文:
What Java Class are SQL Sets?
问题
当我在Java中执行SQL查询时,我要使用哪个方法从结果集中获取SQL集合?
因此,如果我有一个像这样的表格:
CREATE TABLE mytable (id int, myset set("value0","value1","value2"));
我如何在Java中获取myset
列中的值?它只是一个字符串吗,还是一个列表,或者是其他什么东西?
英文:
When I do an SQL query in java what method do I use to get an SQL set from the result set?
So if I have a table like this:<br>
CREATE TABLE mytable (id int, myset set("value0","value1","value2"));
<br>
How would I get the value in the myset
column in Java? Would it just be a string or would it be a list or something else?
答案1
得分: 2
我猜这是MySQL的SET功能?
这不是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位)值的位集。可能传递long值,或者可能是BitSet
,但很可能MySQL JDBC驱动程序根本不支持这个。
根据MySQL JDBC驱动程序(因某种原因称为Connector/J)的文档,它是用一个字符串来设置和返回的。
这对我来说看起来很奇怪。试一试:创建一个set,设置一些值,然后进行查询。
编辑:另请参阅MySQL SET类型文档,似乎暗示你只需使用.setString(1, "clubs,spades")
,然后可以使用.getString(1)
获取它们,返回值为"clubs,spades"
。所以,在这些东西中没有逗号,性能也极其缺乏,我猜是这样?哎呀。
好消息是,你可以通过JDBC与MySQL的SET类型进行交互。坏消息是,以最愚蠢的方式可能实现。
英文:
I assume this is MySQL's SET thing?
It's not part of JDBC, but JDBC has facilities for JDBC drivers to offer support for non-standard types. To set them:
preparedStatement.setObject(idx/name, value, targetSqlType);
where targetSqlType is optional (if omitted, the type of value
is used to try to figure it out), and an int. What value should be there? ¯\(ツ)/¯ - Let's hope the JDBC driver has an int constant. What should value
be? ¯\(ツ)/¯ - the docs of the mysql JDBC driver should tell you, because the JDBC spec won't.
To fetch them:
resultSet.getObject(idx/colname, SomeType.class);
Where, again, what SomeType
is supposed to be is up to the MySQL JDBC driver.
Note that the implementation of MySQL's 'set list' is as a bitset with a single long (64-bit) value. Possibly then, pass longs, or maybe BitSet
, but most likely the MySQL JDBC driver just doesn't support this at all.
According to the MySQL JDBC driver (which is called Connector/J for some reason) documentation it is set with, and returns, a String.
That seems bizarre to me. Give it a try: Make a set, set a few things, and go query it.
EDIT: See also the MySQL SET type docs, which seem to suggest you just.. .setString(1, "clubs,spades")
and that you get em with .getString(1)
which would return "clubs,spades"
. Sooo, no commas in those things and excruciating lack of performance, I guess? Oof.
The good news is, you can interact with MySQL SET types from JDBC. The bad news is, in the most silly way possible.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论