+ -
当前位置:首页 → 问答吧 → 多线程访问数据库(当多用户同时访问时会出现数据错误)

多线程访问数据库(当多用户同时访问时会出现数据错误)

时间: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>  

作者: yubao0723   发布时间: 2011-10-24

每天回帖即可获得10分可用分

作者: jnhcd   发布时间: 2011-10-24