8

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

有什么方法可以在不指定数据类型 XXX 的情况下获取字符串格式的数据?我正在使用 MySQL 和 Servlet。

4

2 回答 2

12

您可以使用通用的getObject方法:

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

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

于 2013-03-09T12:19:28.050 回答
0

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

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列上。

于 2013-03-09T12:32:02.760 回答