作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个函数,用户需要提供表名和存储值的 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”需要输入?
最佳答案
由于插入语句的结构可能会发生变化,因此可以动态生成语句。如果您不打算重用准备好的语句,那么使用它就没有真正的好处。以下是使用语句(而不是准备好的语句)动态生成语句的示例:
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());
}
}
请注意,此代码未执行正确的验证。例如,如果两个列表中的任何一个为空,就会发生错误。
关于java - 如何使用 Java 在数据库中插入值,其中要插入的参数数量可能会有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28724143/
java.lang.Throwable 的哪些子类可能被空语句抛出? 通过短语“空语句”,我指的是“无”、“分号”和“分号”: // .... A(); B(); C(); try { //
我是一名优秀的程序员,十分优秀!