Connection con = null;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String URL = "jdbc:sqlserver://localhost:1433;DatabaseName=shop";
String user = "sa";
String password = "123";
con = DriverManager.getConnection(URL, user, password);

catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (con != null) {
System.out.println("数据库连接成功!");
} else {
System.out.println("数据库连接失败!");
}
String SQL = "select * from goods;";
Statement smt = null;
ResultSet rs = null;
try{
smt = con.createStatement();
rs = smt.executeQuery(SQL);
为什么连接上了数据库,直接查询这个语句没问题,但是执行rs = smt.executeQuery(SQL);这句时总是报如下异常。。
com.microsoft.sqlserver.jdbc.SQLServerException: 结果集没有当前行。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.verifyResultSetHasCurrentRow(SQLServerResultSet.java:483)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getterGetColumn(SQLServerResultSet.java:2047)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:2082)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:2067)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getString(SQLServerResultSet.java:2401)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:135)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1812)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)

解决方案 »

  1.   

    额。。上面那个错误是其他东西影响的。。但是有java.lang.NullPointerException这个异常、、还是那句、、怎么弄、、
      

  2.   

    空指针?看看smt = con.createStatement();执行了以后smt还是不是null
      

  3.   

    .NullPointerException异常是在哪一行发生的?
      

  4.   

    这个问题是你SQL语句引起的    String SQL = "select * from goods;";   
    将后面的分号去掉就好了 
      

  5.   


    String SQL = "select * from goods";   
    应该是这个样子
      

  6.   

    你可以分别在这些语句后面添加一些输出语句,看看到底是哪一条语句出的错,然后再改
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    System.out.println("加载数据库驱动成功");
    con = DriverManager.getConnection(URL, user, password);
    System.out.println("连接数据库成功");
    smt = con.createStatement();
    System.out.println("查询成功");
    rs = smt.executeQuery(SQL);
    System.out.println("返回结果集成功");
      

  7.   

    rs = smt.executeQuery(SQL);
    出现NullPointerException,一般就是smt为null,继续往上检查,按楼上说的方法找出问题所在的那句
      

  8.   

    String SQL = "select * from goods";   
    还有要获取查询的内容,rs.hasNext()的判断条件不能少
      

  9.   


    嗯。sql语句不需要;
    如果不需要,SQL以什么表示命令的结尾呢,难道一次只能执行一句话?
      

  10.   


    嗯。sql语句不需要;
    如果不需要,SQL以什么表示命令的结尾呢,难道一次只能执行一句话?的确,一次执行一句。多个SQL可以用存储过程
    楼主的问题应该还不是在这里
      

  11.   

    空指针?看看smt = con.createStatement();执行了以后smt还是不是null
    不是null了、、所有的对象都测试了。。不是null..但是报错了。、。Connection con = null;
    try {
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    String URL = "jdbc:sqlserver://localhost:1433;DatabaseName=shop";
    String user = "sa";
    String password = "123";
    con = DriverManager.getConnection(URL, user, password);

    catch (ClassNotFoundException e) {
    e.printStackTrace();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    if (con != null) {
    System.out.println("数据库连接成功!");
    } else {
    System.out.println("数据库连接失败!");
    }
    String SQL = "select * from goods,type where type.typeID=goods.typeID and typeName='水果'";
    PreparedStatement smt=null ;
    ResultSet rs=null ;
    try{
    smt = con.prepareStatement(SQL);
    if(smt==null)
    {
    System.out.println("fds!");
    }
    else
    {
    System.out.println("fdsfdsdf");
    }
    rs = smt.executeQuery();
    if(rs==null)
    {

    System.out.println("贝多芬!");
    }
    else
    {
    System.out.println("发个!");
    }
    String name=null;
    float price=0.1f;
    String typename=null;
    // beansearchs.add(new GoodsBean(name,price,typename));
    while(rs.next())
    {
    name=rs.getString("goodsName");
    price=rs.getFloat("price");
    typename="123";
    beansearchs.add(new GoodsBean(name,price,typename));
    }
    return SUCCESS;
    // }2013-5-30 18:30:05 org.apache.jasper.compiler.TldLocationsCache tldScanJar
    信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
    数据库连接成功!
    fdsfdsdf
    发个!