几个建议
1、插入数据放入另一个表中,不要和查询数据的表放到一块 。这样方便里找错误,等你测试完了,再把它们合到一起。
2、下面这个写法不太好,你还没有调用它们的close方法,其实你这个程序中用一个Statement就可以了。
rs_ceshi = null ;
/**************/
stat_ceshi = null ;
3、你把数据库连接不要放到Application里面,这是效率最差的一种做法。 4、你程序中的Vector是多于的,可以不要它。 5、你把查询和插入还有删除的SQL都打印出来,这样方便找错。
1、插入数据放入另一个表中,不要和查询数据的表放到一块 。这样方便里找错误,等你测试完了,再把它们合到一起。
2、下面这个写法不太好,你还没有调用它们的close方法,其实你这个程序中用一个Statement就可以了。
rs_ceshi = null ;
/**************/
stat_ceshi = null ;
3、你把数据库连接不要放到Application里面,这是效率最差的一种做法。 4、你程序中的Vector是多于的,可以不要它。 5、你把查询和插入还有删除的SQL都打印出来,这样方便找错。
先前只有一个Statement,可是出了问题后,我以为一个里面同时执行太多操作有点混乱,所以每个单独用了一个,既然这没问题,我改回好了!
Vector用过的,在构造插入语句数组,因为插入的记录条数不定,用的Vector一个循环这样执行(如下)有没有什么问题的,我最不明白的是,我输出过插入循环的次数,明明只有2次,为什么有时会插入3条或4条记录????
for(ii=0 ; ii<=nums - 1; ii++)
{
stat_ins.execute( InsertSql[ii] );
}
ce1 ce2 ce3其实也没什么用,主要是我为了得到删除、检索和插入各执行了多少次而设的记录变量,各位主要看看,删除和插入的就好,谢谢各位~~~
明天我把删除的语句和插入的都打印出来看看了~
不过我就是不明白,为什么会出现每次执行结果不同,有时正确,有时又不正确???
<%
//定义要执行SQL操作的字符串
String DeleteSql = new String("") ;
String SelectSql = new String("") ;
//定义和要操作数据库的变量
Statement stat = null ;//查询 ResultSet rs = null ;
/*定义测试变量*/
ResultSet rs_ceshi = null ; //定义要执行插入操作写入InsertSql数组
Vector vec = new Vector();
String temp_s = new String("") ;
String InsertSql[] ;
//定义变量记录数组个数和循环操作控制量
int nums = 0 ;
int ii = 0 ;
/*测试变量*/
int ce1 = 0 ;
int ce2 = 0 ;
float ce3 = 0 ;
String cesql = new String("");
//把要执行的删除操作写进DeleteSql字符串中
DeleteSql = "Delete From table where 条件" ;
/*测试删除的记录条数*/
cesql = "select count(*) as ceshinums From table where 条件(和delete完全一样条件)" ;
stat =( (Connection)application.getAttribute("Global_con") ).createStatement();
/*删除执行次数*/
rs_ceshi = stat.executeQuery( cesql );
rs_ceshi.next();
ce3 = rs_ceshi.getFloat("ceshinums") ;
rs_ceshi.close() ;
rs_ceshi = null ;
/**************/ ( (Connection)application.getAttribute("Global_con") ).setAutoCommit( false ) ;
stat.execute( DeleteSql );
( (Connection)application.getAttribute("Global_con") ).commit() ;
( (Connection)application.getAttribute("Global_con") ).setAutoCommit( true ) ;
//删除成功,开始插入调出月份数据
//定义要执行SQL操作的字符串
SelectSql = "Select * From table where 条件2" ;
rs = stat.executeQuery( SelectSql );
//循环插入符合条件记录
while( rs.next())
{
//把要执行的操作写进InsertSql数组
nums = nums + 1 ; temp_s = "Insert Into ..........." ;
/*测试执行的记录条数*/
ce1++;
/********************/
vec.add(temp_s);
}
/**/
rs.close() ;
rs = null ; //执行数据库的操作,若执行操作时 IsSuccess = 1 , 若不成功时则 IsSuccess = 1
try
{
( (Connection)application.getAttribute("Global_con") ).setAutoCommit( false ) ;
InsertSql = (String[])vec.toArray(new String[nums]);
//利用循环执行数组中的insert插入语句
for(ii=0 ; ii<=nums - 1; ii++)
{
/*测试执行insert的次数*/
ce2++;
/*******************/
stat.execute( InsertSql[ii] );
}
IsSuccess = 1 ; ( (Connection)application.getAttribute("Global_con") ).commit() ;
( (Connection)application.getAttribute("Global_con") ).setAutoCommit( true ) ;
}
catch( SQLException ex)
{
IsSuccess = 0 ;
( (Connection)application.getAttribute("Global_con") ).rollback() ;
System.out.println(ex.getMessage()) ;
}
%>
应该在循环里面判断是否插入操作是否成功,如果失败,rollback 。
成功继续。
不过看资料好象支持update更新和select检索
好象没有delete和insert的说明,到底支持不?~~
请高手指点指点
如果支持给个小例子就好的
谢谢