通过 servlet 将新的用户对象插入到 JDBC 中



这是我的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 的 calue 创建一个新的用户对象,会这样吗?

if(rs.next()==false){
  Statement stmt=con.createStatament();
  String query="INSERT INTO user.username VALUE 'tusername'";
  ResultSet rs= stmt.updateQuery(query);
 }

我知道其中一些可能是过时的(例如不使用预准备语句(,我只是想更好地理解,我认为我遇到了一些小的语法问题,谢谢:)

您应该使用

NOT EXISTS 查询来执行插入,并且理想情况下也应该使用预准备语句:

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");
}

我不知道你的实际数据库是什么。 以上应该适用于MySQL和Oracle。 对于其他数据库,可能需要对其进行轻微修改。

上述查询的替代方法是仅使用当前插入,但将username列设置为(唯一(主键。 在这种情况下,任何插入重复项的尝试都将在数据库级别失败,这可能会导致 Java 代码出现异常。 这也将是一种与数据库无关的方法。

最新更新