我是android开发的初学者。这是我的第一个Android工作室应用程序中的注册代码的一部分:代码将在第一个执行查询行之后立即进入捕获并且不执行第二个查询。如果我检查数据库,则添加了用户但不是粉丝。
知道为什么吗?任何帮助表示赞赏。
try {
Connection con = connectionClass.CONN();
if (con == null) {
z = "Error in connection with SQL server";
} else {
Statement stmt = con.createStatement();
String query1 = "INSERT INTO Usertb Values ('" + userid + "', '" + Password + "', '" + 1 + "')";
stmt.executeQuery(query1);
String query = "INSERT INTO Fan Values ('" + FirstName + "', '" + LastName + "','" + Age + "', '" + Email + "', '"
+ null + "', '" + i + "', '" + null + "')";
rs = stmt.executeQuery(query);
if (rs.next()) {
z = "Sign Up successfull";
isSuccess = true;
}
}
} catch (Exception ex) {
isSuccess = false;
z = "Exceptions";
}
答案 0 :(得分:1)
必须使用executeUpdate(INSERT / UPDATE)而不是executeQuery。
String sql = "INSERT INTO Usertb(userid, passw, n) VALUES (?, PASSWORD(?), ?)";
try (PreparedStatement stmt = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
stmt.setString(1, userName);
stmt.setString(2, password);
stmt.setInt(3, 1);
int updateCount = stmt.executeUpdate(query1); // 1 when 1 record inserted
if (updateCount != 0) {
// If you want to use an autincrement primary key:
try (ResultSet rsKeys = stm.getGeneratedKeys()) {
if (rsKeys.next()) {
long id = rsKeys.getLong(1);
}
}
}
} // Closes stmt
此外,使用预准备语句来阻止 SQL注入非常重要。它还会处理字符串中的单引号和反斜杠。
此外,还展示了如何使用AUTOINCR字段来检索数据库生成的密钥,例如第二次INSERT。
第二次使用新的PreparedStatement。
如果有人窃取数据,密码应该更好地加密存储在数据库中。你可能会研究这个主题。我的解决方案很少,寻找播种和其他加密功能。