多线程访问数据库(当多用户同时访问时会出现数据错误)
时间:2011-10-24
来源:互联网
action类:
public class CheckAction
{
private CheckDAO checkDAO = new CheckDAO();
public CheckDAO getCheckDAO()
{
return checkDAO;
}
public void setCheckDAO(CheckDAO checkDAO)
{
this.checkDAO = checkDAO;
}
public String update()
{
checkDAO.update();
return "update ";
}
}
DAO类:
public class CheckDAO
{
private Connection conn = null;
private String sql = " ";
private ResultSet rSet = null;
//将数据插入到TABLE1,然后获自增的ID,再更新TABLE2,当只有一个用户操作时数据正确,多用户并发数据就不正确了
public void update()
{
try
{
conn = JdbcUtils.getConnection();
sql= "INSERT INTO TABLE1 (NAME,PASSWORD) VALUES ( 'NAME1 ', 'NAME1 ') ";
conn.prepareStatement(sql).executeUpdate();
sql = "SELECT IDENT_CURRENT( 'TABLE1 ') NewId ";
rSet = conn.prepareStatement(sql).executeQuery();
rSet.next();
sql= "UPDATE TABLE2 SET table1_id=rSet.getString( "NewId "), IsDone= 'Y ' ";
conn.prepareStatement(sql).executeUpdate();
}
finally
{
JdbcUtils.free(rSet,null,conn);
}
}
}
数据库连接:
public class JdbcUtils
{
private static DataSource myDataSource = null;
private JdbcUtils()
{
}
static
{
try
{
Properties prop = new Properties();
InputStream is = JdbcUtils.class.getClassLoader()
.getResourceAsStream( "dbcpconfig.properties ");
prop.load(is);
myDataSource = BasicDataSourceFactory.createDataSource(prop);
}
catch (Exception e)
{
throw new ExceptionInInitializerError(e);
}
}
public static Connection getConnection() throws SQLException
{
// return DriverManager.getConnection(url, user, password);
return myDataSource.getConnection();
}
public static void free(ResultSet rs, Statement st, Connection conn)
{
try
{
if (rs != null)
rs.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
try
{
if (st != null)
st.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
if (conn != null)
{
try
{
conn.close();
//myDataSource.free(conn);
}
// catch (SQLException e)
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
}
}
struts.xml:
<?xml version= "1.0 " encoding= "UTF-8 "?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN "
"http://struts.apache.org/dtds/struts-2.1.dtd ">
<struts>
<package name= "default " namespace= "/ " extends= "json-default ">
<action>
<result name= "update "> </result>
</action>
</package>
</struts>
public class CheckAction
{
private CheckDAO checkDAO = new CheckDAO();
public CheckDAO getCheckDAO()
{
return checkDAO;
}
public void setCheckDAO(CheckDAO checkDAO)
{
this.checkDAO = checkDAO;
}
public String update()
{
checkDAO.update();
return "update ";
}
}
DAO类:
public class CheckDAO
{
private Connection conn = null;
private String sql = " ";
private ResultSet rSet = null;
//将数据插入到TABLE1,然后获自增的ID,再更新TABLE2,当只有一个用户操作时数据正确,多用户并发数据就不正确了
public void update()
{
try
{
conn = JdbcUtils.getConnection();
sql= "INSERT INTO TABLE1 (NAME,PASSWORD) VALUES ( 'NAME1 ', 'NAME1 ') ";
conn.prepareStatement(sql).executeUpdate();
sql = "SELECT IDENT_CURRENT( 'TABLE1 ') NewId ";
rSet = conn.prepareStatement(sql).executeQuery();
rSet.next();
sql= "UPDATE TABLE2 SET table1_id=rSet.getString( "NewId "), IsDone= 'Y ' ";
conn.prepareStatement(sql).executeUpdate();
}
finally
{
JdbcUtils.free(rSet,null,conn);
}
}
}
数据库连接:
public class JdbcUtils
{
private static DataSource myDataSource = null;
private JdbcUtils()
{
}
static
{
try
{
Properties prop = new Properties();
InputStream is = JdbcUtils.class.getClassLoader()
.getResourceAsStream( "dbcpconfig.properties ");
prop.load(is);
myDataSource = BasicDataSourceFactory.createDataSource(prop);
}
catch (Exception e)
{
throw new ExceptionInInitializerError(e);
}
}
public static Connection getConnection() throws SQLException
{
// return DriverManager.getConnection(url, user, password);
return myDataSource.getConnection();
}
public static void free(ResultSet rs, Statement st, Connection conn)
{
try
{
if (rs != null)
rs.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
try
{
if (st != null)
st.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
if (conn != null)
{
try
{
conn.close();
//myDataSource.free(conn);
}
// catch (SQLException e)
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
}
}
struts.xml:
<?xml version= "1.0 " encoding= "UTF-8 "?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN "
"http://struts.apache.org/dtds/struts-2.1.dtd ">
<struts>
<package name= "default " namespace= "/ " extends= "json-default ">
<action>
<result name= "update "> </result>
</action>
</package>
</struts>
作者: yubao0723 发布时间: 2011-10-24
每天回帖即可获得10分可用分
作者: jnhcd 发布时间: 2011-10-24
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28