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

时间:2013-06-20 11:57:15

标签: java jdbc prepared-statement

我想在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] );
}

但我不想写setStringsetDatesetDouble。我想动态地做。 我怎么能这样做?

感谢。

3 个答案:

答案 0 :(得分:1)

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

  

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

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

答案 1 :(得分:1)

您可以使用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;
}

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

答案 2 :(得分: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)正在做的事情。