如果我没有误解您的问题,您希望在 SQL 中生成一系列 INSERT INTO 命令,以将新元组添加到表中,并使用一些默认值(例如 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);
}
这个 main 方法完全符合我的预期:
INSERT INTO YOUR_TABLE_NAME(NULL,p1,NULL,i1,g1);
INSERT INTO YOUR_TABLE_NAME(NULL,p2,NULL,i2,g2);