java.sql.SQLException:准备查询时出错:未使用任何表
java.sql.SQLException: Error preparing query: No tables used
我正在使用准备好的语句来插入 WHERE NOT EXISTS。我尝试了不同的方法,但根本行不通。
我用 catch (SQLException sqle)
捕获的错误是
java.sql.SQLException: Error preparing query: No tables used
我的代码是:
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,它打印出这个错误:
Caused by: org.mariadb.jdbc.internal.util.dao.QueryException: Error preparing query: No tables used
我也尝试过:
sql = "INSERT INTO calendario (year, mes, dia, date) "
+ "SELECT ?,?,?,? "
+ "WHERE NOT EXISTS ("
+ "SELECT * FROM calendario "
+ "WHERE year = ? AND mes = ? AND dia = ?)";
错误更改:
Error preparing query: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE NOT EXISTS (SELECT * FROM calendario WHERE year = ? AND mes = ? AND dia = ' at line 1
请帮帮我。
去掉两个SELECTs
,把INSERT
变成INSERT IGNORE
:
INSERT IGNORE INTO calendario (year, mes, dia, date)
VALUES
( ?, ?, ?, ? )
将插入一个新行(如果尚不存在)。
并添加 UNIQUE(year, mes, dia)
以便它知道何时 "ignore".
我正在使用准备好的语句来插入 WHERE NOT EXISTS。我尝试了不同的方法,但根本行不通。
我用 catch (SQLException sqle)
捕获的错误是
java.sql.SQLException: Error preparing query: No tables used
我的代码是:
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,它打印出这个错误:
Caused by: org.mariadb.jdbc.internal.util.dao.QueryException: Error preparing query: No tables used
我也尝试过:
sql = "INSERT INTO calendario (year, mes, dia, date) "
+ "SELECT ?,?,?,? "
+ "WHERE NOT EXISTS ("
+ "SELECT * FROM calendario "
+ "WHERE year = ? AND mes = ? AND dia = ?)";
错误更改:
Error preparing query: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE NOT EXISTS (SELECT * FROM calendario WHERE year = ? AND mes = ? AND dia = ' at line 1
请帮帮我。
去掉两个SELECTs
,把INSERT
变成INSERT IGNORE
:
INSERT IGNORE INTO calendario (year, mes, dia, date)
VALUES
( ?, ?, ?, ? )
将插入一个新行(如果尚不存在)。
并添加 UNIQUE(year, mes, dia)
以便它知道何时 "ignore".