当前位置:编程学习 > JAVA >>

JDBC连接Sqlserver数据库为什么没有记录呢?

-----------------------------------DB.java文件内容---------------------------------
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.llshboy.db;

import java.sql.*;

/**
 *
 * @author Administrator
 */
public class DB
{
    private Connection con;
    private Statement stm;
    private ResultSet rs;
    private String classname = "com.microsfot.sqlserver.jdbc.SQLServerDriver";
    private String url = "jdbc:sqlserver://sqlserver:1334;DatabseName=erpdb";

    public DB()
    {
    }

    public Connection getCon()
    {
        try {
            Class.forName(classname);
        }
        catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        try {
            con = DriverManager.getConnection(url, "sa", "123456");
        }
        catch (Exception e) {
            e.printStackTrace(System.err);
            con = null;
        }
        return con;
    }

    public Statement getStmed()
    {
        try {
            con = getCon();
            stm = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

        }
        catch (Exception e) {
            e.printStackTrace(System.err);
        }

        return stm;
    }

    public ResultSet getAllRs()
    {
        String sql = "select * from [N-基本资料单头] ";
        try {
            stm = getStmed();
            rs = stm.executeQuery(sql);
        }
        catch (Exception e) {
            e.printStackTrace();
            rs = null;
        }

        return rs;
    }
}
---------------------------index.jsp文件的内容-----------------------
<%-- 
    Document   : index
    Created on : 2013-8-16, 14:19:11
    Author     : Administrator
--%>

<%@page import="java.sql.*"%>
<%@page contentType="text/html" pageEncoding="GBK"%>
<jsp:useBean id="db" class="com.llshboy.db.DB" scope="page"/>

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Hello World!</h1>
        <%
            ResultSet rs=db.getAllRs();
            if(rs==null)
            {
         %>
         <table>
        <tr align="center"  valign="middle"><td colspan="4">没有记录显示!</td></tr>
        <%
             }
            else
            {
                while(rs.next())
                {
          %>
          <tr align="center" valign="middle" height="22">
              <td><%=rs.getString("员工代号") %></td>
              <td><%=rs.getString("姓名") %></td>
              <td><%=rs.getString("性别") %></td>              
          </tr>
          </table>
        <%
                }
            }
        %>  
    </body>
</html>
没有任何错误提示,直接显示:没有记录显示,我实在找不到问题所在!
数据库 SQL Server JDBC --------------------编程问答-------------------- rs==null改成!rs.next()试试 --------------------编程问答--------------------
引用 1 楼 fudongrifdr 的回复:
rs==null改成!rs.next()试试


这样改,影响我下面的while语句中的rs.next()不? --------------------编程问答-------------------- 影响,下面得改成do while --------------------编程问答-------------------- catch (Exception e) {
            e.printStackTrace();
            rs = null;
        }

这叫没有记录?没有记录也会返回结果集对象,不会rs==null。 --------------------编程问答--------------------
引用 2 楼 llshboy 的回复:
Quote: 引用 1 楼 fudongrifdr 的回复:

rs==null改成!rs.next()试试


这样改,影响我下面的while语句中的rs.next()不?


改成这样后,if(rs.next())抛出了空异常! --------------------编程问答--------------------
引用 4 楼 forgetsam 的回复:
catch (Exception e) {
            e.printStackTrace();
            rs = null;
        }

这叫没有记录?没有记录也会返回结果集对象,不会rs==null。


关键是,前的一句e.printStackTrace();没有错误提示呀! --------------------编程问答-------------------- 先把sql直接拿到数据库里跑一下看看有记录没
--------------------编程问答-------------------- jdbc:sqlserver://sqlserver:1334
这个是ip? --------------------编程问答-------------------- sqlserver的url不得这样写吗。。jdbc:microsoft:sqlserver://localhost:1433;DatabaseName= --------------------编程问答-------------------- url不对吧 --------------------编程问答-------------------- 毫无疑问是抛异常了,否则数据库会返回一个空的rs,绝不会返回null。你可以做两件事:
第一,在执行SQL之前,把stm打印出来,同时catch里打印一句话,随便打什么,只是为了看看程序有没有走进catch里
第二,不要使用jsp,直接在java类里面把rs的结果打出来,看看结果你就明白了 --------------------编程问答--------------------
引用 9 楼 fudongrifdr 的回复:
sqlserver的url不得这样写吗。。jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=

说不定人家设定的端口是1334呢  --------------------编程问答--------------------
引用 12 楼 wyq2318032 的回复:
Quote: 引用 9 楼 fudongrifdr 的回复:

sqlserver的url不得这样写吗。。jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=

说不定人家设定的端口是1334呢 

那前面那部分呢 --------------------编程问答-------------------- 哈哈,我是看着例子输入的,我去检查一下,具体url对不对,不过,我们的端口就是1334,我改的, --------------------编程问答--------------------
引用 7 楼 e274794140 的回复:
先把sql直接拿到数据库里跑一下看看有记录没

这个是我erp系统里的数据,里面有几千个人员记录呀,不可怀疑这个! --------------------编程问答--------------------
引用 8 楼 fudongrifdr 的回复:
jdbc:sqlserver://sqlserver:1334
这个是ip?

是的呀,我们的数据库服务器的电脑名称就是sqlserver这个电脑名称的。 --------------------编程问答--------------------
引用 16 楼 llshboy 的回复:
Quote: 引用 8 楼 fudongrifdr 的回复:

jdbc:sqlserver://sqlserver:1334
这个是ip?

是的呀,我们的数据库服务器的电脑名称就是sqlserver这个电脑名称的。

直接写IP靠谱点吧。前面还有个:microsoft --------------------编程问答-------------------- 各位,兄弟姐妹,我终于知道原因了:
1. 我下载的是jdbc for sqlserver 4.0的,这个版本的不支持sqlserver2000.
   必须改为jdbc for sqlserver 3.0的。
2. 在电脑的环境变量里设定:CLASSPATH,他的值为:jdbc for sqlserver 3.0安装的目录,比如我的是:
   C:\Program Files\Microsoft SQL Server JDBC Driver 3.0\sqljdbc_3.0\chs\sqljdbc4.jar
3. 将C:\Program Files\Microsoft SQL Server JDBC Driver 3.0\sqljdbc_3.0\chs\auth\x86\下的文件:
   sqljdbc_auth.dll复制到java JDK的bin目录下:比如我的是:C:\Program Files\Java\jdk1.7.0_15\bin
4. 由于我安装的是java jdk 1.7所以,我使用了sqljdbc4.jar,如果是1.6及以下的,有可能是要换成
   sqljdbc.jar。
5. 我在用NetBeans7.4开发的,所以,必须在工程项目中的库一项中,引用库(右击:添加jar文件):
   C:\Program Files\Microsoft SQL Server JDBC Driver 3.0\sqljdbc_3.0\chs\sqljdbc4.jar
6. 以上步骤操作后,一切成功!
    --------------------编程问答--------------------  你的con,stm,rs用完记得close.. --------------------编程问答-------------------- 话说NetBeans长啥样都没见过 --------------------编程问答--------------------
引用 19 楼 fudongrifdr 的回复:
 你的con,stm,rs用完记得close..

哥,谢谢你,这个第一次学习jsp开发,我一直用微软的东西。 --------------------编程问答--------------------
引用 21 楼 llshboy 的回复:
Quote: 引用 19 楼 fudongrifdr 的回复:

 你的con,stm,rs用完记得close..

哥,谢谢你,这个第一次学习jsp开发,我一直用微软的东西。

还是叫我弟吧。。估计比你小,我90的。。
--------------------编程问答-------------------- 除 --------------------编程问答-------------------- 很好,学到了
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,