我正在根据用户选择要在结果中显示的字段动态创建查询。问题是,当要从数据库中检索数据时,我通常使用getXXX()
方法来检索适当的类型。但在这种情况下,我不知道适当的类型是什么,因为列是随机选择的。
有没有办法在不指定数据类型XXX的情况下以字符串格式获取数据?我正在使用MySQL和Servlets。
答案 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
。