深入分析JavaWeb Item28 -- 使用JDBC对数据库进行CRUD_javaweb数据库表ite

49 阅读6分钟

web浏览器中的javascript

  • 客户端javascript
  • 在html里嵌入javascript
  • javascript程序的执行
  • 兼容性和互用性
  • 可访问性
  • 安全性
  • 客户端框架

window对象

  • 计时器

  • 浏览器定位和导航

  • 浏览历史

  • 浏览器和屏幕信息

  • 对话框

  • 错误处理

  • 作为window对象属性的文档元素

开源分享:docs.qq.com/doc/DSmRnRG…

1.1、CRUD操作-create

  使用executeUpdate(String sql)方法完成数据添加操作,示例操作:

 Statement st = conn.createStatement();
 String sql = "insert into user(….) values(…..) "; 
 int num = st.executeUpdate(sql);
 if(num>0){
     System.out.println("插入成功!!!");
}
1.2、CRUD操作-update

  使用executeUpdate(String sql)方法完成数据修改操作,示例操作:

 Statement st = conn.createStatement();
 String sql = “update user set name=‘’ where name=‘’"; 
 int num = st.executeUpdate(sql);
 if(num>0){
 System.out.println(“修改成功!!!");
 }
1.3、CRUD操作-delete

  使用executeUpdate(String sql)方法完成数据删除操作,示例操作:

 Statement st = conn.createStatement();
 String sql = “delete from user where id=1; 
 int num = st.executeUpdate(sql);
 if(num>0){
     System.out.println(“删除成功!!!");
 }
1.4、CRUD操作-select

  使用executeQuery(String sql)方法完成数据查询操作,示例操作:

 Statement st = conn.createStatement();
 String sql = “select \* from user where id=1; 
 ResultSet rs = st.executeUpdate(sql);
 while(rs.next()){
     //根据获取列的数据类型,分别调用rs的相应方法映射到java对象中
 }

二、使用jdbc对数据库增删改查

2.1、搭建实验环境

  1、在mysql中创建一个库,并创建user表和插入表的数据。

  SQL脚本如下:

create database jdbcStudy;

use jdbcStudy;

create table users(
 id int primary key,
 name varchar(40),
 password varchar(40),
 email varchar(60),
 birthday date
);

  2、新建一个JavaWeb工程,并导入MySQL数据库驱动。

  这里写图片描述

  3、在src目录下创建一个db.properties文件,如下图所示:

  这里写图片描述

  在db.properties中编写MySQL数据库的连接信息,代码如下所示:

 driver=com.mysql.jdbc.Driver
 url=jdbc:mysql://localhost:3306/jdbcStudy
 username=root
 password=XDP

  4、编写一个JdbcUtils工具类,用于连接数据库,获取数据库连接和释放数据库连接,代码如下:

package me.gacl.utils;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JdbcUtils {

    private static String driver = null;
    private static String url = null;
    private static String username = null;
    private static String password = null;

    static{
        try{
            //读取db.properties文件中的数据库连接信息
            InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
            Properties prop = new Properties();
            prop.load(in);

            //获取数据库连接驱动
            driver = prop.getProperty("driver");
            //获取数据库连接URL地址
            url = prop.getProperty("url");
            //获取数据库连接用户名
            username = prop.getProperty("username");
            //获取数据库连接密码
            password = prop.getProperty("password");

            //加载数据库驱动
            Class.forName(driver);

        }catch (Exception e) {
            throw new ExceptionInInitializerError(e);
        }
    }

    /\*\*
 \* @Method: getConnection
 \* @Description: 获取数据库连接对象
 \* @Anthor:孤傲苍狼
 \*
 \* @return Connection数据库连接对象
 \* @throws SQLException
 \*/ 
    public static Connection getConnection() throws SQLException{
        return DriverManager.getConnection(url, username,password);
    }

    /\*\*
 \* @Method: release
 \* @Description: 释放资源,
 \* 要释放的资源包括Connection数据库连接对象,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象
 \* @Anthor:孤傲苍狼
 \*
 \* @param conn
 \* @param st
 \* @param rs
 \*/ 
    public static void release(Connection conn,Statement st,ResultSet rs){
        if(rs!=null){
            try{
                //关闭存储查询结果的ResultSet对象
                rs.close();
            }catch (Exception e) {
                e.printStackTrace();
            }
            rs = null;
        }
        if(st!=null){
            try{
                //关闭负责执行SQL命令的Statement对象
                st.close();
            }catch (Exception e) {
                e.printStackTrace();
            }
        }

        if(conn!=null){
            try{
                //关闭Connection数据库连接对象
                conn.close();
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
2.2、使用statement对象完成对数据库的CRUD操作

  测试代码如下:

package me.gacl.demo;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import me.gacl.utils.JdbcUtils;

import org.junit.Test;

/\*\*
\* @ClassName: JdbcCRUDByStatement
\* @Description: 通过Statement对象完成对数据库的CRUD操作
\* @author: 孤傲苍狼
\* @date: 2014-9-15 下午11:22:12
\*
\*/ 
public class JdbcCRUDByStatement {

    @Test
    public void insert(){
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        try{
            //获取一个数据库连接
            conn = JdbcUtils.getConnection();
            //通过conn对象获取负责执行SQL命令的Statement对象
            st = conn.createStatement();
            //要执行的SQL命令
            String sql = "insert into users(id,name,password,email,birthday) values(3,'白虎神皇','123','bhsh@sina.com','1980-09-09')";
            //执行插入操作,executeUpdate方法返回成功的条数
            int num = st.executeUpdate(sql);
            if(num>0){
                System.out.println("插入成功!!");
            }

        }catch (Exception e) {
            e.printStackTrace();
        }finally{
            //SQL执行完成之后释放相关资源
            JdbcUtils.release(conn, st, rs);
        }
    }

    @Test
    public void delete(){
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        try{
            conn = JdbcUtils.getConnection();
            String sql = "delete from users where id=3";
            st = conn.createStatement();
            int num = st.executeUpdate(sql);
            if(num>0){
                System.out.println("删除成功!!");
            }
        }catch (Exception e) {
            e.printStackTrace();

        }finally{
            JdbcUtils.release(conn, st, rs);
        }
    }

    @Test
    public void update(){
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        try{
            conn = JdbcUtils.getConnection();
            String sql = "update users set name='孤傲苍狼',email='gacl@sina.com' where id=3";
            st = conn.createStatement();
            int num = st.executeUpdate(sql);
            if(num>0){
                System.out.println("更新成功!!");
            }
        }catch (Exception e) {
            e.printStackTrace();

        }finally{
            JdbcUtils.release(conn, st, rs);
        }
    }

    @Test
    public void find(){
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        try{
            conn = JdbcUtils.getConnection();
            String sql = "select \* from users where id=3";
            st = conn.createStatement();
            rs = st.executeQuery(sql);
            if(rs.next()){
                System.out.println(rs.getString("name"));
            }
        }catch (Exception e) {
            e.printStackTrace();
        }finally{
            JdbcUtils.release(conn, st, rs);
        }
    }
}

三、PreparedStatement对象介绍

  PreperedStatement是Statement的子类,它的实例对象可以通过调用Connection.preparedStatement()方法获得,相对于Statement对象而言:PreperedStatement可以避免SQL注入的问题。

Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。PreparedStatement可对SQL进行预编译,从而提高数据库的执行效率。并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。

3.1、使用PreparedStatement对象完成对数据库的CRUD操作

  测试代码如下:

package me.gacl.demo;

## Vue 面试题

1.Vue 双向绑定原理
2.描述下 vue 从初始化页面–修改数据–刷新页面 UI 的过程?
3.你是如何理解 Vue 的响应式系统的?
4.虚拟 DOM 实现原理
5.既然 Vue 通过数据劫持可以精准探测数据变化,为什么还需要虚拟 DOM 进行 diff 检测差异?
6.Vue 中 key 值的作用?
7.Vue 的生命周期
8.Vue 组件间通信有哪些方式?
9.watch、methods 和 computed 的区别?
10.vue 中怎么重置 data?
11.组件中写 name 选项有什么作用?
12.vue-router 有哪些钩子函数?
13.route 和 router 的区别是什么?
14.说一下 Vue 和 React 的认识,做一个简单的对比
15.Vue 的 nextTick 的原理是什么?
16.Vuex 有哪几种属性?
17.vue 首屏加载优化
18.Vue 3.0 有没有过了解?
19.vue-cli 替我们做了哪些工作?
…
![](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/caae9dad26e74ea990c4187d5cbac571~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1773144568&x-signature=d30EWe5X1YxAuKfj%2BfnSQYoJLT4%3D)

## 算法

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://docs.qq.com/doc/DSmRnRGxvUkxTREhO)**

1. 冒泡排序
2. 选择排序
3. 快速排序
4. 二叉树查找: 最大值、最小值、固定值
5. 二叉树遍历
6. 二叉树的最大深度
7. 给予链表中的任一节点,把它删除掉
8. 链表倒叙
9. 如何判断一个单链表有环
10. 给定一个有序数组,找出两个数相加为一个目标数
    ...
    ![](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/89e0e44117d54490836c2710ee39273f~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1773144568&x-signature=hUSLudWATgsBfECZS%2FQ%2FbLH1Eu8%3D)

>由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!有需要的程序猿(媛)可以帮忙点赞+评论666