WebRowSet批量读取数据和批量保存数据 高手帮看看

bphantom 2013-06-21 05:42:42
//数据批量读取函数,没问题,代码如下:
public ByteArrayOutputStream getDBStream(String sSQL) throws IOException, SQLException{
ResultSet rs = null;
WebRowSet wr= null;
try{
//ResultSet rs = stmt.executeQuery("select top 10 * from t_exit");
rs = stmt.executeQuery(sSQL);
wr= new WebRowSetImpl();
ByteArrayOutputStream os = new ByteArrayOutputStream() ;
wr.populate(rs);
wr.writeXml(os);

return os;
}
catch(SQLException e){
e.printStackTrace();
return null;
}
catch(IOException e){
e.printStackTrace();
return null;
}
finally{
rs.close();
wr.close();
}
}

//数据存储测试1,更新失败?????????
public int PutDBStream(ByteArrayOutputStream os) throws SyncProviderException, SQLException, IOException{
//ByteArrayInputStream in = new ByteArrayInputStream(os.toByteArray());
byte[] buff = os.toByteArray();
ByteArrayInputStream in = new ByteArrayInputStream(buff);

ResultSet rs = null;
WebRowSet wr = null;
//Enumeration<SyncProvider> en = SyncFactory.getRegisteredProviders();
//while(en.hasMoreElements()){
// SyncProvider p = en.nextElement();
// System.out.println(p.getClass().getName());
//}
try{
rs = stmt.executeQuery("select top 1 * from t_test");

wr= new WebRowSetImpl();
wr.populate(rs);



wr.first();
wr.updateString(3, "terry");
wr.updateRow();
wr.acceptChanges(conn); // 错误:无法确定表名 ?? 网上说可以 wr.populate(rs); 就可以了



}
catch(SyncProviderException e){
e.printStackTrace();
return 0;
}
catch(SQLException e){
e.printStackTrace();
return 0;
}
finally{
in.close();
//rs.close();
wr.close();
os.close();
}


return 1;
}
//数据存储测试2,更新成功失败,插入失败 ????????????
public int PutDBStream(ByteArrayOutputStream os) throws SyncProviderException, SQLException, IOException{
//ByteArrayInputStream in = new ByteArrayInputStream(os.toByteArray());
byte[] buff = os.toByteArray();
ByteArrayInputStream in = new ByteArrayInputStream(buff);

ResultSet rs = null;
WebRowSet wr = null;
//Enumeration<SyncProvider> en = SyncFactory.getRegisteredProviders();
//while(en.hasMoreElements()){
// SyncProvider p = en.nextElement();
// System.out.println(p.getClass().getName());
//}
try{
//rs = stmt.executeQuery("select top 1 * from t_test");

wr= new WebRowSetImpl();
//wr.populate(rs);

wr.setUrl(url);
wr.setUsername(uid);
wr.setPassword(pwd);
wr.setCommand("select top 1 * from t_test");
wr.execute();

wr.first();
wr.updateString(3, "terry");
wr.updateRow();

wr.last();
wr.moveToInsertRow();
wr.updateInt(2, 3);
wr.updateString(3, "t1");
wr.insertRow();
wr.moveToCurrentRow();
wr.acceptChanges(conn); //成功更新数据 ,但插入失败,单独执行插入也不行,看来插入代码有问题,高手帮看看



}
catch(SyncProviderException e){
e.printStackTrace();
return 0;
}
catch(SQLException e){
e.printStackTrace();
return 0;
}
finally{
in.close();
//rs.close();
wr.close();
os.close();
}


return 1;
}

//调用代码为
private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try {
// TODO add your handling code here:
ByteArrayOutputStream out=dbtest.getDBStream("select top 10 * from t_exit");

if (1==dbtest.PutDBStream(out)){
jTextArea1.append("/r/n保存数据成功");
}

} catch (IOException ex) {
ex.printStackTrace();
} catch (SQLException ex) {
ex.printStackTrace();
}
}

//数据存储测试3,使用getDBStream从t_exit返回读取的数据,然后插入到t_exit_t,
//批量插入数据库,返回成功了,但插入的表里一条数据都没有.读数据,以及传入都是有的
public int PutDBStream(ByteArrayOutputStream os) throws SyncProviderException, SQLException, IOException{
ByteArrayInputStream in = new ByteArrayInputStream(os.toByteArray());
//byte[] buff = os.toByteArray();
//ByteArrayInputStream in = new ByteArrayInputStream(buff);

//ResultSet rs = null;
WebRowSet wr = null;
//Enumeration<SyncProvider> en = SyncFactory.getRegisteredProviders();
//while(en.hasMoreElements()){
// SyncProvider p = en.nextElement();
// System.out.println(p.getClass().getName());
//}
try{
//rs = stmt.executeQuery("select top 1 * from t_test");

wr= new WebRowSetImpl();
//wr.populate(rs);

wr.setUrl(url);
wr.setUsername(uid);
wr.setPassword(pwd);
wr.setCommand("select * from t_exit_t where 1=2");
wr.execute();

wr.readXml(in);
//wr.acceptChanges(conn);
conn.setAutoCommit(false);
try {
wr.acceptChanges(conn);
wr.commit();
} catch (Exception e) {
// expected
e.printStackTrace();
wr.rollback();
conn.setAutoCommit(true);
return 0;
}
conn.setAutoCommit(true);

}
catch(SyncProviderException e){
e.printStackTrace();
return 0;
}
catch(SQLException e){
e.printStackTrace();
return 0;
}
finally{
in.close();
//rs.close();
wr.close();
os.close();
}


return 1;
}
...全文
139 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bphantom 2013-08-05
  • 打赏
  • 举报
回复
大数据量提交,使用prepareStatment,不能使用WebRowSet.
bphantom 2013-06-26
  • 打赏
  • 举报
回复
wrs_temp.readXml(in); //wrs_temp.readXml(new FileReader(new File("D:\\tt.xml"))); //wrs_temp.first(); while(wrs_temp.next()){ wr.moveToInsertRow(); wr.updateString(1, wrs_temp.getString(1)); wr.updateString(2, wrs_temp.getString(2)); wr.updateString(3, wrs_temp.getString(3)); } wr.moveToCurrentRow(); wr.acceptChanges(conn); 如上一行一行的插入,就可以.得一个字段一个字段的负值,然后一行一行的插入,多累呀. wr.readXml(in); wr.acceptChanges(conn); 居然不行,晕
bphantom 2013-06-25
  • 打赏
  • 举报
回复
这么久了,没有回复, 什么原因??

58,452

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧