0

我想在 jdbc 中插入数据。我写了这段代码:

int i=0;
while(i < columnCount ){
    i++; 
    stmt_ver.setString(i, x[i] );
    stmt_ver.setDate(i+1, x[i+1] );
    stmt_ver.setDouble(i+2, x[i+2] );
}

但是我不想写 setString,or setDateor setDouble。我想动态地做。我怎样才能做到这一点?

谢谢。

4

3 回答 3

2

您可以使用setObject。它接受任何类型的对象,JDBC 驱动程序会计算出来。

它给出了错误,例如将值转换为 BigDecimal 的错误

当然,数据类型仍然需要与实际的列类型匹配(或可转换)。

于 2013-06-20T12:02:21.140 回答
1

您可以使用该类的getColumns方法DatabaseMetaData来获取列的数据类型。此方法返回一个ResultSet对象。该对象的第 5 列包含该列的数据类型。

public int getType(Connection con, String tableName, String columnName) throws SQLException
{
    DatabaseMetaData dbmd = con.getMetaData();
    ResultSet rs = dbmd.getColumns(null, null, tableName, columnName);
    Integer type = null;
    while(rs.next())
    {
        type = rs.getInt(5);
    }

    return type;
}

假设您有一个有效的tableName并且columnName在您的数据库中,该ResultSet对象理想情况下应该只包含 1 行。

于 2013-06-20T12:07:49.397 回答
0

如果您以前不访问数据库,则必须访问元数据。

http://docs.oracle.com/javase/6/docs/api/java/sql/Connection.html#getMetaData()

获取列定义:

http://docs.oracle.com/javase/6/docs/api/java/sql/DatabaseMetaData.html#getColumns(java.lang.String,%20java.lang.String,%20java.lang.String,%20java .lang.String)

并为每一列读取类型并进行一些从 DB 列类型到 Java 类型的映射。这基本上就是 ORM(如 Hibernate)正在做的事情。

于 2013-06-20T12:03:02.633 回答