我正在创建一个函数,用户需要提供表名和存储值的json文件的路径,并将其插入数据库: insertData(String tablename, String jsonFilePath)
现在,如果我事先知道要插入的值的数量是多少,那么创建一个类似以下内容的PreparedStatement就很容易了:
String strQuery = "INSERT INTO tablename VALUES (?, ?)";
PreparedStatement stmt = conn.prepareStatement(strQuery);//prepare the SQL Query
stmt.setString(1, "abc");//insert homeid
stmt.setInt(2, "def");//insert featureid.
stmt.executeQuery();//execute query
但是,由于我事先不知道表名是什么,并且每个表的列数可能会有所不同,因此我该如何处理它,因为我需要在需要放置的地方提前创建SQL查询字符串“ strQuery”这 ?
由于insert语句的结构可能会更改,因此可以动态生成语句。如果您不打算重用准备好的语句,则没有任何真正的好处。以下是使用语句(与准备好的语句相反)动态生成语句的示例:
public boolean insert(Connection conn, String table, List<String> columns, List<String> values) throws SQLException {
StringBuilder sb = new StringBuilder();
sb.append("INSERT INTO ");
sb.append(table);
sb.append(" (");
// add columns
Iterator<String> it = columns.iterator();
sb.append(it.next());
while(it.hasNext()) {
sb.append(',');
sb.append(it.next());
}
sb.append(") VALUES (");
// add values
it = values.iterator();
sb.append(it.next());
while(it.hasNext()) {
sb.append(',');
sb.append(it.next());
}
sb.append(");");
// insert
try (Statement stmt = conn.createStatement()) {
return stmt.execute(sb.toString());
}
}
请注意,此代码不会执行正确的验证。例如,如果两个列表中的任何一个为空,将发生错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句