为什么我在做批量更新时出错,而在批量插入或删除时就没有错能执行呢?
难道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<proid.length;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 "<font color=green>成功 </font>"; } catch (ClassNotFoundException e) {
e.printStackTrace();
return "<font color=green>不成功  </font>";
} catch (SQLException e) { e.printStackTrace();
return "<font color=green>不成功 </font>";
}
}
}

解决方案 »

  1.   

    String sql="update TabDemo set enum="+enum[i]+" where proid ='"+proid[i]+"'";
    这行有错~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~``
    type Exception reportmessage 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)
      

  2.   

    PreparedStatement sta = con.prepareStatement("update TabDemo set enum=? where proid =?");
    for(int i=0;i<proid.length;i++)
    {
    sta.setString(1,enum[i]);
    sta.setString(2,proid[i]);
             sta.executeUpdate();
    }大哥你基本语法都是错的
      

  3.   

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

  4.   

    for(int i=0;i<proid.length;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);我需要数组的,到底该怎么解决啊?
      

  5.   

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

  6.   

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

  7.   

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

  8.   

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

  9.   

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

  10.   

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

  11.   

    Sunny319(努力学习java中.) 

    PreparedStatement sta = con.prepareStatement("update TabDemo set enum=? where proid =?");
    for(int i=0;i<proid.length;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 errorTool completed with exit code 1我的问题怎么解决啊,我是菜鸟不懂的,谁帮忙解决啊,啊5555555
      

  12.   

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

  13.   

    import java.sql.PreparedStatement;加上这个
      

  14.   

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

  15.   

    批量更新   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语句,变换参数多次执行,一次更新。
      

  16.   


    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();
    }
    }