美文网首页
JAVA Web学习(14)___第10章 Java Web的数

JAVA Web学习(14)___第10章 Java Web的数

作者: 岁月静好浅笑安然 | 来源:发表于2019-08-27 16:52 被阅读0次

    第10章 Java Web的数据库操作

    10.1 JDBC技术

    10.1.1 JDBC简介

    JDBC是java程序操作数据库的API,也是Java程序与数据库交互的一门及时。

    10.1.2 JDBC连接数据库的过程

    • 注册数据库驱动
    Class.forName("com.mysql.jdbc.Driver");
    
    • 构建数据库连接URL
      数据库URL,基本格式"JDBC协议+IP地址或域名+端口+数据库名称""jdbc:mysql://localhost:3306/test"
    • 获取Connection对象
     DriverManager.getConnection(url,username,password);
    

    需要下载mysql-connector-java-5.1.10-bin.jar放在\WebRoot\WEB-INF\lib

    <%@page import="java.sql.SQLException"%>
    <%@page import="java.sql.Connection"%> <%@page
           import="java.sql.DriverManager"%> <%@page
           import="com.mysql.jdbc.Driver"%> <%@page
           language="java" import="java.util.*" pageEncoding="UTF-8"%>
       <%
           String path = request.getContextPath();
           String basePath = request.getScheme() + "://"
                   + request.getServerName() + ":" + request.getServerPort()
                   + path + "/";
       %>
       
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
       <html>
    <head>
    <base href="<%=basePath%>">
    
    <title>数据库连接</title>
    
    </head>
    
    <body>
    <%
       String str="";
       try {
           Class.forName("com.mysql.jdbc.Driver");
           String url = "jdbc:mysql://localhost:3306/hwp_db";
           String urername = "root";
           String password = "hwp123456";
           Connection conn = DriverManager.getConnection(url, urername,
                   password);
           if (conn != null) {
               // out.println("数据库连接成功");
               // conn.close();
               str = "数据库连接成功";
           } else {
               str = "数据库连接失败";
               //out.println("数据库连接失败");
           }
       } catch (ClassNotFoundException e) {
           e.printStackTrace();
           str=e.toString();
       } catch (SQLException e) {
           e.printStackTrace();
           str=e.toString();
       }
    %> 
       <h2><%=str%></h2>
    </body>
       </html>
    
    

    如果数据库连接失败,请确认数据库服务是否开启,因为只有数据库的服务处于开启状态,才能成功地与数据库建立连接。Class.forName("com.mysql.jdbc.Driver"),此类名也不要拼写错误。

    10.2 JDBC API

    10.2.1 Connection接口

    Connection接口的方法声明及说明(部分)

    方法声明 说明
    void close() 立即释放 Connection对象的数据库连接占用的JDBC资源
    void commit() 提交事务
    Statement createStatement() 创建一个 Statement对象
    boolean getAutoCommit() 判断 Connection对象是否是自动提交模式
    DatabaseMetaData getMetaData() 获取 DatabaseMetaData对象
    int getTransactionIsolation() 获取 Connection对象当前事务隔离级别
    boolean isClosed() 判断 Connection对象是否与数据库断开连接
    boolean isReadOnly() 判断 Connection对象是否为只读模式
    PreparedStatement prepareStatement(String sql) 将参数化的SQL语句预编译并存储在 PreparedStatement中
    void setAutoCommit(boolean autoCommit) 设置是否自动提交
    void setReadOnly(boolean readOnly) 将 Connection对象的连接模式设置为只读

    10.2.2 DriverManager类

    DriverManager类接口的方法声明及说明(部分)

    方法声明 说明
    Connection getConnection(String url,Properties info) 建立数据库连接
    Connection getConnection(String url) 建立数据库连接
    Connection getConnection(String url,String user, String password) 建立数据库连接
    void deregisterDriver(Driver driver) 删除一个驱动程序,参数 driver为要删除的驱动对象
    Enumeration<Driver> getDrivers() 获取所有驱动
    void registerDriver(java.sql.Driver driver) 注册驱动对象

    10.2.3 Statement接口

    10.2.4 PreparedStatement接口

    10.2.5 ResultSet接口

    10.3 JDBC操作数据库

    10.3.1 添加数据

    • 1.在mysql数据库中创建图书变 book_info,其结构如下图(navicat for mysql可视化工具示例)
      微信截图_20190827162430.png

    mysql语法示例 此语法由navicat自动生成

    CREATE TABLE `book_info` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(200) NOT NULL,
      `price` double NOT NULL,
      `bookCount` int(11) NOT NULL,
      `author` varchar(45) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
    
    
    
    • 2.创建javabean类,Book.java
    public class Book {
        //编号
        private int id;
        //名称
        private String name;
        //价格
        private double price;
        //数量
        private int bookCount;
        //作者
        private String author;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        ...
        //省略部分代码
        }
    
    • 3.创建 index.jsp,关键代码
    <form action="AddBook.jsp" method="post" onsubmit="return check(this)">
            <table align="center" width="450" border="1" bordercolor="#03A9F4">
                <tr>
                    <td align="center" colspan="2">
                        <h2>添加图书信息</h2>
                        
                    </td>
                </tr>
                <tr>
                    <td align="right" >图书名称:</td>
                    <td ><input type="text" name="name"/></td>  
                    
                </tr>
                <tr>
                    <td align="right" >价格:</td>
                    <td ><input type="text" name="price"/></td> 
                    
                </tr>
                <tr>
                    <td align="right" >数量:</td>
                    <td ><input type="text" name="count"/></td> 
                    
                </tr>
                <tr>
                    <td align="right" >作者:</td>
                    <td ><input type="text" name="author"/></td>    
                    
                </tr>
                <tr>
                    <td align="center" colspan="2">
                        <input type="submit" value="添加"/>
                    </td>
                </tr>
            </table>
        </form>
    
    • 4.创建 AddBook.jsp 关键代码
    <body>
        <%
            try {
                //加载数据库驱动
                Class.forName("com.mysql.jdbc.Driver");
                //数据库连接字符串
                String url = "jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=utf-8";
                //数据库用户名
                String user = "root";
                //数据库密码             
                String password = "hwp123456";
                //创建Connection连接 
                Connection conn = DriverManager.getConnection(url, user,
                        password);
                //添加图书是sql语句
                String sql = "insert book_info(name,price,bookCount,author)values(?,?,?,?)";
                //获取PreparedStatement对象
                PreparedStatement ps = conn.prepareStatement(sql);
                //对sql语句中的参数1赋值
                ps.setString(1, StrUtil.set(book.getName()));
                //对sql语句中的参数2赋值
                ps.setDouble(2, book.getPrice());
                //对sql语句中的参数3赋值
                ps.setInt(3, book.getBookCount());
                //对sql语句中的参数4赋值
                ps.setString(4, StrUtil.set(book.getAuthor()) );
                int row = ps.executeUpdate();
                if (row > 0) {
                    out.print("成功添加了" + row + "条数据");
    
                }
                ps.close();
                conn.close();
            } catch (Exception e) {
                out.print("添加失败了");
                e.printStackTrace();
            }
        %>
        <br>
        <a href="book.jsp">返回</a>
    </body>
    
    • 5.解决乱码工具类
    public class StrUtil {
    public static String set(String str){
        String s=null;
        try {
        s= new String(str.getBytes("ISO-8859-1"),"utf-8");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return s;
    }
    }
    
    • index.jsp页面


      微信截图_20190827160925.png
    • AddBook.jsp页面


      微信截图_20190827160844.png

    数据库添加成功实例
    乱码和不乱码

    微信截图_20190827162801.png

    技巧 <jsp:setProperty> 标签的 property属性的值可以设置为 “*”,它的作用是将与表单中同名称的属性值赋给JavaBean对象中的同名属性,使用这种方式就不必对JavaBean中的属性一一进行赋值,从而减少代码量

    使用PreparedStatement对象对sql语句的占位符参数赋值,其参数的下标值不是0,二手1,它与数组的下标有所区别。

    在执行数据操作之后,应该立即调用 ResultSet对象、 PreparedStatement对象、 Connection对象的close()方法,从而及时释放所占用的数据库资源。

    中文添加乱码问题一定要先转换

    相关文章

      网友评论

          本文标题:JAVA Web学习(14)___第10章 Java Web的数

          本文链接:https://www.haomeiwen.com/subject/uoweectx.html