怎么读取数据库中数据

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.最后就大功告成了

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

 

posted @ 2016-03-10 14:53  雨沫霏  阅读(20438)  评论(0编辑  收藏  举报