我尝试使用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 = new A(); database.updateRoom(a.getList()); 这没有例外,但数据库中没有数据更改。
a.update();效果很好,数据可以正确更改。
为什么会这样?
答案 0 :(得分:1)
如注释中所建议,您需要更改UPDATE语句:
String sql = "update ROOM set room.object= ? where room.roomid = ?";
LIKE value
表达式用于匹配部分字符串。例如,当您要查找以字母LIKE 'ma%'
开头的所有字符串(例如ma
,mat
,man
)时,可以使用map
。