SQL insert语句没有定义数据类型

时间:2012-02-14 11:54:44

标签: java sql ms-access dynamic

当地一所学校要求我编写一个数据库导出实用程序,将数据从一个受欢迎的学校管理程序导出到政府要求的程序。原因是政府只接受自己计划的季度报告。

在用了很多时间来计算写得不好的政府数据库中的关系之后,我终于编写了我的SQL语句要求,但是我遇到了问题。

由于程序中数据类型和列的设计和使用不佳,我无法动态组合SQL插入语句。有没有办法用数据(格式正确)创建单个SQL语句而不指定数据类型并将其插入表中? 为了给你一个想法,有192个表,每个表至少有20列。

更新:这是我的程序目前的工作方式。 收集数据 - >在Excel工作表中比较所需的列数据类型 - >格式数据 - >生成SQL语句 - >执行语句

2 个答案:

答案 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();