多线程并发向数据库插入数据问题

唱歌的后续 2015-01-22 10:03:11
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会出错,求问大神应该如何解决此类问题。
...全文
546 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
xtayhicbladwin 2015-01-22
  • 打赏
  • 举报
回复
不知道 报的什么错 数据库 连接过多的错误 还是什么? 但看线程安全 ,我现在感觉是安全的。因为没有看到竞争条件 ,"select last_insert_rowid()"; 这句由数据库保证了线程的安全

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧