我有一个由表的列名组成的列表
String tableName="employee";
ResultSet rs = Statement.executeQuery("SELECT * FROM"+tableName);
ResultSetMetaData rmd = rs.getMetaData();
int columnCount = rmd.getColumnCount();
List columnsList = new ArrayList();
for (int i = 1; i <= columnCount; i++) {
columnsList.add(rmd.getColumnName(i));
}
列出值=[一些值];
now columnsList =[emp_id, name, salary, department];
现在我想使用这些列名编写插入查询。但我不想对列名进行硬编码,我想从列表中获取这些名称并将它们传递给列名,例如
String subQuery= "insert into"+tableName+......here i want to get column names from list.....+.......here values from another list......;
有什么办法可以得到这个吗
最佳答案
一直在谷歌搜索我的#@$寻找代码shippet来动态生成元数据形式的JDBC插入语句。引用generateInsertStatements()
private static void generateInsertStatements(Connection conn, String tableName)
throws Exception {
log("Generating Insert statements for: " + tableName);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM " + tableName);
ResultSetMetaData rsmd = rs.getMetaData();
int numColumns = rsmd.getColumnCount();
int[] columnTypes = new int[numColumns];
String columnNames = "";
for (int i = 0; i < numColumns; i++) {
columnTypes[i] = rsmd.getColumnType(i + 1);
if (i != 0) {
columnNames += ",";
}
columnNames += rsmd.getColumnName(i + 1);
}
java.util.Date d = null;
PrintWriter p = new PrintWriter(new FileWriter(tableName + "_insert.sql"));
p.println("set sqlt off");
p.println("set sqlblanklines on");
p.println("set define off");
while (rs.next()) {
String columnValues = "";
for (int i = 0; i < numColumns; i++) {
if (i != 0) {
columnValues += ",";
}
switch (columnTypes[i]) {
case Types.BIGINT:
case Types.BIT:
case Types.BOOLEAN:
case Types.DECIMAL:
case Types.DOUBLE:
case Types.FLOAT:
case Types.INTEGER:
case Types.SMALLINT:
case Types.TINYINT:
String v = rs.getString(i + 1);
columnValues += v;
break;
case Types.DATE:
d = rs.getDate(i + 1);
case Types.TIME:
if (d == null) d = rs.getTime(i + 1);
case Types.TIMESTAMP:
if (d == null) d = rs.getTimestamp(i + 1);
if (d == null) {
columnValues += "null";
}
else {
columnValues += "TO_DATE('"
+ dateFormat.format(d)
+ "', 'YYYY/MM/DD HH24:MI:SS')";
}
break;
default:
v = rs.getString(i + 1);
if (v != null) {
columnValues += "'" + v.replaceAll("'", "''") + "'";
}
else {
columnValues += "null";
}
break;
}
}
p.println(String.format("INSERT INTO %s (%s) values (%s)\n/",
tableName,
columnNames,
columnValues));
}
p.close();
}
附加Metadata Example :
关于java - 使用元数据在 mysql 中插入查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27123521/