[oracle]不能向数据库添加新用户,从 java

标签: Java Oracle
发布时间: 2017/4/15 19:09:01
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我使用以下代码将用户添加到 users 表中我的数据库,连接是否正确因为我已经试过其他的查询和他们工作,我试着在 Oracle 中的此查询本身和它的工作,我只正在查询问题在 java 中,主要是因为空间和语法,这一个有什么错误?

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());
    }
}

解决方法 1:

所以问题是,你的呼唤 executeQuery(query) 您的语句,这就是的原因为什么它不能工作。 executeQuery() 方法不能使用DML (数据操作语言)语句像是 INSERTUPDATEDELETE 。为这些语句 Java 提供方法命名为 executeUpdate() 的存在为这些 DML 语句。

从文档︰

executeUpdate 方法执行的 SQL 语句在此带对象,必须是 SQL 数据操作语言 (DML) 语句,如插入、 更新或删除;或返回 nothing,例如 DDL 语句的 SQL 语句。

所以只有替换这实际的方法,它会将工作。

对不起我的好奇心,但为什么您不使用参数化和 SQL 语句吗?你会知道,不使用参数化语句有是高度危险的SQL 注入和许多黑客使用这种损坏数据库。你应该考虑一下。它是非常重要的如果你想要向您的数据库将会更安全。你不会相信什么证明与数据库的 SQL 注入。

仅对于以你为例,应创建这样的查询︰

query = "INSERT INTO Users (user_id,username,password,first_name,last_name) values(?,?,?,?,?) ";

? char 代表一个参数。编号 1 2、 3,开头等......不是从零。

然后你必须替换用真实的数据,在你之前有 params execute 这样的语句︰

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;

因此,有关 SQL 注入更多︰在这里这里

编辑︰

我忘了告诉你当我只是看你的代码,当你打开 connection ,然后当然你将关闭它,你不应该叫 close() 方法 statementsResultSet ,所有将会封闭后,当您关闭 connection

希望这能帮你。

问候

赞助商