插入不能正常工作
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)
我的应用程序中有以下代码
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)