为什么stmt.executeUpdate返回1却没有插入数据库
我把同样的sql语句拿到sql server的查询分析器里运行却能正常插入数据,
更奇怪的是如果我运行一遍程序,然后再把同样的sql语句在查询分析器里运行,这样所插入的纪录的自动编号比它前面那条大2,即如果前面有一条记录的自动编号是27,此时插入的这条的编号就是29,可是程序中的那一条就是没有插入!也没有返回任何错误信息,这是咋回事啊???
请问大家有没有碰到过这样的情况?
我是从datasource中取连接,然后用statement来插入的
我把同样的sql语句拿到sql server的查询分析器里运行却能正常插入数据,
更奇怪的是如果我运行一遍程序,然后再把同样的sql语句在查询分析器里运行,这样所插入的纪录的自动编号比它前面那条大2,即如果前面有一条记录的自动编号是27,此时插入的这条的编号就是29,可是程序中的那一条就是没有插入!也没有返回任何错误信息,这是咋回事啊???
请问大家有没有碰到过这样的情况?
我是从datasource中取连接,然后用statement来插入的
User类中的insertUser方法:
public int insertUser(DataSource ds){
int result=0;
Connection conn;
try {
conn = ds.getConnection();
PreparedStatement pstmt=conn.prepareStatement("insert into tb_customer(username,password,cusTrueName,"+
"cusAddress,cusPostcode,cusProvince,cusCity,cusTel,cusEmail,cusCardType,cusCardNo) "+
"values(?,?,?,?,?,?,?,?,?,?,?)");
pstmt.setString(1,username);
pstmt.setString(2,password);
pstmt.setString(3,cusTrueName);
pstmt.setString(4,cusAddress);
pstmt.setString(5,cusPostcode);
pstmt.setString(6,cusProvince);
pstmt.setString(7,cusCity);
pstmt.setString(8,cusTel);
pstmt.setString(9,cusEmail);
pstmt.setString(10,cusCardType);
pstmt.setString(11,cusCardNo);
pstmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
}registerAction中的execute方法:
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response){
RegisterForm registerForm = (RegisterForm) form;
String username=registerForm.getUsername();
String password=registerForm.getPassword();
String cusTrueName=registerForm.getCusTrueName();
String cusAddress=registerForm.getCusAddress();
String cusPostcode=registerForm.getCusPostcode();
String cusProvince=registerForm.getCusProvince();
String cusCity=registerForm.getCusCity();
String cusTel=registerForm.getCusTel();
String cusEmail=registerForm.getCusEmail();
String cusCardType=registerForm.getCusCardType();
String cusCardNo=registerForm.getCusCardNo();
ActionMessages errors=new ActionMessages();
DataSource ds=getDataSource(request);
DBUtil dbu=new DBUtil(ds);
if(UserDao.userExist(dbu,username)){
errors.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("errors.username.exist"));
if(!errors.isEmpty()){
saveErrors(request,errors);
}
dbu.close();
return mapping.findForward("failure");
}
dbu.close();
User user=new User(username,
password,
cusTrueName,
cusAddress,
cusPostcode,
cusProvince,
cusCity,
cusTel,
cusEmail,
cusCardType,
cusCardNo); int result=0;
result=user.insertUser(ds);
if(result!=1){
errors.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("errors.insert.failed"));
if(!errors.isEmpty()){
saveErrors(request,errors);
}
return mapping.findForward("failure");
}
HttpSession session=request.getSession();
session.setAttribute("username",username);
return mapping.findForward("success");
}}
Class.forName("net.sourceforge.jtds.jdbc.Driver");
String URL="jdbc:jtds:sqlserver://localhost:1433/db_webshop;user=sa;password=";
Connection conn=DriverManager.getConnection(URL);
其它都不变,这样就能插入数据,这样就说明Connection conn = ds.getConnection()这里得到的conn有问题,但是这个conn不是null,而且我在前面用过这样的conn,它能正常连接数据库的,这是怎么回事?
<data-source type="org.apache.commons.dbcp.BasicDataSource">
<set-property property="driverClassName" value="net.sourceforge.jtds.jdbc.Driver"/>
<set-property property="url" value="jdbc:jtds:sqlserver://localhost:1433/db_webshop"/>
<set-property property="username" value="sa"/>
<set-property property="password" value=""/>
<set-property property="maxActive" value="10"/>
<set-property property="maxWait" value="5000"/>
<set-property property="minCount" value="4"/>
<set-property property="maxCount" value="10"/>
<set-property property="defaultAutoCommit" value="false"/>
<set-property property="defaultReadOnly" value="false"/>
</data-source>