1.要先了解是用MVC的思想来实现,MVC是由模型层(Model),视图层(View)和控制器层(Controller)这三个相互独立的层面所组成的。
2.第二步是很重要的,你要有MYSQL,并在其中创建表。
3.在MyEclipse中建立一个项目并给项目取一个名字,在此我建立的名字为userManager。

4.现在来分析M层需要什么,然而M需要建立实体类,dao层和DBHelper类(DBHelper是一个很好用的类,将要用的封装起来)
4.1 建立实体类(User),需要根据数据库中定义的内容来制定,例如
package entity;
public class User {
private String userID;//数据成员(字段)
private String userName;
private String password;
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}在以上代码中定义了3个数据成员,分别是userID,userName,password;它们都定义为私有的。
4.2 建立dao层
package dao;
import java.util.*;
import java.sql.*;
import entity.*;
import DBHelper.DBHelper;
public class Userdao {
public List getAllUser()
{
try
{
String SQL="SELECT* FROM user";
ResultSet rs=DBHelper.getResultSet(SQL);
List users=new ArrayList();
while(rs.next())
{
User u=new User();
u.setUserID(rs.getString("userID"));
u.setUserName(rs.getString("userName"));
u.setPassword(rs.getString("password"));
users.add(u);
}
return users;
}
catch(Exception ex){
ex.printStackTrace();
return null;
}
}
}在以上代码中体现的是要查询所有的用户数据
List是列表的意思,List getAllUser是列出所有的数据
try是抛出异常
String SQL="SELECT * FROM user"是指查询数据库中user表
ResultSet rs=DBHelper.getResultSet(SQL);是指结果等于SQL中的数据结果集
List users=new ArrayList();是指输出用户列表
然后用循环语句来遍历数据
while(rs.next())
{
User u=new User();
u.setUserID(rs.getString("userID"));
u.setUserName(rs.getString("userName"));
u.setPassword(rs.getString("password"));
users.add(u);
}返回值为 users
最后写一个捕获异常的语句,返回值为空
4.3 DBHelper
package DBHelper;
import java.io.Console;
import java.sql.*;
import java.util.Enumeration;
//import java.util.logging.*;
//import javax.swing.table.*;
/**
* SQL 基本操作
* 通过它,可以很轻松的使用 JDBC 来操纵数据库
* @author Null
*/
public class DBHelper
{
/**
* 驱动
*/
//public static String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
public static String driver = "com.mysql.jdbc.Driver";
/**
* 连接字符串
*/
//public static String url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=st";
public static String url = "jdbc:mysql://127.0.0.1:3306/test";
/**
* 用户名
*/
public static String user = "root";
/**
* 密码
*/
public static String password = "root";
/**
* 不允许实例化该类
*/
private DBHelper()
{
}
/**
* 获取一个数据库连接
* 通过设置类的 driver / url / user / password 这四个静态变量来 设置数据库连接属性
* @return 数据库连接
*/
public static Connection getConnection()
{
try
{
//获取驱动
Class.forName(driver);
} catch (ClassNotFoundException ex)
{
//Logger.getLogger(DBHelper.class.getName()).log(Level.SEVERE, null, ex);
System.out.println(ex.getMessage());
}
try
{
return DriverManager.getConnection(url, user, password);
} catch (SQLException ex)
{
//Logger.getLogger(DBHelper.class.getName()).log(Level.SEVERE, null, ex);
System.out.println(ex.getMessage());
return null;
}
}
/**
* 获取一个 Statement
* 该 Statement 已经设置数据集 可以滚动,可以更新
* @return 如果获取失败将返回 null,调用时记得检查返回值
*/
public static Statement getStatement()
{
Connection conn = getConnection();
if (conn == null)
{
return null;
}
try
{
return conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
// 鐠佸墽鐤嗛弫鐗堝祦闂嗗棗褰叉禒銉︾泊閸旓拷閸欘垯浜掗弴瀛樻煀
} catch (SQLException ex)
{
//Logger.getLogger(DBHelper.class.getName()).log(Level.SEVERE, null, ex);
System.out.println(ex.getMessage());
close(conn);
}
return null;
}
/**
* 获取一个 Statement
* 该 Statement 已经设置数据集 可以滚动,可以更新
* @param conn 数据库连接
* @return 如果获取失败将返回 null,调用时记得检查返回值
*/
public static Statement getStatement(Connection conn)
{
if (conn == null)
{
return null;
}
try
{
return conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
// 设置数据集可以滚动,可以更新
} catch (SQLException ex)
{
//Logger.getLogger(DBHelper.class.getName()).log(Level.SEVERE, null, ex);
System.out.println(ex.getMessage());
return null;
}
}
/**
* 获取一个带参数的 PreparedStatement
* 该 PreparedStatement 已经设置数据集 可以滚动,可以更新
* @param cmdText 需要 ? 参数的 SQL 语句
* @param cmdParams SQL 语句的参数表
* @return 如果获取失败将返回 null,调用时记得检查返回值
*/
public static PreparedStatement getPreparedStatement(String cmdText, Object[] cmdParams)
{
Connection conn = getConnection();
if (conn == null)
{
return null;
}
PreparedStatement pstmt = null;
try
{
pstmt = conn.prepareStatement(cmdText, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
int i = 1;
for (Object item : cmdParams) //java foreach遍历集合,要求集合类实现Enumeration接口
{
pstmt.setObject(i, item);
i++;
}
} catch (SQLException e)
{
e.printStackTrace();
close(conn);
}
return pstmt;
}
/**
* 获取一个带参数的 PreparedStatement
* 该 PreparedStatement 已经设置数据集 可以滚动,可以更新
* @param conn 数据库连接
* @param cmdText 需要 ? 参数的 SQL 语句
* @param cmdParams SQL 语句的参数表
* @return 如果获取失败将返回 null,调用时记得检查返回值
*/
public static PreparedStatement getPreparedStatement(Connection conn, String cmdText, Object[] cmdParams)
{
if (conn == null)
{
return null;
}
PreparedStatement pstmt = null;
try
{
pstmt = conn.prepareStatement(cmdText, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
int i = 1;
for (Object item : cmdParams)
{
pstmt.setObject(i, item);
i++;
}
} catch (SQLException ex)
{
System.out.println(ex.getMessage());
//ex.printStackTrace();
close(pstmt);
}
return pstmt;
}
/**
* 执行 SQL 语句,返回结果为整型
* 主要用于执行非查询语句
* @param cmdText SQL 语句
* @return 非负数:正常执行; -1:执行错误; -2:连接错误
*/
public static int ExecSql(String cmdText)
{
Statement stmt = getStatement();
if (stmt == null)
{
return -2;
}
int i;
try
{
i = stmt.executeUpdate(cmdText);
} catch (SQLException ex)
{
//Logger.getLogger(DBHelper.class.getName()).log(Level.SEVERE, null,ex);
System.out.println(ex.getMessage());
i = -1;
}
closeConnection(stmt);
return i;
}
/**
* 执行 SQL 语句,返回结果为整型
* 主要用于执行非查询语句
* @param cmdText SQL 语句
* @return 非负数:正常执行; -1:执行错误; -2:连接错误
*/
public static int ExecSql(Connection conn, String cmdText)
{
Statement stmt = getStatement(conn);
if (stmt == null)
{
return -2;
}
int i;
try
{
i = stmt.executeUpdate(cmdText);
} catch (SQLException ex)
{
//Logger.getLogger(DBHelper.class.getName()).log(Level.SEVERE, null, ex);
System.out.println(ex.getMessage());
i = -1;
}
close(stmt);
return i;
}
/**
* 执行 SQL 语句,返回结果为整型
* 主要用于执行非查询语句
* @param cmdText 需要 ? 参数的 SQL 语句
* @param cmdParams SQL 语句的参数表
* @return 非负数:正常执行; -1:执行错误; -2:连接错误
*/
//非常好用
public static int ExecSql(String cmdText, Object[] cmdParams)
{
PreparedStatement pstmt = getPreparedStatement(cmdText, cmdParams);
if (pstmt == null)
{
return -2;
}
int i;
try
{
i = pstmt.executeUpdate();
} catch (SQLException ex)
{
//Logger.getLogger(DBHelper.class.getName()).log(Level.SEVERE, null, ex);
System.out.println(ex.getMessage());
i = -1;
}
closeConnection(pstmt);
return i;
}
/**
* 执行 SQL 语句,返回结果为整型
* 主要用于执行非查询语句
* @param conn 数据库连接
* @param cmdText 需要 ? 参数的 SQL 语句
* @param cmdParams SQL 语句的参数表
* @return 非负数:正常执行; -1:执行错误; -2:连接错误
*/
public static int ExecSql(Connection conn, String cmdText, Object[] cmdParams)
{
PreparedStatement pstmt = getPreparedStatement(conn, cmdText, cmdParams);
if (pstmt == null)
{
return -2;
}
int i;
try
{
i = pstmt.executeUpdate();
} catch (SQLException ex)
{
//Logger.getLogger(DBHelper.class.getName()).log(Level.SEVERE, null, ex);
System.out.println(ex.getMessage());
i = -1;
}
close(pstmt);
return i;
}
/**
* 返回结果集的第一行的一列的值,其他忽略
* @param cmdText SQL 语句
* @return
*/
public static Object ExecScalar(String cmdText)
{
ResultSet rs = getResultSet(cmdText);
Object obj = getScalar(rs);
closeConnection(rs);
return obj;
}
/**
* 返回结果集的第一行的一列的值,其他忽略
* @param conn 数据库连接
* @param cmdText SQL 语句
* @return
*/
public static Object ExecScalar(Connection conn, String cmdText)
{
ResultSet rs = getResultSet(conn, cmdText);
Object obj = getScalar(rs);
closeEx(rs);
return obj;
}
/**
* 返回结果集的第一行的一列的值,其他忽略
* @param cmdText 需要 ? 参数的 SQL 语句
* @param cmdParams SQL 语句的参数表
* @return
*/
public static Object ExecScalar(String cmdText, Object[] cmdParams)
{
ResultSet rs = getResultSet(cmdText, cmdParams);
Object obj = getScalar(rs);
closeConnection(rs);
return obj;
}
/**
* 返回结果集的第一行的一列的值,其他忽略
* @param conn 数据库连接
* @param cmdText 需要 ? 参数的 SQL 语句
* @param cmdParams SQL 语句的参数表
* @return
*/
public static Object ExecScalar(Connection conn, String cmdText, Object[] cmdParams)
{
ResultSet rs = getResultSet(conn, cmdText, cmdParams);
Object obj = getScalar(rs);
closeEx(rs);
return obj;
}
/**
* 返回一个 ResultSet
* @param cmdText SQL 语句
* @return
*/
public static ResultSet getResultSet(String cmdText)
{
Statement stmt = getStatement();
if (stmt == null)
{
return null;
}
try
{
return stmt.executeQuery(cmdText);
} catch (SQLException ex)
{
//Logger.getLogger(DBHelper.class.getName()).log(Level.SEVERE, null, ex);
System.out.println(ex.getMessage());
closeConnection(stmt);
}
return null;
}
/**
* 返回一个 ResultSet
* @param conn
* @param cmdText SQL 语句
* @return
*/
public static ResultSet getResultSet(Connection conn, String cmdText)
{
Statement stmt = getStatement(conn);
if (stmt == null)
{
return null;
}
try
{
return stmt.executeQuery(cmdText);
} catch (SQLException ex)
{
//Logger.getLogger(DBHelper.class.getName()).log(Level.SEVERE, null, ex);
System.out.println(ex.getMessage());
close(stmt);
}
return null;
}
/**
* 返回一个 ResultSet
* @param cmdText 需要 ? 参数的 SQL 语句
* @param cmdParams SQL 语句的参数表
* @return
*/
public static ResultSet getResultSet(String cmdText, Object[] cmdParams)
{
PreparedStatement pstmt = getPreparedStatement(cmdText, cmdParams);
if (pstmt == null)
{
return null;
}
try
{
return pstmt.executeQuery();
} catch (SQLException ex)
{
//Logger.getLogger(DBHelper.class.getName()).log(Level.SEVERE, null, ex);
System.out.println(ex.getMessage());
closeConnection(pstmt);
}
return null;
}
/**
* 返回一个 ResultSet
* @param conn 数据库连接
* @param cmdText 需要 ? 参数的 SQL 语句
* @param cmdParams SQL 语句的参数表
* @return
*/
public static ResultSet getResultSet(Connection conn, String cmdText, Object[] cmdParams)
{
PreparedStatement pstmt = getPreparedStatement(conn, cmdText, cmdParams);
if (pstmt == null)
{
return null;
}
try
{
return pstmt.executeQuery();
} catch (SQLException ex)
{
//Logger.getLogger(DBHelper.class.getName()).log(Level.SEVERE, null, ex);
System.out.println(ex.getMessage());
close(pstmt);
}
return null;
}
public static Object getScalar(ResultSet rs)
{
if (rs == null)
{
return null;
}
Object obj = null;
try
{
if (rs.next())
{
obj = rs.getObject(1);
}
} catch (SQLException ex)
{
//Logger.getLogger(DBHelper.class.getName()).log(Level.SEVERE, null, ex);
System.out.println(ex.getMessage());
}
return obj;
}
private static void close(Object obj)
{
if (obj == null)
{
return;
}
try
{
if (obj instanceof Statement)
{
((Statement) obj).close();
} else if (obj instanceof PreparedStatement)
{
((PreparedStatement) obj).close();
} else if (obj instanceof ResultSet)
{
((ResultSet) obj).close();
} else if (obj instanceof Connection)
{
((Connection) obj).close();
}
} catch (SQLException ex)
{
//Logger.getLogger(DBHelper.class.getName()).log(Level.SEVERE, null, ex);
System.out.println(ex.getMessage());
}
}
private static void closeEx(Object obj)
{
if (obj == null)
{
return;
}
try
{
if (obj instanceof Statement)
{
((Statement) obj).close();
} else if (obj instanceof PreparedStatement)
{
((PreparedStatement) obj).close();
} else if (obj instanceof ResultSet)
{
((ResultSet) obj).getStatement().close();
} else if (obj instanceof Connection)
{
((Connection) obj).close();
}
} catch (SQLException ex)
{
//Logger.getLogger(DBHelper.class.getName()).log(Level.SEVERE, null, ex);
System.out.println(ex.getMessage());
}
}
private static void closeConnection(Object obj)
{
if (obj == null)
{
return;
}
try
{
if (obj instanceof Statement)
{
((Statement) obj).getConnection().close();
} else if (obj instanceof PreparedStatement)
{
((PreparedStatement) obj).getConnection().close();
} else if (obj instanceof ResultSet)
{
((ResultSet) obj).getStatement().getConnection().close();
} else if (obj instanceof Connection)
{
((Connection) obj).close();
}
} catch (SQLException ex)
{
//Logger.getLogger(DBHelper.class.getName()).log(Level.SEVERE, null, ex);
System.out.println(ex.getMessage());
}
}
}5.在C层控制器层(Controller)中建立servlet类
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Userdao dao=new Userdao();
List users=dao.getAllUser();
request.getSession().setAttribute("users", users);
response.sendRedirect("../user.jsp");
}在servlet中主要写执行语句
List users=dao.getAllUser();显示所有用户列表
request.getSession().setAttribute("users", users);请求会话的属性
response.sendRedirect("../user.jsp");跳转的页面路径
6.记得要加入SQL的驱动
7.在V层视图层(View)中写入一个jsp,取名为user,在里面写入动态内容
<body>
<%
List<User> users =(List<User>)session.getAttribute("users");
out.print("<table border=1>");
out.print("<tr><td>用户ID</td><td>用户名</td><td>密码</td></tr>");
for(User u : users)
{
out.print("<tr>");
out.print("<td>"+u.getUserID()+"</td>");
out.print("<td>"+u.getUserName()+"</td>");
out.print("<td>"+u.getPassword()+"</td>");
out.print("</tr>");
}
out.print("</table>");
%>
</body>8.最后就大功告成了

在这里显示中有??,是因为有乱码问题,还在解决中
















