当前位置: 首页 > article >正文

JavaWeb | JSP访问数据库、JDBC操作

目录:

    • 1.JDBC简介
    • 2.Statement 和 PreparedStatement 的区别
    • 3.导入连接数据库Jar包
    • 4.JDBC操作
      • 4.1 Statement操作
        • 使用Statement“添加数据”
        • 使用Statement“删除数据”
        • 使用Statement“修改数据”
        • 使用Statement“查询数据”
      • 4.2 PreparedStatement操作
        • 使用PreparedStatement“添加数据”
        • 使用PreparedStatement“删除数据”
        • 使用PreparedStatement“修改数据”
        • 使用PreparedStatement“查询数据”

1.JDBC简介

  • JSP中可以写Java代码,很明显可以通过Java代码访问数据库

  • 在Java技术系列中访问数据库的技术”JDBC“,它提供了一系列的API,让Java语言编写的代码能连接数据库,对数据库的数据进行增加删除修改查询

  • JDBC有的API存放在java.sql宝中,主要包括以下接口

    java.sql.Connection : 负责连接数据库。

    java.sql.Statement : 负责执行数据库的sql语句不能参数化查询,一般只用其的功能)

    java.sql.PreparedStatement : 负责执行数据库sql语句 (能 参数化查询/动态查询,其的功能都常用)。

    java.sql.ResultSe : 负责存放查询结果 (存放结果集)。

2.Statement 和 PreparedStatement 的区别

  • 参数化查询 / 动态查询
    StatementPreparedStatement 都能对数据库进行,但两者又有所不同。

    PreparedStatement支持参数化查询,可避免SQL注入攻击。PreparedStatement可以将参数作为占位符传递到SQL查询中,然后通过setXXX()将参数值绑定到占位符上,这是PreparedStatement的参数化查询 / 动态查询。(先有占位符,后通过setXXX( )方法将参数与占位符替换,成功填入值)

    Statement不支持参数化查询,如果你需要动态添加数据 / 动态查询,必须使用拼接字符串的方式来创建SQL语句容易导致SQL注入攻击

    所以,一般不用Statement来完成动态查询功能,用PreparedStatement来完成动态查询功能

  • 性能 :
    一般来说 PreparedStatement的性能优于Statement
    因为PreparedStatement的sql语句在执行前已经编译过,而StatementSQL语句每次执行都需要编译,所以性能比较差。

  • 代码可读性 :
    由于PreparedStatement支持参数化参数,使的代码更加清晰易于维护,也使代码更加模块化易于理解。而StatementSQL语句中混杂着数据,代码可读性较差。

3.导入连接数据库Jar包

在JSP中连接数据库时除了要导入 mysql-connector-java.jar 包, 一般还要导入关于JSP的
jsp-api.jar包

4.JDBC操作

4.1 Statement操作

使用Statement“添加数据”
<%@ page import="java.sql.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>JSP中通过Statement"添加数据"</title>
</head>
<body>
<%
    //1.加载驱动
    Class.forName("com.mysql.jdbc.Driver");
    String url = "jdbc:mysql://localhost:3306/a3?useUnicode=true&characterEncoding=UTF-8";
    //2,获得连接数据库的Connection对象
    Connection conn = DriverManager.getConnection(url,"root", "root");
    //3.获得操作数据库的Statement对象
    Statement stat = conn.createStatement();
    //sql语句
    String sql = "insert into book(bno,bname,author,publishment) values('1','JavaWeb开发','zhangsan','北京出版社')";
    //4.执行该语句
    int i = stat.executeUpdate(sql);
    out.print("成功添加"+i+"行");
    //5.关闭资源
    stat.close();
    conn.close();
%>
</body>
</html>
使用Statement“删除数据”
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.Statement" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>JSP中通过Statement"删除数据"</title>
</head>
<body>
<%
    //1.通过反射加载驱动
    Class.forName("com.mysql.jdbc.Driver");
    //url
    String url = "jdbc:mysql://localhost:3306/a3?useUnicode=true&characterEncoding=UTF-8";
    //2.通过connection对象连接数据库
    Connection conn = DriverManager.getConnection(url, "root", "root");
    //3.通过Statement对象操作数据库
    Statement stat = conn.createStatement();
    String sql = "delete from book where bno ='1'";
    //4.调用方法操作数据库
    int i = stat.executeUpdate(sql);
    out.print("成功删除"+i+"行数据");
    //关闭资源
    stat.close();
    conn.close();
%>
</body>
</html>
使用Statement“修改数据”
<%@ page import="com.mysql.jdbc.Driver" %>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.Statement" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>JSP中通过Statement"修改数据"</title>
</head>
<body>
<%
    //1.通过反射加载驱动
    Class.forName("com.mysql.jdbc.Driver");
    //url
    String url = "jdbc:mysql://localhost:3306/a3?useUnicode=true&characterEncoding=UTF-8";
    //2.通过connection对象连接数据库
    Connection conn = DriverManager.getConnection(url, "root", "root");
    //3.通过Statement对象操作数据库
    Statement stat = conn.createStatement(); 
    String sql = "update book set bname = 'JavaJavaJava' where bno = '1'";
    //4.调用方法操作数据库
    int i = stat.executeUpdate(sql);
    out.print("成功修改"+i+"行数据");
    //关闭资源
    stat.close();
    conn.close();
%>
</body>
</html>
使用Statement“查询数据”
<%@ page import="com.mysql.jdbc.Driver" %>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.Statement" %>
<%@ page import="java.sql.ResultSet" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>JSP中通过Statement"查询数据"</title>
</head>
<body>
<%
    //1.通过反射加载驱动
    Class.forName("com.mysql.jdbc.Driver");
    //url
    String url = "jdbc:mysql://localhost:3306/a3?useUnicode=true&characterEncoding=UTF-8";
    //2.通过connection对象连接数据库
    Connection conn = DriverManager.getConnection(url, "root", "root");
    //3.通过Statement对象操作数据库
    Statement stat = conn.createStatement(); //Statement : 不能参数化查询
    String sql = "select * from book where bno = 1";
    //4.调用方法操作数据库
    ResultSet rs = stat.executeQuery(sql);
    while (rs.next()) {
        out.print(rs.getString(1));
        out.print(rs.getString(2));
        out.print(rs.getString(3));
        out.print(rs.getString(4));
    }
    //关闭资源
    stat.close();
    conn.close();
%>
</body>
</html>

4.2 PreparedStatement操作

使用PreparedStatement“添加数据”
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.ResultSet" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>add1.jsp</title>
</head>
<body>
<%
    //1.通过反射连接驱动
    Class.forName("com.mysql.jdbc.Driver");
    String url = "jdbc:mysql://localhost:3306/a3?useUnicode=true&characterEncoding=UTF-8";
    //2.获得连接数据库的Connection对象
    Connection conn = DriverManager.getConnection(url, "root", "root");
    //3.获得操作数据的PreparedStatement对象 (PreparedStatement对象可进行参数化设置)
    String sql = "insert into book values(?,?,?,?)";
    PreparedStatement ps = conn.prepareStatement(sql);
    //设置参数(补充占位符)
    ps.setString(1,"111");
    ps.setString(2,"诗词鉴赏");
    ps.setString(3,"俞平伯");
    ps.setString(4,"陕西师范大学出版社");
    int i = ps.executeUpdate();
    out.print("成功添加"+i+"行数据!");
%>
</body>
</html>
使用PreparedStatement“删除数据”
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.ResultSet" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>delete1.jsp</title>
</head>
<body>
<%
    //1.通过反射连接驱动
    Class.forName("com.mysql.jdbc.Driver");
    String url = "jdbc:mysql://localhost:3306/a3?useUnicode=true&characterEncoding=UTF-8";
    //2.获得连接数据库的Connection对象
    Connection conn = DriverManager.getConnection(url, "root", "root");
    //3.获得操作数据的PreparedStatement对象 (PreparedStatement对象可进行参数化设置)
    String sql = "delete from book where bno = ?";
    PreparedStatement ps = conn.prepareStatement(sql);
    //设置参数(补充占位符)
    ps.setString(1,"111");
    //4.执行sql操作
    int i = ps.executeUpdate();
    out.print("成功删除"+i+"行数据!");
%>
</body>
</html>
使用PreparedStatement“修改数据”
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.ResultSet" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>update1.jsp</title>
</head>
<body>
<%
    //1.通过反射连接驱动
    Class.forName("com.mysql.jdbc.Driver");
    String url = "jdbc:mysql://localhost:3306/a3?useUnicode=true&characterEncoding=UTF-8";
    //2.获得连接数据库的Connection对象
    Connection conn = DriverManager.getConnection(url, "root", "root");
    //3.获得操作数据的PreparedStatement对象 (PreparedStatement对象可进行参数化设置)
    String sql = "update book set bname = ? where bno = ?";
    PreparedStatement ps = conn.prepareStatement(sql);
    //设置参数(补充占位符)
    ps.setString(1,"JavaWeb");
    ps.setString(2,"112233");
    //4.执行sql语句
    int i = ps.executeUpdate();
    out.print("成功修改"+i+"行数据!");
%>
</body>
</html>
使用PreparedStatement“查询数据”
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.ResultSet" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>select1.jsp</title>
</head>
<body>
<%
    //1.通过反射连接驱动
    Class.forName("com.mysql.jdbc.Driver");
    String url = "jdbc:mysql://localhost:3306/a3?useUnicode=true&characterEncoding=UTF-8";
    //2.获得连接数据库的Connection对象
    Connection conn = DriverManager.getConnection(url, "root", "root");
    //3.获得操作数据的PreparedStatement对象 (PreparedStatement对象可进行参数化设置)
    String sql = "select * from book where bno = ?";
    PreparedStatement ps = conn.prepareStatement(sql);
    //设置参数(补充占位符)
    ps.setString(1,"0009999112");
    //4.获得结果集对象
    ResultSet rs = ps.executeQuery(); //返回值为结果集对象
    //5.解析结果集对象
    while (rs.next()) { //如果有数据
        String bno = rs.getString(1);
        String bname = rs.getString(2);
        String author = rs.getString(3);
        String publishment = rs.getString(4);
        out.print(bno+" "+bname+" "+author+" "+publishment);
    }
%>
</body>
</html>

http://www.kler.cn/news/150078.html

相关文章:

  • 学习计划计划执行记录
  • 【数据结构】——解决topk问题
  • 存储服务器特征是什么
  • 零基础学Python的第四天||字符串(1)
  • 力扣:184. 部门工资最高的员工(Python3)
  • python getattr() setattr() hasattr() delattr()内置函数详解
  • 智慧博物馆视频监控系统设计,可视化AI智能分析技术助力博物馆多维度监管
  • SparkContext初始化
  • 错误 LNK2001 无法解析的外部符号 __imp__CrtDbgReport
  • 短 URL 生成器设计:百亿短 URL 怎样做到无冲突?
  • 2023.11.28 MyBatis 中 #{} 和 ${} 的区别
  • 【ZEDSLAM】Ubuntu18.04系统ZED 2i双目相机SDK安装、联合标定、SLAM测试
  • 离散化笔记
  • 在与客户打交道过程中为什么客户不信任你?
  • 阿里云语雀频繁崩溃,有什么文档管理工具是比较稳定的?
  • 在虚拟机搭建nignx,和使用本地访问nginx的情况
  • viple模拟器使用(三):unity模拟器中实现沿右墙迷宫算法
  • C/C++ Zlib实现文件压缩与解压
  • 集合的使用
  • leetcode:随机链表的复制
  • 【Python】获取ip
  • NTT 的各类优化:Harvey、PtNTT,Intel AVX2、ARM Neon、GPGPU
  • oracle的sysaux使用量排查sql
  • 【ChatGLM3-6B】Docker下部署及微调
  • 6.golang函数
  • C语言变量和常量
  • Veras:Revit AI渲染插件
  • Mybatis 使用枚举作为查询条件
  • Linux:Ubuntu系统安装软件
  • 【Spring之事务底层源码解析,持续更新中~~~】