错误代码段:
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:
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:
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");
多了个w
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");
是你红色的位置?你把代码全部贴出来!
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;
}
你
要么在 debug 模式下debug 看到底是哪个位置出现的null要么在conn获取前后 用 System.out.println(conn);
输出conn 的值 看是否为null!找空指针异常应该是比较简单的~~~~~~
执行到有异常出现的地方 应该就在那个范围出错了System.out.println();这种做法 比较笨 但有时候除错也蛮快的另外也可以用log方式,但记住在commit 代码钱要将这些调试的代码去掉~~
他的属性中已经生命了属性connection了
但是你的方法中却又重新定义了一个局部connection
所以你返回的值一直是null
正确写法如4楼的代码
楼主可以看看。应该能解决