我正在根据用户选择要在结果中显示的字段动态创建查询。问题是当要从数据库中检索数据时,我通常使用getXXX()
方法来检索适当的类型。但在这种情况下,我不知道合适的类型是什么,因为这些列是随机选择的。
有什么方法可以在不指定数据类型 XXX 的情况下获取字符串格式的数据?我正在使用 MySQL 和 Servlet。
您可以使用通用的getObject方法:
获取此 ResultSet 对象当前行中指定列的值作为 Java 编程语言中的 Object。
此方法将给定列的值作为 Java 对象返回。Java 对象的类型将是与列的 SQL 类型对应的默认 Java 对象类型,遵循 JDBC 规范中指定的内置类型的映射。如果该值为 SQL NULL,则驱动程序返回 Java NULL。
据我所知,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
列上。