mysql java preparedstatement如果不存在则插入

时间:2015-12-01 17:16:54

标签: java mysql prepared-statement where insert-into

我尝试将数据填充到我的数据库中。但我根据时间不想要共和党人。我不关心共和党人,因为我不会丢失任何数据。 经过长时间的搜索,我终于发现,您无法将WHERE NOT EXISTINSERT INTO一起使用。

但现在我遇到了下一个问题。我尝试了这两种方法,但没有一种方法可行。

      /*
      preparedStatement = connect.prepareStatement("IF NOT EXISTS(SELECT * FROM gpsdata.data where time=?) "
            + "Begin "
            + "INSERT INTO gpsdata.data VALUES (default, ?, ? , ?, ?, ?, ?, ?, ?) "+
              "END");
      */
      preparedStatement = connect.prepareStatement("INSERT INTO gpsdata.data VALUES (default, ?, ? , ?, ?, ?, ?, ?, ?) "
            + "SELECT ? FROM gpsdata.data WHERE NOT EXISTS(SELECT * FROM gpsdata.data where time = ?)");

两者都给了我一些mysql语法错误。我无法弄清楚出了什么问题。我是mysql的新手。最后一次尝试给了我至少一个不同的错误:

  

MySQLSyntaxErrorException:SQL语法中有错误;校验   手册...... ......附近使用选择1448982118099   第1行的EXISTS(SELECT * FROM gpsdata.data,其中time = 14')

在检查dublicates之前,代码运行正常。所以它应该是新的声明。

此致 埃里克

编辑:我不想将我的数据复制到另一个表中。

2 个答案:

答案 0 :(得分:0)

?不是SELECT ?中的有效参数。你必须按字面命名一列。

答案 1 :(得分:-1)

要将 insert with parameters part与 condition 部分连接起来,您可以使用 select from dual 。 我在Oracle上尝试过以下声明。

preparedStatement = connect.prepareStatement("INSERT INTO gpsdata.data select 'default', ?, ? , ?, ?, ?, ?, ?, ? from dual
            WHERE NOT EXISTS(SELECT * FROM gpsdata.data where time = ?)");

ps:请注意你使用时间变量两次。