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

2019-08-27  本文已影响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");
 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 添加数据

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;


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;
    }
    ...
    //省略部分代码
    }
<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>
<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>
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;
}
}

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

微信截图_20190827162801.png

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

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

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

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

上一篇下一篇

猜你喜欢

热点阅读