jdbc:Java Database Connectivity
    首先要添加数据库驱动jar包,然后在connect.jsp页面中加载数据库驱动并创建数据库连接。

    注册数据库驱动(记住)

    1. Class.forName("com.mysql.jdbc.Driver"); //(MySQL 5)
    2. Class.forName("com.mysql.cj.jdbc.Driver"); //(MySQL 6以上)
    3. String url = "jdbc:mysql://localhost:3306/test";
    4. String name = "111";
    5. String pwd = "1234";
    6. //获取Connection对象
    7. Connection conn = DriverManager.getConnection(url,name,pwd);

    添加记录(记住)

    1. //注意这里前面有ed后面没有
    2. PerparedStatement ps = conn.gerPrepareStatement("insert into Student(Sname,Sno,Sage) values (?,?,?)");
    3. ps.setString(1,"lry");
    4. ps.setInt(2,123);
    5. ps.setInt(3,21);
    6. ps.close();
    7. conn.close();

    查询记录(记住)

    1. Statement stmt = conn.createStatement();
    2. String sql = "select * from Student";
    3. ResultSet rs = stmt.executeQuery(sql); //注意这里是executeQuery
    4. while(rs.next()){
    5. String name = rs.getString("Sname");
    6. String age = rs.getInt("Sage");
    7. String Sno = rs.getInt("Sno");
    8. }
    9. rs.close();
    10. stmt.close();
    11. conn.close();

    实例:

    <%
        try {
            // 加载数据库驱动,注册到驱动管理器
            Class.forName("com.mysql.cj.jdbc.Driver");
            // 数据库连接字符串
            String url = "jdbc:mysql://localhost:3306/test";
            // 数据库用户名
            String username = "root";
            // 数据库密码
            String password = "miankuku";
            // 创建Connection连接
            Connection conn = DriverManager.getConnection(url,username,password);
            // 判断 数据库连接是否为空
            if(conn != null){
                // 输出连接信息
                out.println("数据库连接成功!");
                // 关闭数据库连接
                conn.close();
            }else{
                // 输出连接信息
                out.println("数据库连接失败!");
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    %>
    

    PreparedStatement
    §PreparedStatement对象对SQL语句的占位符参数赋值,其参数的下标值不是0,而是1,它与数组的下标有所区别。

    添加数据:
    此处仅写添加操作的jsp界面,省略表单页面。

    <body>
        <%request.setCharacterEncoding("utf-8");%>
        //通过<jsp:useBean>实例化JavaBean对象Book
        <jsp:useBean id="book" class="com.Lesson10.bean.Book"></jsp:useBean>
        <jsp:setProperty property="*" name="book"/>
        <%
            try {
                // 加载数据库驱动,注册到驱动管理器
                Class.forName("com.mysql.cj.jdbc.Driver");
                // 数据库连接字符串
                String url = "jdbc:mysql://localhost:3306/test";
                // 数据库用户名
                String username = "root";
                // 数据库密码
                String password = "miankuku";
                // 创建Connection连接
                Connection conn = DriverManager.getConnection(url,username,password);
                // 添加图书信息的SQL语句
                String sql = "insert into tb_books(name,price,bookCount,author) values(?,?,?,?)"; 
                // 获取PreparedStatement
                PreparedStatement ps = conn.prepareStatement(sql);
                // 对SQL语句中的第1个参数赋值
                ps.setString(1, book.getName());
                System.out.println("name:"+book.getName());
                // 对SQL语句中的第2个参数赋值
                ps.setDouble(2, book.getPrice());
                // 对SQL语句中的第3个参数赋值
                ps.setInt(3,book.getBookCount());
                // 对SQL语句中的第4个参数赋值
                ps.setString(4, book.getAuthor());
                // 执行更新操作,返回所影响的行数
                int row = ps.executeUpdate();
                // 判断是否更新成功
                if(row > 0){
                    // 更新成输出信息
                    out.print("成功添加了 " + row + "条数据!");
                }
                // 关闭PreparedStatement,释放资源
                ps.close();
                // 关闭Connection,释放资源
                conn.close();
            } catch (Exception e) {
                out.print("图书信息添加失败!");
                e.printStackTrace();
            }
        %>
        <br>
        <a href="index.jsp">返回</a>
    </body>
    

    数据查询操作

    servlet中:
    返回查询结果->创建Book对象的List->while(resultset.next())进行Book对象的批量赋值->setAttribute将List存入request中,请求转发。

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
            try {
                Class.forName("com.mysql.cj.jdbc.Driver");// 加载数据库驱动,注册到驱动管理器
                String url = "jdbc:mysql://localhost:3306/test";// 数据库连接字符串
                String username = "root";// 数据库用户名
                String password = "miankuku";// 数据库密码
                Connection conn = DriverManager.getConnection(url,username,password);// 创建Connection
                Statement stmt = conn.createStatement();// 获取Statement
                String sql = "select * from tb_books";// 添加图书信息的SQL语句
                ResultSet rs = stmt.executeQuery(sql);// 执行查询
                List<Book> list = new ArrayList<Book>();// 实例化List对象
                while(rs.next()){
                    Book book = new Book();// 实例化Book对象
                    book.setId(rs.getInt("id"));// 对id属性赋值
                    book.setName(rs.getString("name"));// 对name属性赋值
                    book.setPrice(rs.getDouble("price"));// 对price属性赋值
                    book.setBookCount(rs.getInt("bookCount"));// 对bookCount属性赋值
                    book.setAuthor(rs.getString("author"));// 对author属性赋值
                    list.add(book);// 将图书对象添加到集合中
                }
                request.setAttribute("list", list);// 将图书集合放置到request之中
                rs.close();        // 关闭ResultSet
                stmt.close();    // 关闭Statement
                conn.close();    // 关闭Connection
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            request.getRequestDispatcher("/10/bookList.jsp").forward(request, response); // 请求转发到book_list.jsp
    }
    

    结果显示页面中:
    用jsp对传入的Attribute生成列表结果

    <table align="center" width="450" border="1" height="180" bordercolor="white" 
        bgcolor="black" cellpadding="1" cellspacing="1">
            <tr bgcolor="white">
                <td align="center" colspan="5">
                    <h2>所有图书信息</h2>
                </td>
            </tr>
            <tr align="center" bgcolor="#e1ffc1" >
                <td><b>ID</b></td>
                <td><b>图书名称</b></td>
                <td><b>价格</b></td>
                <td><b>数量</b></td>
                <td><b>作者</b></td>
            </tr>
                <%
                    // 获取图书信息集合
                    List<Book> list = (List<Book>)request.getAttribute("list");
                    // 判断集合是否有效
                    if(list == null || list.size() < 1){
                        out.print("没有数据!");
                    }else{
                        // 遍历图书集合中的数据
                        for(Book book : list){
                %>
                    <tr align="center" bgcolor="white">
                        <td><%=book.getId()%></td>
                        <td><%=book.getName()%></td>
                        <td><%=book.getPrice()%></td>
                        <td><%=book.getBookCount()%></td>
                        <td><%=book.getAuthor()%></td>
                    </tr>
                <%
                        }
                    }
                %>
        </table>