该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
String insertMapRecorderStr = "insert into map (zoom_level,tile_column,tile_row,tile_id) values(?,?,?,?)";
String insertImageRecorderStr = "insert into images (tile_id,tile_data,tile_md5) values(NULL,?,?)";
String queryImageStr = "select tile_id from images where tile_md5=?";
String queryLastTileIDStr = "select last_insert_rowid()";
pstmt = conn.prepareStatement(queryImageStr);
pstmt.setString(1, imageMd5);
rs = pstmt.executeQuery();
int tile_id = -1;
while (rs.next()) {
tile_id = rs.getInt("tile_id");
}
if (tile_id == -1) {
pstmt = conn.prepareStatement(insertImageRecorderStr);
pstmt.setBytes(1, bytes);
pstmt.setString(2, imageMd5);
pstmt.executeUpdate();
pstmt = conn.prepareStatement(queryLastTileIDStr);
ResultSet idRes = pstmt.executeQuery();
while (idRes.next()) {
tile_id = idRes.getInt(1);
}
}
pstmt = conn.prepareStatement(insertMapRecorderStr);
pstmt.setInt(1, cutPicture.getLevel());
pstmt.setInt(2, cutPicture.getCol());
pstmt.setInt(3, cutPicture.getRow());
pstmt.setInt(4, tile_id);
pstmt.executeUpdate();
具体插入代码块就是这样,问题出现在多线程并发插入会使map表的tile_id出问题,请教如何处理此类问题
这篇博客探讨了在多线程环境中,使用SQLite数据库进行并发插入操作导致的问题,特别是在`map`表的`tile_id`字段上出现的冲突。作者通过示例代码展示了插入过程,包括`images`和`map`表的插入,以及查询最后插入的`tile_id`。当`tile_id`未找到时,代码会插入新的记录并获取新插入的ID。为了解决并发问题,博客提出了可能的解决方案,如使用事务或者优化并发控制策略来确保数据的一致性。

被折叠的 条评论
为什么被折叠?



