【问题标题】:Insert not working properly插入不能正常工作
【发布时间】:2015-05-17 22:25:50
【问题描述】:

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

    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;

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

【问题讨论】:

  • 您的 SQL 插入语句缺少右括号!

标签: java mysql jdbc


【解决方案1】:

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

【讨论】:

    【解决方案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() + "')";
    

    【讨论】:

      猜你喜欢
      • 2016-03-17
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 2013-03-30
      • 2010-11-30
      • 2021-10-02
      • 2017-08-06
      • 2013-11-22
      相关资源
      最近更新 更多