我有一些麻烦在想逻辑,我不知道如何解决这个问题。基本上我要做的是无法使用相同的用户名添加额外的用户。这就是它的完成方式。
String select = "select username from user"
def sot = sql.rows(select)
sot.find() {
def count = it["username"]
if (params.username != count) {
String queryname = "insert into user (username, class) values('" + params.username + "','" + params.class1 + "')"
println(queryname)
def Query1 = sql.executeInsert(queryname)
[ Query1: Query1]
flash.message = "Successfully added user " + params.username
return true
}
else {
flash.message = "Username exist"
return true
}
}
所以会发生什么是添加用户,停止循环,检查相同。但是,如果我为else条件返回false。用户将重复添加几次,直到循环停止检查。那么有没有人可以解决这个问题?非常感谢你们。
P.S这只是一个测试,我将在以后实施SQL注入预防
答案 0 :(得分:3)
老实说,这是最坏情况数据库编程的教科书案例。当您只需在SQL中使用where
子句时,您将遍历数据库中的每个用户名,寻找其中一个用户名。当有10个用户时这很好,但是当你有一百万用户时要考虑性能。
试试这个(作为额外的奖励,我已经修复了你的SQL注入):
def row = sql.firstRow(
'select count(*) from user where username=?',
[params.username])
if (row[0]) {
flash.message = "Username exist"
return true
}
sql.executeUpdate(
'insert into user (username, class) values(?, ?)',
[params.username, params.class1])
flash.message = "Successfully added user " + params.username
return true
答案 1 :(得分:2)
如果您有一个用户域对象,那么您可以避免一起使用SQL并改为使用dynamic finders。
if(User.findByUsername(params.username)){
flash.message = "username exist"
}
else{
new User(username:params.username).save()
}