zoukankan      html  css  js  c++  java
  • 怎么读取数据库中数据

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

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

  • 相关阅读:
    HLG 1522 子序列的和【队列的应用】
    POJ 3273 Monthly Expense【二分】
    HDU 4004 The Frog's Games 【二分】
    POJ 2001 Shortest Prefixes【第一棵字典树】
    POJ 2823 Sliding Window【单调对列经典题目】
    HDU 1969 Pie 【二分】
    POJ 3125 Printer Queue【暴力模拟】
    POJ 3250 Bad Hair Day【单调栈】
    字典树【模板】
    验证码 Code
  • 原文地址:https://www.cnblogs.com/yumofei/p/5261923.html
Copyright © 2011-2022 走看看