[英]How To determine the ResultSet Column type dynamically
我需要在运行时为数据库中的所有表动态生成INSERT stmt。 我正在一张一张地获取表内容(数据)并在运行时确定列类型,同时遍历ResultSet和ResultSetMetaData以便为字符串类型添加双引号(“)而不为非字符串类型的列添加相同的内容但是,在实现当前逻辑的情况下,它会忽略第一条记录,并且对于表中的所有剩余记录都可以正常工作。我知道它为什么起作用,因为在获取rs.getColumnType(int columnIndex)
我们需要给列名指定从1索引开始。但是无法构建逻辑,因此它也将检查第一行,而不是此时忽略它。
请参见下面的代码片段
if (rs != null) {
while (rs.next()) {
sqlString = new StringBuffer();
for (int i = 1; i <= columnCount; i++) {
Object obj = rs.getObject(i);
if (obj == null) {
sqlString.append("null");
sqlString.append(",");
}
else
{
int sqlTypes = rsmd.getColumnType(i);
switch (sqlTypes) {
case Types.VARCHAR:
sqlString.append("\"");
if (obj != null)
sqlString.append(rs.getString(i));
sqlString.append("\"");
sqlString.append(",");
break;
case Types.NULL:
sqlString.append("null");
sqlString.append(",");
break;
case Types.CHAR:
sqlString.append("\"");
if (obj != null)
sqlString.append(rs.getString(i));
sqlString.append("\"");
sqlString.append(",");
break;
case Types.TIMESTAMP:
sqlString.append("\"");
if (obj != null)
sqlString.append(rs.getTimestamp(i));
sqlString.append("\"");
sqlString.append(",");
break;
case Types.DOUBLE:
if (obj != null)
sqlString.append(rs.getDouble(i));
sqlString.append(",");
break;
case Types.INTEGER:
if (obj != null)
sqlString.append(rs.getInt(i));
sqlString.append(",");
break;
case Types.SMALLINT:
if (obj != null)
sqlString.append(rs.getInt(i));
sqlString.append(",");
break;
case Types.DECIMAL:
if (obj != null)
sqlString.append(rs.getBigDecimal(i));
sqlString.append(",");
break;
/*default:
if (obj != null)
sqlString.append(obj.toString());
sqlString.append(",");
break;*/
}
}
}
您是否尝试过使用do while循环,例如:
if (rs != null) {
do{
sqlString = new StringBuffer();
for (int i = 1; i <= columnCount; i++) {
Object obj = rs.getObject(i);
if (obj == null) {
sqlString.append("null");
sqlString.append(",");
}
else
{
int sqlTypes = rsmd.getColumnType(i);
switch (sqlTypes) {
case Types.VARCHAR:
sqlString.append("\"");
if (obj != null)
sqlString.append(rs.getString(i));
sqlString.append("\"");
sqlString.append(",");
break;
case Types.NULL:
sqlString.append("null");
sqlString.append(",");
break;
case Types.CHAR:
sqlString.append("\"");
if (obj != null)
sqlString.append(rs.getString(i));
sqlString.append("\"");
sqlString.append(",");
break;
case Types.TIMESTAMP:
sqlString.append("\"");
if (obj != null)
sqlString.append(rs.getTimestamp(i));
sqlString.append("\"");
sqlString.append(",");
break;
case Types.DOUBLE:
if (obj != null)
sqlString.append(rs.getDouble(i));
sqlString.append(",");
break;
case Types.INTEGER:
if (obj != null)
sqlString.append(rs.getInt(i));
sqlString.append(",");
break;
case Types.SMALLINT:
if (obj != null)
sqlString.append(rs.getInt(i));
sqlString.append(",");
break;
case Types.DECIMAL:
if (obj != null)
sqlString.append(rs.getBigDecimal(i));
sqlString.append(",");
break;
/*default:
if (obj != null)
sqlString.append(obj.toString());
sqlString.append(",");
break;*/
}
}while (rs.next());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.