java,mysql比较和编辑值

时间:2012-12-06 22:24:36

标签: java mysql comparison

我在java中构建决策支持系统。下面是代码的一部分,它扫描用户输入的搜索词,然后将其与数据库searchlog.searchcolumn值进行比较,如果不是,则创建一个新条目。但是在if语句中我希望它检查条目,如果它已经在searchlog.searchcolumn列中,那么我希望它不是创建一个新的重复条目,而是为searchlog.counter列添加+1值特定的词。 例如,如果搜索词是" UMBRELLA"并且在数据库中已有一个数据库的条目,我希望它在UMBRELLA行的计数器列中添加+1。

这样做的目的是存储所有搜索词并跟踪最流行的搜索词。 感谢您的时间         String CheckSearch =" SELECTsearchcolumn FROMsearchlog&#34 ;;

String InsertColumn = "INSERT INTO `mydb`.`searchlog` (`searchcolumn`) VALUES ('"+ InputScanner + "'); 
         //
if (InputScanner.equals(CheckSearch)) 
   System.out.println("value ealready exist, counter well be updated"); 
else
   stmt.executeUpdate(InsertColumn); 

修改 感谢您使用PreparedStatement的建议,但这是我的第一个或多或少严重的挑战,而且这次,我们只是忽略我的代码的漏洞。感谢

4 个答案:

答案 0 :(得分:1)

您的查询应该是:

String InsertColumn = "INSERT INTO `mydb`.`searchlog` (`searchcolumn`) VALUES ('"+ InputScanner + "'"); 

值子句也应该用括号括起来。

并始终使用equals()来检查两个字符串是否有意义相等。如果对象==检查两个引用变量是否引用同一对象。

      if (InputScanner == CheckSearch) {

should be:

      if (InputScanner.equals(CheckSearch)) {

然后,如果InputScanner与checkSearch相同,则if语句将返回true。

通知:

我强烈建议您使用PreparedStatement而不是简单的Statement来阻止SQL注入。

PreparedStatement st = conn.preparedStatement(InsertColumn);
st.setString(1, val1);

答案 1 :(得分:1)

您使用的数据库是什么?如果您使用的是MySQL,那么您应该查看INSERT ... ON DUPLICATE KEY UPDATE语句。 (其他SQL数据库有MERGE,我不太熟悉。)这是MySQL Documentation

您需要制作searchcolumn UNIQUEPRIMARY列,然后按照以下内容执行操作:

INSERT INTO searchlog (searchcolumn, count) VALUES ("my search query", 0) ON DUPLICATE KEY UPDATE count = count + 1;
即可实现您的目标。< p>

答案 2 :(得分:0)

1)值也需要括号

示例:

VALUES ('"+ InputScanner + "');

2)假设InputScannerCheckSearch是字符串/类似对象,则需要.equals()代替==

示例:

if (InputScanner.equals(CheckSearch)) {

注意:您的SQL语句容易受到SQL注入攻击。最好使用PreparedStatement

答案 3 :(得分:0)

您的任务有MySQL statement

要求:searchcolumn是一个独特的密钥。

String sql = "INSERT INTO mydb.searchlog(searchcolumn, counter) VALUES(?, 1) "
    + " ON DUPLICATE KEY UPDATE counter = counter + 1";
PreparedStatement stmt = connection.createPreparedStatement(sql);
stmt.setParameter(1, checkSearch.toUpperCase());
int updateCount = stmt.executeUpdate();

我不知道updateCount是否仍在寻找是否发生INSERT或UPDATE。如果存在未提及的AUTOINCR主键,则可以将getGeneratedKeys用于此目的。