如何在不知道列类型的情况下获取列的值
Posted
技术标签:
【中文标题】如何在不知道列类型的情况下获取列的值【英文标题】:How to get values of a column without knowing the column type 【发布时间】:2013-02-24 23:23:28 【问题描述】:我正在根据用户选择要在结果中显示的字段动态创建查询。问题是当要从数据库中检索数据时,我通常使用getXXX()
方法来检索适当的类型。但在这种情况下,我不知道合适的类型是什么,因为这些列是随机选择的。
有没有什么方法可以在不指定数据类型 XXX 的情况下获取字符串格式的数据?我正在使用 mysql 和 Servlet。
【问题讨论】:
getXXX().toString()
不起作用?
@deadlock - getXXX
是方法集群(getDate、getBytes、getFloat 等)的同义词。这不是一个真正的方法,当他不知道底层类型时,OP 正在询问使用特定 get 方法的替代方法。
是的,它可以,但我必须事先知道 xxx...想省力。
【参考方案1】:
您可以使用通用的getObject 方法:
获取当前行中指定列的值 ResultSet 对象作为 Java 编程语言中的 Object。
此方法将给定列的值作为 Java 返回 目的。 Java 对象的类型将是默认的 Java 对象 type 对应于列的 SQL 类型,在映射之后 JDBC 规范中指定的内置类型。如果该值为 SQL NULL,驱动返回一个Java null。
【讨论】:
thanx。我认为这会有所帮助。 如果他想要的只是一个字符串,为什么不简单地getString()
?【参考方案2】:
据我所知,如果您想要 Java String 对象中的结果,您可以简单地使用getString()
。我认为 MySQL 驱动程序负责反序列化您通过 getXXX()
指定的任何 Java 对象中的字节流。给定以下初始化脚本:
DROP TABLE IF EXISTS thing;
CREATE TABLE thing (
a_int int,
a_string text,
a_date date
);
INSERT INTO thing (a_int, a_string, a_date)
VALUES ('1234', 'Hello world', CURRENT_DATE() );
和代码:
public static void main(String[] args) throws Exception
MysqlDataSource db = new MysqlDataSource();
db.setDatabaseName("test");
Connection conn = db.getConnection("test", "test");
ResultSet res = conn.prepareStatement("SELECT * FROM thing").executeQuery();
res.next();
System.out.println("Get a int as a string: " + res.getString("a_int"));
它只是打印Get a int as a string: 1234
。您甚至可以将a_date
列作为Java int
,并在我的机器上转换为2013
。因此,绑定似乎发生在驱动程序从服务器检索到无类型字节流之后。有时转换会失败,例如,如果您在 TEXT
列上尝试 getInt()
。
【讨论】:
以上是关于如何在不知道列类型的情况下获取列的值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用机器人框架和 python 在不滚动的情况下获取所有匹配的元素?
在 DataFrame.groupby 的情况下,如何根据另一列的最大值获取列的值