最近自学的时候遇到了这么一个问题……
首先,任务要求是这样的:
1.在数据库中新建一个用户状态表。里面包含2个字段。user_status(userid bigint,status int)
userid为自增。
status默认为0;
插入1000条记录。
2.写一个存储过程,从user_status表中获取一条status=0的userid字段的值,取出userid时,需要同时把这条记录对应的status从0修改为1.
3.开启2个线程,在线程中循环调用第2步中的存储过程,直到user_status表中记录全部取完(即status全部为1)。要求:在2个线程中取出的userid不能重复。并把取出的userid,打印到某个文件中,一行一个userid
我的存储过程:
ALTER procedure [dbo].[sp_getuserid] as declare @userid int declare @count int set @count=1 Begin TransAction select top 1 @userid=userid from user_status where status=0 update user_status set status=1 where status=0 and userid =@userid set @count = @@ROWCOUNT If @count=0 begin rollback TransAction return 0 end Else Begin select userid from user_status where userid=@userid Commit TransAction End
java的程序代码:
public class Status implements Runnable { private int num; @Override public void run() { Boolean flag = true; while(flag) { this.writeFile(this.getUserid()); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } @SuppressWarnings("unchecked") public List<UserBean> getUserid() { // 创建数据库连接 Connection conn = ConnectDb.Connect(); QueryRunner qRunner = new QueryRunner(); List<UserBean> list = new ArrayList<UserBean>(); try { list = qRunner.query(conn, "exec sp_getuserid", new BeanListHandler(UserBean.class)); } catch (Exception e) { e.printStackTrace(); } DbUtils.closeQuietly(conn); return list; } public Boolean writeFile(List<UserBean> list) { File file = new File("d:/test.txt"); if (!file.exists()) try { file.createNewFile(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } if (list==null||list.size()==0) return false; else { try { FileOutputStream out = new FileOutputStream(file, true); for (int i = 0; i < list.size(); i++) { System.out.println("userId:"+list.get(i).getUserid()+""); StringBuffer sb = new StringBuffer(); SimpleDateFormat df = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss:SSS"); sb.append(df.format(new Date()) + " \t" + list.get(i).getUserid()+ " \t"+this.getNum()); sb.append(System.getProperty("line.separator")); out.write(sb.toString().getBytes("utf-8")); } out.close(); return true; } catch (Exception e) { e.printStackTrace(); return true; } } } public static void main(String[] args) { for(int j=0;j<50;j++){ System.out.println("status["+j+"]"+" start!"); new Thread(new Status(j)).start(); } } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public Status(int num) { this.num=num; } }
如何解决并发问题啊,我在隔壁也问过这个问题,但是要求是不能增加字段啊……也许是我写的方法太烂了……
现在结果是:在txt中缺少几条数据,但在数据库中已经更新了……也就是说,某些条目虽然在数据库中更新了,但并没有写入到txt中。
相关推荐
在进销存管理系统的实现中,可能会用到Java的集合框架来存储和处理数据,如ArrayList、HashMap等,以及多线程技术来处理并发操作,如库存同步更新。此外,系统可能还涉及到XML或JSON格式的数据交换,用于与服务器的...
在Java编程环境中,实现登录注册功能并连接到SQL Server数据库是一项常见的任务,它涉及到网络通信、数据处理和数据库操作等多个核心领域。以下是一份详细的解释,涵盖了如何使用Java实现这一功能的关键知识点: 1....
此外,Java的多线程能力也使得系统在处理大量并发请求时表现稳定。 SQL Server,全称为Microsoft SQL Server,是一款功能强大的关系型数据库管理系统,被广泛应用于企业级数据存储和管理。在本系统中,SQL Server...
在本项目中,你可能还会接触到Java的多线程编程,以实现并发处理。 SQL Server作为关系型数据库管理系统,其核心在于SQL语言。理解并熟练使用SELECT、INSERT、UPDATE、DELETE等SQL语句进行数据查询、插入、修改和...
JAVA的多线程支持确保了系统在处理并发请求时的稳定性和响应速度。同时,JAVA的跨平台性使得该系统能在多种操作系统上运行,增强了系统的兼容性和灵活性。 SQL Server作为数据库管理系统,提供了高效的数据存储和...
同时,Java的多线程特性确保了系统在并发访问时的稳定性。 SQL Server 2000是一款功能强大的关系型数据库管理系统,具备数据存储、查询、备份、恢复等核心功能。在图书馆管理系统中,SQL Server 2000扮演着数据仓库...
6. **多线程**:Java的多线程能力可以实现并发处理,提高系统响应速度,尤其是在处理大量并发请求时。 Sql Server数据库在进销存管理系统中的作用主要包括: 1. **数据存储**:所有进销存数据,如商品信息、订单...
同时,Java的多线程特性使得系统能够处理并发操作,提高用户体验。 其次,SQL Server作为关系型数据库管理系统,具备高性能、高可靠性及丰富的数据管理功能。在图书借阅管理系统中,SQL Server用于存储图书信息(如...
同时,Java的多线程特性使得系统能同时处理多个任务,提高了系统的效率。 库存管理系统的功能通常包括:商品信息管理、库存数量统计、出入库记录、库存预警、供应商管理等。在本系统中,虽然描述提到部分小功能未...
- **多线程**:在处理并发操作时,如取款、存款等可能涉及账户余额变动的操作,需要使用多线程保证数据的安全性。 - **异常处理**:通过try-catch-finally结构处理可能出现的异常情况,确保程序的稳定运行。 2. *...
【学校图书馆管理系统】是一个基于Java编程语言和SQL Server数据库技术的综合实训项目,旨在实现对图书馆各类资源的有效管理和便捷检索。这个系统集成了图书借阅、归还、查询、预约、取消预约等功能,同时考虑了权限...
1. **多线程处理**:聊天系统需要处理并发的用户请求,因此需要使用JAVA的线程机制来保证多用户的实时通信。 2. **Socket编程**:JAVA的Socket类提供了网络通信的基础,用于建立客户端与服务器之间的连接,实现数据...
- 通常,针对SQL Server的备份程序可能使用C#、Java或Python等编程语言编写,这些语言都有强大的数据库连接和支持多线程的库。 - .NET Framework或.NET Core可能是此程序的基础,它们提供了对SQL Server的内置支持...
《图书管理系统》是一款基于Java编程语言开发的软件应用,它结合了SQL Server数据库技术,为用户提供了一套完整的图书信息管理解决方案。系统的核心功能包括图书的录入、查询、借阅、归还、库存管理以及用户管理等多...
在IT行业中,面试是检验求职者技能和知识的关键环节,特别是对于编程岗位,如C#、Java和SQL Server开发者。这些技术是企业级应用开发的基石,因此掌握它们的深入理解至关重要。以下将分别探讨这些领域的核心知识点。...
此外,Java的多线程支持也能确保系统在高并发环境下的稳定运行。 JSP(JavaServer Pages)作为Java Web开发的一种技术,主要用于生成动态网页。在酒店管理系统中,JSP负责展示用户界面,将后台处理的结果以友好的...
在本项目中,我们探讨的是一个使用JAVA编程语言编写的教师信息管理系统,该系统与SQL Server数据库紧密结合,用于存储和管理教师的相关数据。这个课程设计旨在帮助学生掌握JAVA语言的实际应用以及数据库系统的交互。...
【标题】:“毕业设计java+SQL Server2005图书馆管理系统”是一个综合性的项目,它展示了如何使用Java编程语言和SQL Server 2005数据库技术来构建一个实用的图书管理解决方案。这个系统旨在帮助图书馆管理员高效地...
该系统的核心在于SQL Server数据库的高效存储和查询能力,以及Java语言的稳定性和跨平台特性,使得系统能够满足大规模数据处理和多用户并发访问的需求。 一、SQL Server数据库 SQL Server是微软公司开发的一款关系...
综上所述,"Bank_JAVA.rar"项目涵盖了从数据库设计、Java编程到多线程、安全等多个方面的知识点,是一个典型的Java与SQL Server结合的银行系统实现。通过学习这个项目,开发者可以深入理解如何构建类似的金融应用。