通过Servlet将新的用户对象插入JDBC

时间:2019-04-24 12:42:59

标签: java servlets 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?

if(rs.next()==false){
  Statement stmt=con.createStatament();

  String query="INSERT INTO user.username VALUE 'tusername'";
  ResultSet rs= stmt.updateQuery(query);

 }

我了解其中某些内容可能是过时的(例如不使用预处理语句),我只是想更好地理解我,我认为我有一些小的语法问题,谢谢:)

1 个答案:

答案 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代码出现异常。这也将是一种与数据库无关的方法。