当地一所学校要求我编写一个数据库导出实用程序,将数据从一个受欢迎的学校管理程序导出到政府要求的程序。原因是政府只接受自己计划的季度报告。
在用了很多时间来计算写得不好的政府数据库中的关系之后,我终于编写了我的SQL语句要求,但是我遇到了问题。
由于程序中数据类型和列的设计和使用不佳,我无法动态组合SQL插入语句。有没有办法用数据(格式正确)创建单个SQL语句而不指定数据类型并将其插入表中? 为了给你一个想法,有192个表,每个表至少有20列。
更新:这是我的程序目前的工作方式。 收集数据 - >在Excel工作表中比较所需的列数据类型 - >格式数据 - >生成SQL语句 - >执行语句
答案 0 :(得分:2)
您可以引用所有内容,以便将其作为字符串传递。当然,数据类型必须是马赫:
create table testDataType(
myInt int,
myDateTime datetime,
myfloat numeric(5,2))
insert into testDataType values ('1','01/01/2012','5.3')
(1 row(s) affected)
答案 1 :(得分:0)
循环使用元数据中的数据类型。如果它不是变量数组并且它是字符串,则必须添加parseInt或类似的东西。
String selectStatement = "insert into wide_table (b1,b2,b3....) values (?,?,?.....) ";
PreparedStatement prepStmt = con.prepareStatement(selectStatement);
ResultSet rs = stmt.executeQuery("SELECT top 1 * FROM WIDE_TABLE");
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
for(int i =0;i<numerOfColumns;i++)
{
String x = rsmd.getColumnType(numerOfColumns)
if(x.equals("varchar"))
{
prepStmt.setString(numerOfColumns, data[numerOfColumns]);
}
else if(x.equals("int"))
{
prepStmt.setInt(numerOfColumns, data[numerOfColumns]);
}
....
}
ResultSet rs2 = prepStmt.executeQuery();