插入不正常

时间:2015-05-17 22:25:51

标签: java mysql jdbc

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

    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;

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

2 个答案:

答案 0 :(得分:4)

我假设,执行您的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)

答案 1 :(得分:2)

您在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() + "')";