是一个很简单的项目,就是客户端发字符给服务,服务器查询下返回,都是用Myeclipse生成的服务和客户端,使用MSSQL 加 tomcat  我一跑起来就  Caused by: java.lang.NullPointerException
服务代码这这样,客户端就一个main传一个参数输出结果,没了
package com.service;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class SelGrade {
private static final String SQLString = "sun.jdbc.odbc.JdbcOdbcDriver";
private static final String SQLConString = "jdbc:odbc:TestDataBase";
private Connection con = null; public SelGrade() {
try {
Class.forName(SQLString);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
con = DriverManager.getConnection(SQLConString);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public String selGrade(String s_id) {
String result = null;
try {
Statement stme = con.createStatement();  //这里 , at com.service.SelGrade.selGrade(SelGrade.java:32)为什么呢? 
ResultSet rs = stme
.executeQuery("select * from Student where s_id='" + s_id
+ "'");
while (rs.next()) {
result = rs.getString(3);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
}

解决方案 »

  1.   

    System.out一下你的con,应该是由于con=null导致的
      

  2.   

    可能程序没运行public SelGrade()方法直接运行了下面那个public String selGrade(String s_id)方法,所以conn为空,我觉得你的代码应该放在一个方法里,而不用分开到两个方法中:详细见下面代码:把红色字体的代码加到public String selGrade(String s_id)方法中
    package com.service;import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;public class SelGrade {
        private static final String SQLString = "sun.jdbc.odbc.JdbcOdbcDriver";
        private static final String SQLConString = "jdbc:odbc:TestDataBase";
        private Connection con = null;
     public String selGrade(String s_id) {
            String result = null;
            try {
               Class.forName(SQLString);
               con = DriverManager.getConnection(SQLConString);

                Statement stme = con.createStatement();  
                ResultSet rs =stme.executeQuery("select * from Student where s_id='" + s_id + "'");
                while (rs.next()) {
                    result = rs.getString(3);
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return result;
        }
      

  3.   

    我改了,是没有报异常了,可是不知道为什么语句是输出NULL,,, service可以有数据,client就没有了,,,这又是怎么回事
      

  4.   

    try里面加上
    stme.close();
    con.close();
      

  5.   

    突然发现:原来你查到数据后,都没保存起来,在client中当然得不到数据了。应该在while(rs.next)中保存数据。例如: while (rs.next()) {
    user = new User();
    user.setId(rs.getInt("user_id"));
    user.setName(rs.getString("user_name"));
    }
      

  6.   

    "jdbc:odbc:TestDataBase"; TestDataBase 是系统数据源不 用户数据源 tomcat单独启动的时候不可以用