繁体   English   中英

如何检测列类型并在JDBC中插入数据?

[英]How can I detect a column type and insert data in JDBC?

我想在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 ,或setDatesetDouble 我想动态地做。 我怎样才能做到这一点?

谢谢。

您可以使用setObject 它需要任何类型的对象,JDBC驱动程序可以解决这个问题。

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

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

您可以使用DatabaseMetaData类的getColumns方法来获取列的数据类型。 此方法返回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;
}

假设您的数据库中有一个有效的tableNamecolumnName ,那么ResultSet对象理想情况下应该只包含一行。

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

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)正在做的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM