我正在研究Java项目,但在将值插入表中时遇到了麻烦。在插入此表之前,我想检查一下是否有重复项。
此后,我尝试使用带有结果集的executeUpdate进行executeQuery,但是我得到了“ java.sql.SQLException:无法使用executeQuery()发出数据操作语句。”
这是我正在使用的代码,谢谢您!
public void registernow(ActionEvent actionEvent) throws IOException, SQLException {
ConnectionClass registerClass = new ConnectionClass();
Connection register = registerClass.getConnection();
try {
Statement registerStatement = register.createStatement();
String sql = "INSERT INTO userAuth (username, password) VALUES ('" + txt_username.getText() + "' , '" + txt_password.getText() + "')";
registerStatement.executeUpdate(sql);
ResultSet resultSet = registerStatement.executeQuery(sql);
if (resultSet.next()) {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("register.fxml"));
Parent fxmlregister = (Parent) fxmlLoader.load();
Stage stage = new Stage();
stage.setTitle("COMP228 Project Registration Complete!");
stage.setScene(new Scene(fxmlregister));
stage.show();
} else {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("registerfailed.fxml"));
Parent fxmlregisterfailed = (Parent) fxmlLoader.load();
Stage stage = new Stage();
stage.setTitle("COMP228 Project Registration Failed!");
stage.setScene(new Scene(fxmlregisterfailed));
stage.show();
}
答案 0 :(得分:2)
错误和@JBNizet已经告诉您,您正在尝试执行相同的更新语句,但是使用ExecuteQuery
。
因此,您尝试使用executeQuery
执行更新语句,应尝试使用查询的第二条命令
sql = "SELECT COUNT(1) FROM yourTable WHERE yourCondition = true";
ResultSet resultSet = registerStatement.executeQuery(sql);
您真的会记起@JBNizet的注释,这不利于连接字符串以创建查询。
答案 1 :(得分:2)
Answer by rekiem87和问题上的两条评论都是正确的。
除这些要点外,如果您希望更新现有记录或以其他方式插入新记录,that behavior通常称为UPSERT
(意思是UPdate或inSERT)或“合并” 。
我记得,SQL标准中没有定义这样的功能。但是许多数据库已经实现了一个。
例如,在Postgres中,使用INSERT ON CONFLICT
。有关Postgres 9.5,请参见this first look,this tutorial,this posting,feature description和YouTube上的this presentation。
INSERT INTO user_ ( username_ , password_ )
VALUES ( 'Alice' , 'pw123' )
ON CONFLICT ( username_ )
DO UPDATE SET ( password_ ) = ( 'pw123' )
;
请注意,至少在Postgres实现中,如果已经存在一行,则可以选择不执行任何操作。
INSERT INTO user_ ( username_ , password_ )
VALUES ( 'Alice' , 'pw123' )
ON CONFLICT ( username_ )
DO NOTHING
;
当然,我忽略了正确存储用户密码的整个主题。我确信问题中的这个示例是人为设计的,您从不只写密码。