JAVA Web学习(14)___第10章 Java Web的数据库操作

第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基础部分.................................................
    wy_sure阅读 3,836评论 0 11
  • JDBC基础知识 一、采用JDBC访问数据库的基本步骤: A.载入JDBC驱动程序 B.定义连接URL ...
    java日记阅读 3,911评论 0 20
  • 本人的环境为Myeclipse10、MySQL5.7.15 本文包括:简介JDBC编程步骤打通数据库程序详解—Dr...
    廖少少阅读 3,998评论 7 39
  • 在我考驾驶证期间,认识了一个在大工地上做饭的男人。他虽只有小学文化,但他说话风趣幽默,性格随和,为人热心快肠的。 ...
    15空空如也阅读 220评论 0 2
  • 最近一直在看李建华校长的《教育的温度》和“八月会议”的演讲词,看了很久,却迟迟不敢写下自己的一些心得体会,深怕自己...
    娜年娜梦阅读 1,708评论 1 0