【发布时间】:2020-01-16 08:52:17
【问题描述】:
我尝试使用 JDBC 来插入和更新数据。插入函数运行良好,但更新函数并没有改变数据库中的任何内容。运行时也不例外。
我确定 RoomID 存在且正确。
这是我的插入功能,可以使用
private static Connection conn;
private PreparedStatement pres;
public void saveRoom(Room room) {
String sql = "insert into ROOM(roomid, object) values(?,?)";
try {
pres = conn.prepareStatement(sql);
pres.setObject(1, room.getRoomId());
pres.setObject(2, roomToBlob(room));
pres.addBatch();
pres.executeBatch();
conn.commit();
if (pres != null) {
pres.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
这是我的更新功能,这不起作用。也不例外,但数据没有变化。
private static Connection conn;
private PreparedStatement pres;
public void updateRoom(ArrayList<Room> RoomList) {
String sql = "update ROOM set room.object= ? where room.roomid like ?";
try {
pres = conn.prepareStatement(sql);
for (int i = 0; i < RoomList.size(); i++) {
pres.setObject(1, roomToBlob(RoomList.get(i)));
pres.setObject(2, RoomList.get(i).getRoomId());
pres.addBatch();
}
pres.executeBatch();
conn.commit();
if (pres != null) {
pres.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
我找到了问题并解决了它,但我仍然不知道为什么会这样。 我的解决办法是:
A 类有一个 Arraylist 列表 public void update(){database.updateRoom(list);}
B类: A a = 新 A(); 数据库.updateRoom(a.getList()); 这没有异常,但数据库中没有数据变化。
a.update();这很好用,数据更改正确。
为什么会这样?
【问题讨论】:
-
pres在您测试它时不可能为空,那么为什么要测试它呢?为什么它是一个成员变量?这只是自找麻烦,因为有一个静态的Connection变量。两者都应该是局部变量,在方法内部获取和释放。为什么要对单个 INSERT 语句进行批处理? -
我试过 = 但它不起作用。
-
更新了多少行? INSERT 语句中
roomID的值是多少?和 UPDATE 语句?roomID列是什么类型的? -
尝试使用
where room.roomid = ?而不是like。 -
7 个问题, 两天前提出的,你能想到的只是重申你原来不受支持的断言。