在我的java程序中,我试图将用户插入到我的数据库中,如果不存在但是当我插入java catch异常时。这是代码
public void UserToDB(Registered registered) throws SQLException{
Connection conn = SimpleDataSource.getConnection();
try
{
PreparedStatement stat = conn.prepareStatement("INSERT INTO User(ID,Email,Name,LastName,Password) VALUES(?,?,?,?,?)"
+ "WHERE NOT EXISTS (SELECT * from User WHERE Email = ?)");
stat.setInt(1,registered.getId());
stat.setString(2,registered.getEmail());
stat.setString(3,registered.getName());
stat.setString(4,registered.getLastName());
stat.setString(5,registered.getPassword());
stat.setString(6,registered.getEmail());
stat.executeUpdate();
}catch(SQLException e){
System.out.println("Error: Email already exists");
}
finally
{
conn.close();
}
}
堆栈追踪:
Exception in thread "main" com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE NOT EXISTS (SELECT * from User WHERE Email = '4444@hotmail.com')' at line 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3283)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1332)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1604)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1519)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1504)
at social_network.DBManager.UserToDB(DBManager.java:51)
at social_network.Social_Network.main(Social_Network.java:36)
我该如何解决?
答案 0 :(得分:1)
INSERT INTO不支持WHERE子句。所以问题实际上并不是EXISTS条款。
用于过滤行的地方。您不想过滤行。您想插入行。在我看来,你真正想要做的是根据给定电子邮件值的存在在User
表中插入行。为此,请查看MERGE INTO语句。
答案 1 :(得分:0)
插入语句不支持where子句。尝试使用关节