当前页面: 开发资料首页 → JSP 专题 → 多用户同时存取blob字段的同步问题?
多用户同时存取blob字段的同步问题?
摘要: 多用户同时存取blob字段的同步问题?
问题是这样的:
一个jsp, axis+tomcat5.0+oracle的一个网站项目,
其中有一个用axis框架写的WEBSERVIC, 实现图片等二进制内容的存储,客户端单线程运行时没有问题,但多个线程时就出问题,blob的存储是这样的模式:
INSERT INTO T (FIELDA) VALUES( EMPTY_BLOB())
SELECT FIELDA FROM T FOR UPDATE
然后获取输出流,往FIELDA里输入图片的二进制内容.
请问如何处理多用户并发存储图片的问题?
或者说清楚点就是: 普通的网站一般都能存图片之类的大对象,也一定是多用户同时访问, 那么如何处理多用户并发执行时的线程同步问题,如果两个甚至更多个用户正好在同一时刻往数据库里存图片,同步如何实现呢?
这个问题跟应用程序无关
而且你的sql文已经实现了
SELECT FIELDA FROM T FOR UPDATE
for update吗 就是给纪录+了个同步锁
纪录被琐了,其他用户就会等待。
但是为什么我的程序会出错呢?
出错的错误消息是什么?
java.sql.SQLException: Io 异常: Size Data Unit (SDU) mismatch
java.sql.SQLException: Io 异常: Bad packet type
java.sql.SQLException: Io 异常: Unexpected packet
java.sql.SQLException: Io 异常: Bad packet type
问题解决了,原因:
程序里只用了一个数据库连接,所以当一个线程取得连接时,别的线程再取同一个连接来操作就容易出错,解决办法是每个线程都自己建立一个到数据库的连接