如何避免在我的MySQL数据库中输入重复的条目?
因此,我在这里要做的是检查我的users
mySQL数据库中的user
表中是否有username
行中的重复条目,然后插入新的username.
以下是我的代码示例。目前,结果ResultSet没有做任何事情,我也不确定如何将它实现到后面的IF语句中。是的,我有try
的渔获量,只是没有在这个例子中。对不起,如果这是一个相当简单的问题,我上周刚开始用Java编程。此外,这是我在这里的第一个问题,我非常感谢帮助。如何避免在我的MySQL数据库中输入重复的条目?
try{
String sequel = ("SELECT username FROM `users`.`user`");
PreparedStatement userNameInfo = conn.prepareStatement(sequel);
userNameInfo.executeQuery(sequel);
ResultSet results = userNameInfo.getResultSet();
if (sequel.equals("")) {
conn.setAutoCommit(false);
String sql = "INSERT INTO `users`.`user`(`username`,`password`,`email`) VALUES('" + newusername +"', '" + newpassword + "', '" + newemail +"')";
PreparedStatement prest = conn.prepareStatement(sql);
prest.executeUpdate(sql);
conn.commit();
conn.close();
System.out.println("Added Successfully!");
}
else {
System.out.println("Add failed!");
}
}
所以我想你想做什么 - 我应该这样做,是如果用户名在表中,然后添加或不。所以SQL需要是这样的:
从用户名中选择用户名username =?
然后在查询中设置参数。在此处查看文档: http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html
然后,您需要检查查询后结果集中的内容,并查看是否有任何内容。 API文档将与PreparedStatement文档大致相同。
在db中添加一个约束也会给你带和大括号。
希望这有助于
我想我理解你所说的整体概念,但是,老实说,我并不真正在查询中设置怎样或什么参数。我假设必须有某种方式来说'如果_newusername_!='现有'username'然后将其提交给数据库,'else system.out.print(“用户名已被占用);'然后循环返回。 – The31StReaper 2012-03-16 18:32:33
添加了一个指向API文档的链接,你要设置的参数是你想测试的用户名,实际上你问DB是否已经知道新用户想要使用的名字。 – 2012-03-17 18:24:22
您是否在表格中创建了主键?主键自动防止重复值。
如果要防止重复的用户名,请将您的username
列作为主键。
问题在于,据我所知(我是新来的)只能有一个自动增量,它必须是主键。我想idUser不断增加每个新的输入'username.'虽然,我想也许idUser列是不必要的。 – The31StReaper 2012-03-16 18:30:44
当你定义你的SQL表,你可以定义一些项目是唯一的。
所以在你的例子,如果你想要的用户名是唯一的,你可以这样:
UNIQUE(username)
你的表声明。
如果你想对用户名/电子邮件是唯一的,你可以这样:
UNIQUE(username, email)
的文档here
嗯,我不是一个Java的家伙。但这可能对你有帮助。
您可以在查询执行后检索第一个结果集的行数。如果行数等于0,则表示数据库不包含类似的记录。
请仔细阅读[主要关键概念](http://www.w3schools.com/sql/sql_primarykey.asp) – 2012-03-16 18:07:08
@ringbearer谢谢,这非常有用。 – The31StReaper 2012-03-16 18:37:00