我在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的建议,但这是我的第一个或多或少严重的挑战,而且这次,我们只是忽略我的代码的漏洞。感谢
答案 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
UNIQUE
或PRIMARY
列,然后按照以下内容执行操作:
INSERT INTO即可实现您的目标。< p>searchlog
(searchcolumn
,count
) VALUES ("my search query", 0) ON DUPLICATE KEY UPDATEcount
=count
+ 1;
答案 2 :(得分:0)
1)值也需要括号
示例:
VALUES ('"+ InputScanner + "');
2)假设InputScanner
和CheckSearch
是字符串/类似对象,则需要.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
用于此目的。