使用servlet 查询数据库后记录显示在jsp页面,不报错误,获取不到数据库表的值,全部代码如下,请大侠帮忙

yuhouqingchen2020 2016-04-26 10:09:13
package bean;

public class Student {
private String sno;
private String sname;
private String sex;
private int age;
private String sdept;
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSdept() {
return sdept;
}
public void setSdept(String sdept) {
this.sdept = sdept;
}
}

-------------
package dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

import bean.Student;
public class DBConnection {

/**
* 驱动类名称
*/
private static final String DRIVER_CLASS = "sun.jdbc.odbc.JdbcOdbcDriver";

/**
* 数据库连接字符串
*/
private static final String DATABASE_URL = "jdbc:odbc:ybsNH";

/**
* 数据库用户名
*/
private static final String USER_NAME = "sa";

/**
* 数据库密码
*/
private static final String PASSWORD = "";

/**
* 数据库连接类
*/
private static Connection conn;

/**
* 数据库操作类
*/
private static Statement stmt;



// 加载驱动
static{
try {
Class.forName(DRIVER_CLASS);
} catch (Exception e) {
System.out.println("加载驱动错误");
System.out.println(e.getMessage());
}
}

// 取得连接
private static Connection getConnection(){

try {
conn = DriverManager.getConnection(DATABASE_URL, USER_NAME, PASSWORD);
} catch (Exception e) {
System.out.println("取得连接错误");
System.out.println(e.getMessage());
}
return conn;
}


public void ExecuteDel(String sql){

try {
stmt = getConnection().createStatement();
} catch (Exception e) {
System.out.println("statement取得错误");
System.out.println(e.getMessage());
}

try {
int rows = stmt.executeUpdate(sql);
if(rows >= 1){
System.out.println("成功删除.....");
} else {
System.out.println("删除失败.....");
}

} catch (Exception e) {
// TODO: handle exception
}


}
public String getName(String sql){
String name="";
try {
stmt = getConnection().createStatement();
} catch (Exception e) {
System.out.println("statement取得错误");
System.out.println(e.getMessage());
return null;
}

try {

// 查询数据库对象,返回记录集(结果集)
ResultSet rs = stmt.executeQuery(sql);

// 循环记录集,查看每一行每一列的记录
while (rs.next()) {
// 第一列 sno
name = rs.getString(1);
}

} catch (Exception e) {
System.out.println(e.getMessage());
}
return name;

}
public ArrayList<Student> getStudentList(String sql){

ArrayList<Student> list = new ArrayList<Student>();

// 取得数据库操作对象
try {
stmt = getConnection().createStatement();
} catch (Exception e) {
System.out.println("statement取得错误");
System.out.println(e.getMessage());
return null;
}

try {

// 查询数据库对象,返回记录集(结果集)
ResultSet rs = stmt.executeQuery(sql);

// 循环记录集,查看每一行每一列的记录
while (rs.next()) {
// 第一列 sno
String sno = rs.getString(1);

// 第2列 sname
String sname = rs.getString(2);

// 性别
//String ssex = rs.getString(3);

// 年龄
//int sage = rs.getInt(4);

// 系
//String sdept = rs.getString(5);

Student stu = new Student();
stu.setSno(sno);
stu.setSname(sname);
//stu.setAge(sage);
//stu.setSex(ssex);
//stu.setSdept(sdept);


list.add(stu);
}

} catch (Exception e) {
System.out.println(e.getMessage());
}
return list;
}
}
-----------
package servlet;

import javax.servlet.http.HttpServlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import bean.Student;

import dao.DBConnection;
public class StuServlet extends HttpServlet {


public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

this.doPost(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

DBConnection db = new DBConnection();

String sql = "SELECT Sno, Sname FROM stutb";

ArrayList<Student> list = db.getStudentList(sql);

request.setAttribute("list", list);


request.getRequestDispatcher("index.jsp").forward(request, response);
}
}
-----------
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<servlet>
<servlet-name>StuServlet</servlet-name>
<servlet-class>servlet.StuServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>DelServlet</servlet-name>
<servlet-class>servlet.DelServlet</servlet-class>
</servlet>


<servlet-mapping>
<servlet-name>StuServlet</servlet-name>
<url-pattern>/stuservlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>DelServlet</servlet-name>
<url-pattern>/delservlet</url-pattern>
</servlet-mapping>


<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
---------
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>list</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>

<body>

<table border="1">
<tr>
<td>编号</td>
<td>姓名</td>

</tr>

<c:forEach items="${list}" var="stu">
<tr>
<td>${stu.sno}</td>
<td>${stu.sname}</td>

<td><a href="delservlet?sno=${stu.sno}">删除</a></td>
</tr>
</c:forEach>
</table>


</body>
</html>
...全文
478 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
愤怒的小枫 2016-04-28
  • 打赏
  • 举报
回复
引用 2 楼 ybsybsybsybs 的回复:
数据库的表是有的,是SQL2012的数据库 SELECT TOP 1000 [Sno] ,[Sname] FROM [ybsNH].[dbo].[stutb]
ok了,我sqlserver的版本号过低,数据库url写错了,害得我一直连不上,囧!回到你的问题,通过加载jdbc驱动的方式连接数据库(不是你的jdbc/odbc),是可以运用你的项目的,jsp页面有显示。你换一种连接数据库的方式试一下,应该不会出现问题了
愤怒的小枫 2016-04-28
  • 打赏
  • 举报
回复
引用 2 楼 ybsybsybsybs 的回复:
数据库的表是有的,是SQL2012的数据库 SELECT TOP 1000 [Sno] ,[Sname] FROM [ybsNH].[dbo].[stutb]
我引用了你的代码,然后不知道是不是我自己以前装的sqlserver2008配置的问题,还是怎么了,我是一直连不上数据库,(jdbc)和(jdbc/odbc)两种方法都试过,就是连不上...后来我换了mysql后,验证了代码,发现了jsp是有数据显示的,建议你用mysql试一下,应该可以
愤怒的小枫 2016-04-27
  • 打赏
  • 举报
回复
结果集是空的,检查sql语句中的表名是否跟数据库中要查询的表名一致?
愤怒的小枫 2016-04-27
  • 打赏
  • 举报
回复
那你检查一下list中是否有内容?或者stu是否为空?
yuhouqingchen2020 2016-04-27
  • 打赏
  • 举报
回复
数据库的表是有的,是SQL2012的数据库 SELECT TOP 1000 [Sno] ,[Sname] FROM [ybsNH].[dbo].[stutb]
JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String是最基本的数据类型吗? 基本数据类型包括byte、int、char、long、float、double、boolean和short。 java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 3、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型封装类 booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。 4、String 和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。 5、运行时异常与一般异常有何异同? 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 6、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,求到达时运行其service方法,service方法自动派遣运行与求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个求,并且其实例一般不会销毁,而CGI对每个求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。 7、说出ArrayList,Vector, LinkedList的存储性能和特性 ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 8、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 EJB包括Session Bean、Entity Bean、Message Driven Bea

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧