这是我的servlet的代码,该代码从注册表单中接收用户名参数
String tusername=request.getParamater("un");
String dbURL="db.com";
String dbusername= "lc";
String dbpassword="lcpw";
Connection con=(Connection) DriverManager.getConnection(dbURL,dbusername,dbpassword);
Statement stmt= con.createStatement();
String query="SELECT * FROM users.username WHERE username=(tusername)";
ResultSet rs= stmt.executeQuery(query);
if(rs.next()==false){
//create new userobject with value of tusername
}
我的问题是我该如何创建一个新的用户对象,其名称为tusername?
if(rs.next()==false){
Statement stmt=con.createStatament();
String query="INSERT INTO user.username VALUE 'tusername'";
ResultSet rs= stmt.updateQuery(query);
}
我了解其中某些内容可能是过时的(例如不使用预处理语句),我只是想更好地理解我,我认为我有一些小的语法问题,谢谢:)
答案 0 :(得分:1)
您应该使用gsub
查询进行插入,并且理想情况下还应该使用准备好的语句:
NOT EXISTS
我不知道您的实际数据库是什么。以上对于MySQL和Oracle应该是开箱即用的。对于其他数据库,可能需要稍作修改。
上述查询的替代方法是仅使用当前插入内容,但将String sql = "INSERT INTO user.username (username) ";
sql += "SELECT ? FROM dual WHERE NOT EXISTS (SELECT 1 FROM user.username WHERE username = ?)";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, tusername);
ps.setString(2, tusername);
int result = ps.executeUpdate();
if (result > 0) {
System.out.println("Inserted new user " + tusername + " into username table";
}
else {
System.out.println("User " + tusername + " already exists; no new record was inserted");
}
列设为(唯一)主键。在这种情况下,任何尝试插入重复项的尝试都将在数据库级别失败,这可能会导致Java代码出现异常。这也将是一种与数据库无关的方法。