вставка нового объекта пользователя в JDBC через сервлет - PullRequest
1 голос
/ 24 апреля 2019

Вот код моего сервлета, который получает параметр имени пользователя из регистрационной формы

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 Ответ

1 голос
/ 24 апреля 2019

Вы должны использовать запрос 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.Это также был бы более независимый от базы данных подход.

...