Оператор вставки SQL без определения типов данных - PullRequest
1 голос
/ 14 февраля 2012

Местная школа попросила меня написать утилиту для экспорта базы данных для экспорта данных из популярной программы управления школой в ту, которая требуется правительству.Причина в том, что правительство принимает только ежеквартальные отчеты из своей собственной программы.

После ВСЕХ часов, потраченных только на выяснение отношений в плохо написанной правительственной базе данных, я, наконец, скомпилировал требования к операторам SQL, но у меня возникла проблема.

Из-за плохого проектирования и использования типов данных и столбцов в программе у меня возникают проблемы с динамическим сбором операторов вставки SQL.Есть ли способ создать один оператор SQL с данными (правильно отформатирован) без указания типа данных и вставить его в таблицу?Чтобы дать вам идею, есть 192 таблицы не менее чем с 20 столбцами в каждой.

Обновление: так работает моя программа.Собрать данные-> Сравнить необходимый тип данных столбца в таблице Excel-> Форматировать данные-> Создать оператор SQL-> Выполнить оператор

Ответы [ 2 ]

2 голосов
/ 14 февраля 2012

Вы можете заключить все в кавычки, так что оно будет передано в виде строки.Конечно, типы данных должны быть такими:

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)
0 голосов
/ 14 февраля 2012

Перебирайте, используя типы данных из метаданных. Если это не массив вариантов, а строка, вам нужно добавить в 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...