如何在不知道列类型的情况下获取列的值

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 的情况下,如何根据另一列的最大值获取列的值

如何在不命名所有列的情况下合并两个表?

如何在不单独指定所有列的情况下对所有列的 SQL 结果进行排序?

如何在不重复列的情况下合并 Pandas 数据框