站内搜索: 请输入搜索关键词

当前页面: 开发资料首页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


问题解决了,原因:
程序里只用了一个数据库连接,所以当一个线程取得连接时,别的线程再取同一个连接来操作就容易出错,解决办法是每个线程都自己建立一个到数据库的连接


↑返回目录
前一篇: JSP网站如何保证多用户访问时不出错?
后一篇: JSP常用的字符串处理函数,兄弟们指点下小弟。