错误代码段:
  try {
 stmt1 = conn.createStatement();
 rs = stmt1.executeQuery(sql1);
while(rs.next())
  {
System.out.println(rs.getString("fid"));
s1=rs.getString("fid");

String sql2="select fid from contra_record limit 1,5;";
stmt2 = conn.createStatement();
rs2=stmt2.executeQuery(sql2);
错误提示:
java.lang.NullPointerException
at com.move.MysqlMov.save2(MysqlMov.java:80)
at com.move.test.MysqlMovTest.testMove2(MysqlMovTest.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99)
at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75)
at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45)
at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:66)
at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:

解决方案 »

  1.   

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;import javax.naming.InitialContext;
    import javax.sql.DataSource;import org.omg.CORBA.Context;public class DB {

    public static Connection getConnection() {
    Connection con = null;
    try {
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    Connection conn = DriverManager.getConnection ("jdbc:mysql://wlocalhost:3307/pop", "root", "root");
      

  2.   

    wlocalhost
    多了个w
      

  3.   

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;import javax.naming.InitialContext;
    import javax.sql.DataSource;import org.omg.CORBA.Context;public class DB {

    public static Connection getConnection() {
    Connection conn = null;
    try {
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    conn = DriverManager.getConnection ("jdbc:mysql://localhost:3307/pop", "root", "root");
      

  4.   

    java:80)
    是你红色的位置?你把代码全部贴出来!
      

  5.   

    package com.move;
    import java.sql.Connection;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.List;public class MysqlMov {
    public int save2()
    {
     String s1,c1;
     Connection conn=DB.getConnection();
      int key=-1;
      String sql1="select fid from inflow_population_information where sex='2' limit 1,5;";
      System.out.println(sql1);
    Statement stmt1=null;
    Statement stmt2=null;
    Statement stmt3=null;
    Statement stmt4=null;
    PreparedStatement pstmt=null;
    ResultSet rs = null ;
    ResultSet rs2=null;
    ResultSet rs3=null;
    ResultSet rs4=null;

    //锟芥不锟斤拷同锟斤拷FID 锟斤拷锟斤拷锟斤拷
    List<String>  fids_non = new ArrayList<String>();
    int flag = 1;
     long timeTestStart=System.currentTimeMillis();//记录开始时间

      try {
     stmt1 = conn.createStatement();
     rs = stmt1.executeQuery(sql1);
    while(rs.next())
      {
    System.out.println(rs.getString("fid"));
    s1=rs.getString("fid");

    String sql2="select fid from contra_record limit 1,5;";
    stmt2 = conn.createStatement();
    rs2=stmt2.executeQuery(sql2);

    while(rs2.next())
    {   


    System.out.println(rs2.getString("fid"));
    c1=rs2.getString("fid");
    System.out.println("s1--"+s1+"\t"+"s2--"+c1);
    if(s1.equals(c1))

    fids_non.add(s1);

    String sql3="select contra_state,contra_date from contra_record where fid='"+s1+"';";
    stmt4 = conn.createStatement();
     rs3=stmt4.executeQuery(sql3);
    while(rs3.next())
    {

    String sql4="update inflow_population_information set contra_state=(?),contra_date=(?) where fid='"+c1+"',;";
    pstmt=DB.getPreStmt(conn,sql4);
    pstmt.setString(1,rs3.getString("contra_state"));
    pstmt.setString(2,rs3.getString("contra_date"));
    pstmt.executeUpdate();

    }

    }




    }
    }   
    String fid="(";
    for(int i = 0;i<fids_non.size();i++)
    {
    fid=fid+"'"+fids_non.iterator().next()+"'"+",";
    System.out.println("fid ......."+fid);

    }

    fid=fid.substring(0, fid.length()-1)+");";
    System.out.println("fid ......."+fid);
    String sqlFid="select WID,FID,NAME,BOY_NUM,GIRL_NUM,contra_state,contra_date from contra_record where fid NOT IN"+fid+" limit 1,5";
    System.out.println("sqlFid ......."+sqlFid);

    System.out.println(sqlFid);
    stmt3 = conn.createStatement();
    rs4=stmt3.executeQuery(sqlFid);
    while(rs4.next())
    {
    String sql6="insert into inflow_population_information(wid,fid,name,boy_num,girl_num,contra_state,contra_date) values(?,?,?,?,?,?,?);";
    pstmt=null;
    pstmt=DB.getPreStmt(conn,sql6);
    pstmt.setString(1,rs4.getString("WID"));
    pstmt.setString(2,rs4.getString("FID"));
    pstmt.setString(3,rs4.getString("NAME"));
    pstmt.setString(4,rs4.getString("BOY_NUM"));
    pstmt.setString(5,rs4.getString("GIRL_NUM"));
    pstmt.setString(6,rs4.getString("contra_state"));
    pstmt.setDate(7,rs4.getDate("contra_date"));
    pstmt.executeUpdate();
    }


    System.out.println("----OK");


     }catch(SQLException e) {
     e.printStackTrace();
    System.out.println("出现异常1."); } catch(Exception e) {
    e.printStackTrace();
    System.out.println("出现异常2.");    }finally{
       
       
       
       
    DB.closeRs(rs);
    DB.closeRs(rs2);
    DB.closeRs(rs3);
    DB.closeRs(rs4);
    DB.closePreStmt(pstmt);
    DB.closeStmt(stmt1);
    DB.closeStmt(stmt2);
    DB.closeStmt(stmt3);
    DB.closeStmt(stmt4);

    DB.closeConn(conn);




    }
       long timeTestEnd=System.currentTimeMillis();//记录结束时间
         System.out.println("运行时间是"+(timeTestEnd-timeTestStart)); 
    return key;
    }
      

  6.   

    数据库连接获取失败conn 为 null 

    要么在 debug 模式下debug 看到底是哪个位置出现的null要么在conn获取前后 用 System.out.println(conn);
    输出conn 的值 看是否为null!找空指针异常应该是比较简单的~~~~~~
      

  7.   

    Connection conn=DB.getConnection();DB.getConnection();这个方法全贴出来!
      

  8.   

    补充下 先设置断点 再启动debug 用单步执行
    执行到有异常出现的地方 应该就在那个范围出错了System.out.println();这种做法 比较笨 但有时候除错也蛮快的另外也可以用log方式,但记住在commit 代码钱要将这些调试的代码去掉~~
      

  9.   

    你的getConnection方法写的有问题。
    他的属性中已经生命了属性connection了
    但是你的方法中却又重新定义了一个局部connection
    所以你返回的值一直是null
    正确写法如4楼的代码
    楼主可以看看。应该能解决
      

  10.   

    既然是NULLPOINTEREXCEPTION那就是你肯定引用了一个没有初始化的东西。第80行。有东西是空指向的!