该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
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出问题,请教如何处理此类问题