Java 我使用JDBC更新数据,但它不';行不通
我尝试使用JDBC插入和更新数据。insert函数工作正常,但是update函数没有改变数据库中的任何内容。运行时没有异常 我确信室友是存在的,而且是正确的 这是我的插入函数,它可以工作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
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值进行更新,则不会更改任何数据。