MySQL从入门到入魔之数据库连接池(02)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL从入门到入魔之数据库连接池(02)

Statement和PreparedStatement


如果执行的SQL语句中存在变量,为了避免SQL注入所以使用PreparedStatement

如果SQL语句中没有变量则使用Statement

批量操作


批量操作就是将多条SQL语句执行时的多次网络数据传输合并成一次传输,从而提高执行效率

代码参考Demo06.java

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Statement;
/**
 * 批量操作
 * @author 海拥😋
 * @date 2020年5月7日 下午3:27:24
 */
public class Demo06 {
  public static void main(String[] args) {
    //获取连接
    try (Connection conn = DBUtils.getConn();) {
      String sql1="insert into user values(null,'刘备','123')";
      String sql2="insert into user values(null,'关羽','123')";
      String sql3="insert into user values(null,'张飞','123')";
      Statement s = conn.createStatement();
//      s.executeUpdate(sql1);
//      s.executeUpdate(sql2);
//      s.executeUpdate(sql3);
      //通过批量操作将多次数据传输合并成一次
//      s.addBatch(sql1);
//      s.addBatch(sql2);
//      s.addBatch(sql3);
//      //执行批量操作
//      s.executeBatch();
//      System.out.println("执行完成");
      //preparedStatement批量操作
      String sql = "insert into user values(null,?,?)";
      PreparedStatement ps = conn.prepareStatement(sql);
      for (int i = 0;i<100;i++) {
        ps.setString(1, "name"+i);
        ps.setString(2, "pw"+i);
        //添加到批量操作
        ps.addBatch();
        //每隔20次执行一次 避免内存溢出
        if(i%20==0) {
          ps.executeBatch();
        } 
      }
      //执行批量操作
      ps.executeBatch();
      System.out.println("执行完成");
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}


分页查询


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;
/** 
 * 分页查询
 * @author 海拥😋
 * @date 2020年5月7日 下午4:22:49
 */
public class Demo07 {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入查询的页数");
    int page = sc.nextInt() ;
    System.out.println("请输入查询的条数");
    int count = sc.nextInt();
    if(page<1) {
      System.out.println("输入错误");
    }
    //获取连接
    try (Connection conn = DBUtils.getConn();) {
      String sql ="select username,password from user limit ?,?";
      PreparedStatement ps =conn.prepareStatement(sql);
      //第一个?代表跳过的条数=(请求页数-1)*条数
      ps.setInt(1, (page-1)*count);
      //第二个?代表请求条数(每页条数)
      ps.setInt(2,count);
      //执行查询
      ResultSet rs = ps.executeQuery();
      while(rs .next()) {
      String username = rs.getString(1);
      String password = rs.getString(2);
      System.out.println( username+":"+password) ;
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}


获取自增主键值

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
/**
 * 获取自增主键值
 * @author 海拥😋
 * @date 2020年5月7日 下午4:40:33
 */
public class Demo08 {
  public static void main(String[] args) {
    //获取连接
    try (Connection conn = DBUtils.getConn();) {
      String sql =
          "insert into user values(null,'james','123456')";
      Statement s = conn.createStatement();
      //编译SQL语句时,需要设置返回自增主键值
      s.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
      //通过结果集 获取自增的主键值
      ResultSet rs  = s.getGeneratedKeys();
      if(rs.next()) {
        int id =rs.getInt(1);
        System.out.println("id="+id);
      }
      System.out.println("插入完成");
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}


创建球队表

create table team(id int primary key auto_increment,name varchar(10))charset=utf8;

创建球员表

create table player(id int primary key auto_increment,name varchar(10),teamId int)charset=utf8;

球队球员小练习

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;
/**
 * @author 海拥😋
 * @date 2020年5月7日 下午5:17:59
 */
public class Demo09 {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入球队名字");
    String teamName = sc.nextLine();
    System.out.println("请输入球员名字");
    String playerName = sc.nextLine();
    // 获取连接
    try (Connection conn = DBUtils.getConn();) {
      String sql = "insert into team values(null,?)";
      PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
      // 替换?
      ps.setString(1, teamName);
      // 执行
      ps.executeUpdate();
      // 获取自增主键值
      ResultSet rs = ps.getGeneratedKeys();
      if (rs.next()) {
        int teamId = rs.getInt(1);
        System.out.println("球队id:"+teamId);
        String psql = "insert into player values(null,?,?)";
        PreparedStatement pps = conn.prepareStatement(psql);
        pps.setString(1, playerName);
        pps.setInt(2, teamId);
        pps.executeUpdate();
        System.out.println("保存完成!");
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}


代码介绍

Demo05 登录功能 接触了预编译的Sql执行对象 讲解了SQL注入(给用户写值的位置,用户写进去了SQL语句 导致原有逻辑发生改变)

Demo06 批量操作

Demo07 分页查询

Demo08 获取自增主键值

Demo09 球队球员小练习

Java、Python、算法知识体系 | PPT、简历模板 | 游戏源码 | IT行业趣味资讯 | 装机必备软件



相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
19 0
|
1天前
|
前端开发 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
15 0
|
1天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(下)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
9 0
|
1天前
|
SQL 关系型数据库 Serverless
阿里云关系型数据库RDS
阿里云关系型数据库RDS
15 2
|
1天前
|
关系型数据库 MySQL 数据库
mysql 设置环境变量与未设置环境变量连接数据库的区别
设置与未设置MySQL环境变量在连接数据库时主要区别在于命令输入方式和系统便捷性。设置环境变量后,可直接使用`mysql -u 用户名 -p`命令连接,而无需指定完整路径,提升便利性和灵活性。未设置时,需输入完整路径如`C:\Program Files\MySQL\...`,操作繁琐且易错。为提高效率和减少错误,推荐安装后设置环境变量。[查看视频讲解](https://www.bilibili.com/video/BV1vH4y137HC/)。
22 3
mysql 设置环境变量与未设置环境变量连接数据库的区别
|
1天前
|
SQL Java 关系型数据库
零基础轻松入门Java数据库连接(JDBC)
零基础轻松入门Java数据库连接(JDBC)
12 0
|
1天前
|
关系型数据库 MySQL 数据库连接
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
18 0
|
1天前
|
存储 Oracle 关系型数据库
oracle 数据库 迁移 mysql数据库
将 Oracle 数据库迁移到 MySQL 是一项复杂的任务,因为这两种数据库管理系统具有不同的架构、语法和功能。
23 0
|
1天前
|
关系型数据库 MySQL Linux
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
|
1天前
|
SQL 关系型数据库 MySQL
【MySQL-5】DDL的数据库操作:查询&创建&删除&使用(可cv代码+演示图)
【MySQL-5】DDL的数据库操作:查询&创建&删除&使用(可cv代码+演示图)