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

问题描述 投票:0回答:3

我正在根据用户选择要在结果中显示的字段动态创建查询。问题是,当要从数据库检索数据时,我通常使用

getXXX()
方法来检索适当的类型。但在这种情况下,我不知道合适的类型是什么,因为列是随机选择的。

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

java mysql database servlets
3个回答
12
投票

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

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

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


0
投票

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


0
投票
ResultRetMetadata then

,使用其名为

getColumnTypeName(int indexOfCol)
的方法来获取其类型,然后使用if else将其与数据类型进行比较,并使用适当的方法
getxxx()
    import java.sql.Types;
        // your code....
          ResultSetMetaData rsmd = resultset.getMetaData();
          int n = rsmd.getColumnCount();
          for(int i = 1; i <=n; i++){
              if(rsmd.getColumnTypeName(i) == Types.INTEGER){
                    System.out.println(resultset.getInt(i));
               }
              else if(rsmd.getColumnTypeName(i) == Types.VARCHAR){
                    System.out.println(resultset.getString(i));
               }
              // and so on ...
          }
        }

http://www.java2s.com/example/java-api/java/sql/types/other-0.html

可以查看此页面以供进一步参考:)

© www.soinside.com 2019 - 2024. All rights reserved.