Java数据库“插入”语法错误

时间:2014-05-23 14:20:10

标签: java database sqlanywhere insert-into

在我的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)

我该如何解决?

2 个答案:

答案 0 :(得分:1)

INSERT INTO不支持WHERE子句。所以问题实际上并不是EXISTS条款。

用于过滤行的地方。您不想过滤行。您想插入行。在我看来,你真正想要做的是根据给定电子邮件值的存在在User表中插入行。为此,请查看MERGE INTO语句。

答案 1 :(得分:0)

插入语句不支持where子句。尝试使用关节

相关问题