【发布时间】:2017-04-15 06:51:22
【问题描述】:
我正在使用准备好的语句来插入 WHERE NOT EXISTS。我尝试了不同的方法,但它根本不起作用。
我用catch (SQLException sqle) 发现的错误是
java.sql.SQLException:准备查询时出错:未使用表
我的代码是:
try {
//hacer los inserts
sql = "INSERT INTO calendario (year, mes, dia, date) "
+ "SELECT * FROM (SELECT ? as year,? as mes ,? as dia,? as date) AS tmp "
+ "WHERE NOT EXISTS (SELECT * FROM calendario WHERE "
+ "year=? AND mes=? AND dia=?)";
injerto = conn.prepareStatement(sql);
injerto.setInt(1, year);
injerto.setInt(2, mes);
injerto.setInt(3, dia);
injerto.setDate(4, sqldate);
injerto.setInt(5, year);
injerto.setInt(6, mes);
injerto.setInt(7, dia);
injerto.addBatch();
injerto.executeBatch();
} catch (SQLException sqle) {
sqle.printStackTrace();
System.out.println("Calendario dice: me muero");
System.exit(0);
}
我正在使用 MariaDB,它会打印此错误:
原因:org.mariadb.jdbc.internal.util.dao.QueryException:准备查询时出错:未使用表
我也尝试过:
sql = "INSERT INTO calendario (year, mes, dia, date) "
+ "SELECT ?,?,?,? "
+ "WHERE NOT EXISTS ("
+ "SELECT * FROM calendario "
+ "WHERE year = ? AND mes = ? AND dia = ?)";
错误变化:
错误准备查询:您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的 'WHERE NOT EXISTS (SELECT * FROM calendario WHERE year = ? AND mes = ? AND dia = ' 附近使用正确的语法
请帮帮我。
【问题讨论】:
-
select 中没有 from 子句。
-
你可能想要
"INSERT INTO calendario (year, mes, dia, date) " + "VALUES(?,?,?,?) " + "WHERE NOT EXISTS (SELECT * FROM calendario WHERE " + "year=? AND mes=? AND dia=?)" -
您的数据架构和字段名称要么使用完整的西班牙语,要么使用完整的英语,不要混合使用!
-
建议您阅读
INSERTmariadb.com/kb/en/mariadb/insert 的语法这部分SQL 很奇怪:(SELECT ? as year,? as mes ,? as dia,? as date)您正在选择但不是从任何东西。 -
anio,fecha...到处都是实践...