spring+hibernate在MYSQL下的一些问题
今天在帮朋友调试一个关于多线程访问同一张表引起的Lock wait timeout exceede的问题,感觉引起的原因有:
1,没有进行优化,尽量避免多线程
2,根据它后面报的异常,提醒我可以Hibernate 的Session没有使用得当,(也是我解决的方案)
3,用synchronized修饰更新表的函数
估计是原来程序在修改完该表时立刻进行了插入操作导致的,
所以我在更新后进行getHibernateTemplate().flush();
最后,在插入操作(save())时,原本他是又创建了一个新的DAO,再将记录插入到数据库中,而因为是同一个DAO,我将其删掉,直接调用save(),这个问题也就解决了!
调试之前:
public boolean createCurrentSL(Users u){
try {
String queryString = "update Appendlist set isCurrent=? where isCurrent='1' and uid=?";
Object[] objs=new Object[2];
objs[0]=false;
objs[1]=u.getUid();
getHibernateTemplate().bulkUpdate(queryString,objs);
ApplicationContext factory=new ClassPathXmlApplicationContext("applicationContext.xml");
IAppendlistDAO alDAO=(IAppendlistDAO)factory.getBean(IAppendlistDAO.BEAN_NAME);
Calendar cal=Calendar.getInstance();
if(cal.get(Calendar.MONTH)!=Calendar.DECEMBER)
cal.set(Calendar.MONTH, Calendar.MONTH+1);
else
cal.set(Calendar.MONTH, Calendar.JANUARY);
int max=cal.getActualMaximum(Calendar.DAY_OF_MONTH);
for(int i=1;i<=max;i++){
Appendlist al=new Appendlist();
al.setUsers(u);
al.setMonthday(i);
al.setIsCurrent(true);
al.setAlDemo("ABSENT");
alDAO.save(al);
}
return true;
} catch (RuntimeException re) {
System.out.println("createCurrentSL failed");
re.printStackTrace();
return false;
}
}
调试之后:
public boolean createCurrentSL(Users u){
try {
String queryString = "update Appendlist set isCurrent=? where isCurrent='1' and uid=?";
Object[] objs=new Object[2];
objs[0]=false;
objs[1]=u.getUid();
getHibernateTemplate().bulkUpdate(queryString,objs);
getHibernateTemplate().flush();
Calendar cal=Calendar.getInstance();
if(cal.get(Calendar.MONTH
相关文档:
[MySQL优化] -- 如何了解SQL的执行频率
时间:2010-2-28来源:HaCMS开源社区 作者:chuxu
MySQL 客户端连接成功后,通过 show [session|global]status 命令 可以提供服务器状态信息,也可以在操作系统上使用 mysqladmin extended-status 命令获得这些消息。 show [session|global] status 可以根据需要加上参数&ldquo ......
方法一
使用phpmyadmin,这是最简单的了,修改mysql库的user表,不过别忘了使用PASSWORD函数。
方法二
使用mysqladmin,这是前面声明的一个特例。
mysqladmin -u root -p password mypasswd
输入这个命令后,需要输入root的原密码,然后root的密码将改为mypasswd。
把命令里的root改为你的用户名,你就可以改你 ......
MySQL的数据表类型很多,MySQL一共向用户提供了包括DBD、HEAP、ISAM、MERGE、MyIAS、InnoDB以及Gemeni这7种表。其中DBD、InnoDB属于事务安全类表,而其他属于事务非安全类表。
DBD
Berkeley DB(DBD)表是支持事务处理的表,由Sleepycat软件公司开发。它提供MySQL用户期待已久的功能--事务控制。事务控制在任何数据库系统中 ......
源地址: http://www.pcppc.cn/shujuku/mysql/shujuku_163919.html
您正在看的MySQL教程是:MySQL数据库学习笔记。
MySQL数据库学习笔记
(实验环境:Redhat9.0,MySQL3.23.54)
纲要:
一,连接MySQL
二,MySQL管理与授权
三,数据库简单操作
四, ......