【问题标题】: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...想省力。

标签: java mysql database servlets


【解决方案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()

【讨论】:

    猜你喜欢
    • 2013-05-04
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 2016-12-03
    • 2010-10-21
    相关资源
    最近更新 更多