我正在使用以下代码将用户添加到我的数据库中名为USERS的表中,连接是正确的,因为我尝试了其他查询并且它们有效,我在Oracle本身尝试了这个查询并且它有效,我'我刚刚遇到java中的查询问题,主要是因为SPACE和语法,这个有什么问题?
try
{
stmt=conn.createStatement();
//query="INSERT INTO Users (user_id,username,password,first_name,last_name) " + " VALUES (seq_users.nextval,'"+usernameCreateField.getText()+"','"+new String(passwordCreateField.getPassword())+"','"+firstnameCreateField.getText()+"','"+lastnameCreateField.getText()+"') ";
query="INSERT INTO Users (user_id,username,password,first_name,last_name) " +" VALUES (seq_users.nextval,'test','test','test','test') ";
rset=stmt.executeQuery(query);
}
catch(SQLException | NumberFormatException e)
{
System.out.println("result error, " +e.getMessage());
}
finally
{
try
{
rset.close();
stmt.close();
}
catch(Exception e)
{
System.out.println("Error in closing "+e.getMessage());
}
}
答案 0 :(得分:3)
您要做的是DML操作。尝试替换
rset=stmt.executeQuery(query);
与
int affectedRows = stmt.executeUpdate(query);
答案 1 :(得分:3)
问题是您在语句中调用executeQuery(query)
,这就是为什么它不起作用的原因。您不能用于 DML(数据操作语言)语句的executeQuery()
方法,例如INSERT
,UPDATE
和DELETE
。对于这些语句,Java
提供了这些DML语句存在的名为executeUpdate()
的方法。
来自文档:
executeUpdate方法在此执行SQL语句 PreparedStatement对象,必须是SQL数据操作 语言(DML)语句,例如INSERT,UPDATE或DELETE;或SQL 不返回任何内容的语句,例如DDL语句。
所以只能用这个替换实际的方法,它会起作用。
对不起我的好奇心,但为什么你没有使用参数化的SQL
陈述?您会知道不使用参数化语句存在 SQL注入的高危险,并且许多黑客将此用于损坏数据库。你应该考虑一下。如果您希望您的数据库更安全,这一点非常重要。你不会相信什么证明SQL注入数据库。
仅举例来说,您应该创建如下查询:
query = "INSERT INTO Users (user_id,username,password,first_name,last_name) values(?,?,?,?,?) ";
此?
字符表示一个参数。编号从1,2,3等开始,而不是从零开始。
然后你必须在execute
语句之前用实际数据替换params:
PreparedStatement ps = conn.prepareStatement(query);
// no set parameters
ps.setInt(1, someDTO.getId());
ps.setString(2, someDTO.getUserName());
ps.setString(3, someDTO.getPassword());
ps.setString(4, someDTO.getFirstName());
ps.setString(5, someDTO.getLastName());
ps.executeUpdate();
System.out.println("Data was inserted successfully.");
return true;
修改强>
我只是在看你的代码时忘了告诉你,当你打开connection
然后你会关闭它时,你不必为close()
或statements
调用ResultSet
方法{1}},关闭connection
后,所有内容都将关闭。
希望对你有所帮助。
此致
答案 2 :(得分:0)
试试这个......
try {
String URL = "jdbc:sqlserver://127.0.0.1:1433;databaseName=(databaseNameHere)";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection conn2 = DriverManager.getConnection(URL,"username","userpassword");
String sql = "INSERT INTO tableNameHere(user_id,username,password,first_name,last_name) values(?,?,?,?,?)";
ps = conn2.prepareStatement(sql);
ps.setString(1, user_id);
ps.setString(2, username);
ps.setString(3, password);
ps.setString(4, first_name);
ps.setString(5, last_name);
}