Java 我使用JDBC更新数据,但它不';行不通

Java 我使用JDBC更新数据,但它不';行不通,java,jdbc,hsqldb,Java,Jdbc,Hsqldb,我尝试使用JDBC插入和更新数据。insert函数工作正常,但是update函数没有改变数据库中的任何内容。运行时没有异常 我确信室友是存在的,而且是正确的 这是我的插入函数,它可以工作 private static Connection conn; private PreparedStatement pres; public void saveRoom(Room room) { String sql = "insert into ROOM(roomid, object) values

我尝试使用JDBC插入和更新数据。insert函数工作正常,但是update函数没有改变数据库中的任何内容。运行时没有异常

我确信室友是存在的,而且是正确的

这是我的插入函数,它可以工作

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();
    }
}
专用静态连接连接;
私人编制的报表;
公共无效更新eRoom(ArrayList RoomList){
String sql=“update ROOM set ROOM.object=?where ROOM.roomid like?”;
试一试{
pres=conn.prepareStatement(sql);
对于(int i=0;i
我发现了问题并解决了它,但我仍然不知道为什么会发生这种情况。 我的解决办法是:

类有一个Arraylist列表 public void update(){database.updateeRoom(列表);}

B类: A=新的A(); database.updateeRoom(a.getList()); 这没有例外,但数据库中没有数据更改

a、 更新();这工作正常,数据更改正确


为什么会发生这种情况?

正如评论中所建议的,您需要更改UPDATE语句:

String sql = "update ROOM set room.object= ? where room.roomid = ?";

LIKE值
表达式用于匹配字符串的各个部分。例如,如果要查找以字母
ma
开头的所有字符串(例如
mat
man
map
),请使用
如'ma%'

pres
在测试时不可能为空,那么为什么要测试它呢?为什么它是一个成员变量?这只是自找麻烦,就像有一个静态
连接
变量一样。两者都应该是局部变量,在方法内部获取和发布。为什么要为单个INSERT语句批处理?我已经尝试了=但它不起作用。更新了多少行?INSERT语句中
roomID
的值是多少?更新声明呢?
roomID
列是什么类型的?尝试使用
where room.roomID=?
而不是像
那样使用
。两天前问了七个问题,您所能想到的就是重新验证您原来不支持的断言。我尝试了=并喜欢,但两者都不起作用,我想这可能是因为某些回滚问题。@SihongMiao我想这是因为
roomID
不一样。您需要回答此处提出的问题。@SihongMiao请更新并回答用户207421提出的问题。如果尝试使用不在表中的roomID值进行更新,则不会更改任何数据。