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

时间:2013-03-09 12:16:35

标签: java mysql database servlets

我正在根据用户选择要在结果中显示的字段动态创建查询。问题是,当要从数据库中检索数据时,我通常使用getXXX()方法来检索适当的类型。但在这种情况下,我不知道适当的类型是什么,因为列是随机选择的。

有没有办法在不指定数据类型XXX的情况下以字符串格式获取数据?我正在使用MySQL和Servlets。

2 个答案:

答案 0 :(得分:12)

您可以使用通用getObject方法:

  

获取当前行中指定列的值   ResultSet对象作为Java编程语言中的Object。

     

此方法将返回给定列的值作为Java   宾语。 Java对象的类型将是默认的Java对象   类型对应于列的SQL类型,遵循映射   JDBC规范中指定的内置类型。如果值是   SQL NULL,驱动程序返回Java null。

答案 1 :(得分:0)

据我所知,如果你想在Java String对象中得到结果,你可以简单地使用getString()。我认为MySQL驱动程序负责通过getXXX()在您指定的任何Java对象中反序列化字节流。给出以下init脚本:

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。因此,在驱动程序从服务器检索到无类型的字节流后,似乎绑定发生。有时转换失败,例如,如果您在getInt()列上尝试TEXT