Если я не понял вашего вопроса, вы хотите сгенерировать последовательность команд INSERT INTO в SQL, чтобы добавить новые кортежи в таблицу, содержащие поля, которые не были переданы во вход вашей программы, с некоторым значением по умолчанию (например, NULL). Итак, в вашем примере вы хотите сгенерировать следующий оператор SQL:
INSERT INTO YOUR_TABLE_NAME(NULL,p1,NULL,i1,g1);
INSERT INTO YOUR_TABLE_NAME(NULL,p2,NULL,i2,g2);
Затем эту функцию можно реализовать следующим образом:
public static String insertOptional(int[] inputColumns, String[][] data) {
// start of the simple algorithm
final String tableName = "YOUR_TABLE_NAME";
final int columnsOfTable = 5; // as in your example
StringBuilder sqlStatement = new StringBuilder();
for (String[] tuple : data) {
sqlStatement.append("INSERT INTO ")
.append(tableName)
.append("(");
int inputColumnIndex = 0;
for (int columnIndex = 1; columnIndex <= columnsOfTable; columnIndex++) {
if (columnIndex == inputColumns[inputColumnIndex]) {
sqlStatement.append(tuple[inputColumnIndex]);
inputColumnIndex++;
} else {
// replace "NULL" with your default value for
// fields that are not given as input
sqlStatement.append("NULL");
}
if (columnIndex < columnsOfTable)
sqlStatement.append(",");
}
sqlStatement.append(");\n");
}
return sqlStatement.toString();
}
, и ваш пример может быть выполняется следующим образом:
public static void main(String[] args) {
int[] inputColumns = { 2, 4, 5 };
String[][] data = { { "p1", "i1", "g1" }, { "p2", "i2", "g2" } };
String sqlStatement = insertOptional(inputColumns, data);
System.out.println(sqlStatement);
}
Этот основной метод выводит именно то, что я ожидал:
INSERT INTO YOUR_TABLE_NAME(NULL,p1,NULL,i1,g1);
INSERT INTO YOUR_TABLE_NAME(NULL,p2,NULL,i2,g2);