插入不能正常工作

Insert not working properly

我的应用程序中有以下代码

    public int insert_dependente(Dependente dependente) {
    ResultSet r;
    int result = 0;
    if (!(dependente == null)) {
        try {
            Connection conn = new Conexao().getConnection();
            String sql = "insert into Dependente "
                    + "(IdAssoc,"
                    + "NomeDep,"
                    + "SobrenomeDep,"
                    + "RgDep,"
                    + "CpfDep,"
                    + " DtNascDep,"
                    + " emailDep,"
                    + " tipoDep,"
                    + " DtCriacaoDep)"
                    + " VALUES (" + dependente.getAssociado() + ","
                    + "'" + dependente.getNome() + "',"
                    + "'" + dependente.getSobrenome() + "',"
                    + "'" + dependente.getRg() + "',"
                    + "'" + dependente.getCpf() + "',"
                    //+ new java.sql.Date(dependente.getNascimento().getTime()).toString() + ","
                    + "'" + dependente.getEmail() + "',"
                    + "'" + dependente.getTipoDep() + "'";
                    //+ new java.sql.Date(new java.util.Date().getTime()).toString() + ")";
            Statement state; 
            state = conn.createStatement();
            state.execute(sql);
            state.close();

            String sql2 = "SELECT IdDep FROM Dependente WHERE CpfDep = " + dependente.getCpf();
            state = conn.createStatement();
            r = state.executeQuery(sql2);
            while (r.next()) {
                result = r.getInt("idAssoc");
            }
            r.close();
            state.close();
            conn.close();
        } catch (SQLException ex) {
            Logger.getLogger(DependenteDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    return result;
}

问题是这些值从未插入到我的数据库中。 而当系统到达行

state.execute(sql);

系统忽略一切,直接跳转到行

return result;

我已经尝试了所有方法,但找不到我的错误。 有人可以帮我吗?

您注释掉了 INSERT 语句末尾的括号:

 String sql = "insert into Dependente "
     + "(IdAssoc,"
     + "NomeDep,"

    ...

    //+ new java.sql.Date(new java.util.Date().getTime()).toString() + ")";

这就是您得到 SQLException 并且代码执行被中断的原因。您甚至可以将异常传递给您的记录器,您应该能够在您的日志中找到它:

Logger.getLogger(DependenteDAO.class.getName()).log(Level.SEVERE, null, ex);

改用此代码:

String sql = "insert into Dependente "
    + "(IdAssoc,"
    + "NomeDep,"
    + "SobrenomeDep,"
    + "RgDep,"
    + "CpfDep,"
    + " DtNascDep,"
    + " emailDep,"
    + " tipoDep,"
    + " DtCriacaoDep)"
    + " VALUES (" + dependente.getAssociado() + ","
    + "'" + dependente.getNome() + "',"
    + "'" + dependente.getSobrenome() + "',"
    + "'" + dependente.getRg() + "',"
    + "'" + dependente.getCpf() + "',"
    + "'" + dependente.getEmail() + "',"
    + "'" + dependente.getTipoDep() + "')";

我假设,执行您的 SQL 语句会引发异常。它应该在日志中的某处,因为您捕获并记录了它。

原因:您的 SQL 插入语句缺少右括号:).

除此之外,使用 PreparedStatement 而不是以编程方式将几个变量中的最终 SQL 语句连接起来更容易也更安全(原因另请参见 Should I be using PreparedStatements for all my database inserts in Java?) :

String sql = "INSERT INTO Dependente" +   
             + " (IdAssoc, NomeDep, SobrenomeDep, RgDep, CpfDep, DtNascDep, emailDep, tipoDep, DtCriacaoDep)" +
             + " VALUES (?,?,?,?,?,?,?,?,?)";

try (PrepareStatement pstmt = con.prepareStatement(sql)) {
    pstmt.setLong(1, dependente.getAssociado());
    pstmt.setString(2, dependente.getNome());
    pstmt.setString(3, dependente.getSobrenome());
    ...

    pstmt.executeUpdate();
} // automatically closes statement (see try-with-resource above)