站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题菜鸟100分跪求一JAVA批量更新问题,急~~~~~

菜鸟100分跪求一JAVA批量更新问题,急~~~~~

摘要: 菜鸟100分跪求一JAVA批量更新问题,急~~~~~


为什么我在做批量更新时出错,而在批量插入或删除时就没有错能执行呢?
难道update时不能用数组吗?
大家帮忙啦,急~~~!!
package depots;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
import depots.*;


public class SaveBean22 {
private String[] proid;
private String[] enum;

public String[] getProid() {
return proid;
}
public void setProid(String[] proid) {
this.proid = TOGBKFY.toGBK(proid);
}

public String[] getEnum() {
return enum;
}
public void setEnum(String[] enum) {
this.enum =TOGBKFY.toGBK(enum);
}

public String getSave(){
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection con=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;User=sa;");
con.setCatalog("DataDemo");
PreparedStatement sta = con.prepareStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
for(int i=0;i{
String sql="update TabDemo set enum="+enum[i]+" where proid ='"+proid[i]+"'";
sta.executeUpdate(sql);
}
con.commit();
sta.close();
con.close();
sta=null;
con=null;
return "成功 ";

} catch (ClassNotFoundException e) {
e.printStackTrace();
return "不成功 ";
} catch (SQLException e) {

e.printStackTrace();
return "不成功 ";
}
}
}



错误代码是什么!


String sql="update TabDemo set enum="+enum[i]+" where proid ='"+proid[i]+"'";
这行有错

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~``
type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:367)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:293)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:240)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:286)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:562)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:974)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:205)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:562)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:974)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:177)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:562)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:974)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:156)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:562)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:974)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:203)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:637)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:484)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:568)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:631)
at java.lang.Thread.run(Thread.java:536)


root cause

java.lang.NullPointerException
at depots.SaveBean22.getSave(SaveBean22.java:92)
at org.apache.jsp.depot.cklh3_jsp._jspService(cklh3_jsp.java:67)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:136)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:320)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:293)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:240)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:286)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:562)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:974)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:205)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:562)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:974)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:177)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:562)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:974)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:156)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:562)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:974)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:203)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:637)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:484)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:568)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:631)
at java.lang.Thread.run(Thread.java:536)




cklh3.jsp有空指针.


PreparedStatement sta = con.prepareStatement("update TabDemo set enum=? where proid =?");
for(int i=0;i{
sta.setString(1,enum[i]);
sta.setString(2,proid[i]);
sta.executeUpdate();
}

大哥你基本语法都是错的


String sql="update TabDemo set enum='"+enum[i]+"' where proid ='"+proid[i]+"'";

enum 是String



for(int i=0;i{
String sql="update intidy set enum="+enum[i]+" where proid ='"+proid[i]+"'";
sta.executeUpdate(sql);
}
这样就有错,只要是传的数组就有错

如果传的是单独一条记录不是数组就没错
String sql="update intidy set enum="+enum+" where proid ='"+proid+"'";
sta.executeUpdate(sql);

我需要数组的,到底该怎么解决啊?


批量更新不是这么个更新法,要用addBatch


空指针,说明你enum数组中的元素本来就有问题!!
还有enum字段是什么类型,varchar要加单引号的!
还有这根本就不叫批量更新,楼上说了批量更新的方法!!


批量更新使用addBatch()与executeBatch()



瀑布汗...
SQL语句你怎么用数组....



他的代码
for(int i=0;i{
String sql="update TabDemo set enum="+enum[i]+" where proid ='"+proid[i]+"'";
sta.executeUpdate(sql);
}
就是不断变化参数嘛,这个就是可以用批量更新来做!


应该这样写:
PreparedStatement sta = con.prepareStatement("update TabDemo set enum=? where proid =?");
for(int i=0;i{
sta.setString(1,enum[i]);
sta.setString(2,proid[i]);
sta.addBatch();
}
sta.executeBatch();


Sunny319(努力学习java中.)

PreparedStatement sta = con.prepareStatement("update TabDemo set enum=? where proid =?");
for(int i=0;i{
sta.setString(1,enum[i]);
sta.setString(2,proid[i]);
sta.addBatch();
}
sta.executeBatch();


有错,报
H:/MPL/WEB-INF/classes/depots/SaveBean22.java:91: cannot resolve symbol
symbol : class PreparedStatement
location: class depots.SaveBean22
PreparedStatement sta = con.prepareStatement("update intidy set enum=? where proid =?");
^
1 error

Tool completed with exit code 1



我的问题怎么解决啊,我是菜鸟不懂的,谁帮忙解决啊,啊5555555


我JDK是 j2sdk1.4.1_02 的
不会跟着有关吧???


import java.sql.PreparedStatement;

加上这个


没有引进包文件:
加载import java.sql.PreparedStatement;就可以了!


批量更新

  1、Statement

  Statement sm = cn.createStatement();
  sm.addBatch(sql1);
  sm.addBatch(sql2);
  ...
  sm.executeBatch()

  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有

  2、PreparedStatement

  PreparedStatement ps = cn.preparedStatement(sql);
  {
  ps.setXXX(1,xxx);
  ...
  ps.addBatch();
  }
  ps.executeBatch();

  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。



try {

con = source.getConnection();
con.setAutoCommit(false);
con.setTransactionIsolation (Connection.TRANSACTION_SERIALIZABLE);
stmt = con.createStatement();



stmt.executeUpdate(updatesql);

con.commit();
}
} catch (Exception e) {

e.printStackTrace();
try {
con.rollback();
} catch (Exception ex) {
ex.printStackTrace();
}

} finally {
if (stmt != null) {
stmt.close();
}
if (con != null) {
con.close();
}
}


我这个也是批量提交的


↑返回目录
前一篇: 求救,java基础问题!
后一篇: 关于commons-fileupload上传文件