public class Task_MIS_Thread extends Thread
{
public ArrayList batch;

public Task_MIS_Thread(ArrayList arrayBatch)
{
this.batch=arrayBatch;
} public void run()
{
Connection conn=null;
Statement stmt=null;
try
{
conn = DAO.newConMySQL();
stmt = conn.createStatement();
Iterator it=batch.iterator();
while(it.hasNext())
{
String sql=it.next().toString();
System.out.println(sql);
stmt.addBatch(sql);
}
stmt.executeBatch();
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
try
{
if(stmt!=null)
{
stmt.close();
}
if(conn!=null)
{
conn.close();
}
}
catch (SQLException e)
{
e.printStackTrace();
}
}
}
}结果发现system.out.println 在tomcat的log中明明有显示 可是 结果在批量插入的时候有后面一部分表 没有插入数据
log中还会报
Exception in thread "Thread-40" java.lang.NullPointerException
at com.mysql.jdbc.Statement.executeBatch(Statement.java:1041)
at com.schmoll.bde.Task_MIS_Thread.run(Task_MIS_Thread.java:37)
可是我拿log中输出的sql语句 直接在Navicate中 run query 都是能插入到数据库中的 并没有错误。
是不是因为我没有   conn.setAutoCommit(false); ?  Mysql是innodb引擎

解决方案 »

  1.   

    INNODB是事务引擎,插入前有begin,那么在插入后必须带commit,提交。
      

  2.   

    LS的意思是 executeBatch之后加commit吗
      

  3.   

    检查你的SQL语句,应该是有错误,然后导致MYSQL整个事务不会提交。
      

  4.   


    SQL语句的逻辑应该没有问题 我单独拿出来 在Navicate中 试过都可以  而且这个现象是在 项目稳定运行了几个月后突然出现的  也是最近更新过 1周后 出现的。最近一周的更新我就在Navicate中用query批量删掉了去年的数据另外如果是sql语句报错 exception应该抓住会再tomcat日志中显示出来的吧
      

  5.   


    你试试MYISAM表,看会不会出现这样的问题。
      

  6.   

    错误显示是空指针异常Exception in thread "Thread-40" java.lang.NullPointerException,估计是你的下标溢出了