英文:
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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论