多线程调用存储过程问题

 

        书写一存储过程:proc_importurltodb;

        该存储过程的主要作用是将给定的URL拆分,以类链表的方式多个表分层次给予存储。

        主要的流程为: 首先查询表,判断要插入的数据是否存在;如果存在,则返回相应的orderid;如果不存在,则插入数据,并且返回插入后的orderid。

 

 

        由于数据量较大(千万级),因此程序中采用了ADO+多线程调用存储过程的方式,结果跑了一天的数据发现出现问题了;

由于多线程问题,可能会出现线程1插入同样数据,与此同时线程2插入同样数据,但由于库中没有要插入的数据,因此线程1和线程2会分别将数据给予插入,结果为同样的数据却出现了重复。。。。

 

 

      呵呵,每天都例行公事,出点棘手的问题。没办法只能解决处理了:

 

      方法一:数据库锁定

 

       由于是多线程调用存储过程,而整个插入逻辑都由存储过程实现,因此如果需要锁定数据,仅能靠存储过程中实现。

通过查看sql server 帮助手册以及试验,发现采用

 

     begin tran

 

     SET @OrderNum = (SELECT  top 1 urldomainorderid FROM UrlDomainTable with(tablockx)   WHERE urlinfo = @UrlDomain)

 

    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中,可以使用多线程调用数据库并返回结果。首先,需要创建一个数据库连接池来管理数据库连接,以确保线程之间可以共享连接资源并避免频繁地创建和关闭连接。 可以使用Java的多线程库来创建和管理线程。通过继承Thread类或实现Runnable接口,可以创建多个线程对象来同时执行数据库操作。 在每个线程中,可以使用JDBC(Java Database Connectivity)来连接数据库并执行SQL查询。可以使用JDBC提供的接口和方法来执行数据库操作,例如创建连接、创建和执行SQL语句、处理查询结果等。 每个线程在执行完数据库操作后,可以将结果存储在一个共享的数据结构中,例如List或Map。可以使用synchronized关键字来确保多个线程之间的数据同步和互斥访问。 当所有线程完成数据库操作后,可以通过合并和分析每个线程的结果来得到最终的结果。可以使用join()方法等待所有线程执行完毕,并对每个线程的结果进行处理和合并。 需要注意的是,在多线程调用数据库时,需要注意数据库连接的线程安全性和资源的释放。确保在操作完数据库后及时释放连接以避免连接异常或资源泄漏。 总结来说,通过合理地创建和管理线程、使用JDBC连接数据库并执行查询、同步和合并线程的结果,可以实现多线程调用数据库并返回结果的功能。这种方式可以提高数据库操作的效率和并发性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值