gpt4 book ai didi

Java/MySQL dao 存储空值和空指针异常 - 保持简单

转载 作者:行者123 更新时间:2023-11-30 00:55:46 25 4
gpt4 key购买 nike

我正在为我的应用程序使用一个简单的 DAO。它是 MySQL 5.5 和 MySQL Connector for Java。我使用框架并不是为了让事情变得简单。我只是使用 EclipseLink JPA 创建模型对象,然后手动编码 daos。

DAO 创建一个用户对象,其中包含一些可选字段,用于将 ID 存储到其他表中。我将 ID 存储为 Long。创建对象时,ID 字段为空。这对我来说没问题,因为其他表对于用户来说是可选的。所以......在数据库中,ID 字段可能是长整型或空值。 MySQL 也可以解决这个问题。

但是当我尝试使用 DAO 存储用户对象时,它会因为将 null 值放入 Long 中而感到困惑。请参阅下面的代码。

我知道我可以测试空值并将 ID 设置为零。但这并不比 null 更正确。这是额外的工作。

处理这种情况最有效的方法是什么?当我创建第一个对象时将它们默认为 0?看起来像一个软糖。

我也愿意接受对我创造新记录的方式的建设性批评。我发现单独的 addUser 和 updateUser 由于重复而更容易出错。这似乎更有效率。评论?

谢谢

public User updateUser(User user) {
Connection conn = DbUtil.getConnection();
PreparedStatement ps;
Statement st;
ResultSet rs;

try {

if (user.getId()==null) {
st = conn.createStatement();
st.executeUpdate("INSERT INTO users (created, modified) VALUES(NOW(), NOW());");
rs = st.executeQuery("SELECT LAST_INSERT_ID() AS id;");
if (rs.next()) {
Long id = rs.getLong("id");
user.setId(id);
}
}

String SQLupdate = "UPDATE users SET "
+ "travid = ?, "
+ "busid = ?, "
+ "email = ?, "
+ "type = ?, "
+ "name = ?, "
+ "handle = ?, "
+ "password = ?, "
+ "passencr = ?, "
+ "passhint = ?, "
+ "question = ?, "
+ "answer = ?, "
+ "modified = NOW(), "
+ "lastlogin = ? "
+ "WHERE id = ?";

ps = conn.prepareStatement(SQLupdate);
ps.setLong( 1, user.getTravid());
ps.setLong( 2, user.getBusid());
ps.setString(3, user.getEmail());
ps.setString(4, user.getType());
ps.setString(5, user.getName());
ps.setString(6, user.getHandle());
ps.setString(7, user.getPassword());
ps.setString(8, user.getPassencr());
ps.setString(9, user.getPasshint());
ps.setString(10, user.getQuestion());
ps.setString(11, user.getAnswer());
ps.setObject(12, user.getLastlogin());
ps.setLong(13, user.getId());
ps.executeUpdate();

} catch (SQLException e) {
System.out.println(e.getMessage());
e.printStackTrace();

} finally {
DbUtil.close(conn);
}

return user;
}

最佳答案

请查看 JDBC API。您不会通过使用 PreparedStatement.setXxxx(index,null) 设置 null 来将 null 值写入数据库。请改用 setNull(index,sqlType) 方法。

关于Java/MySQL dao 存储空值和空指针异常 - 保持简单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20579588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com