我的应用程序中有以下代码
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;
我已经尝试了一切,但我找不到我的错误。 有人可以帮帮我吗?
答案 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() + "')";