自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(319)
  • 问答 (1)
  • 收藏
  • 关注

原创 P55 dbutils类关闭资源的操作

dbutils类关闭资源的操作//关闭资源的操作:使用dbutils.jar中提供的DbUtils工具类,实现资源关闭public static void closeResource1(Connection conn, PreparedStatement ps, ResultSet rs){ DbUtils.closeQuietly(rs); DbUtils.closeQuietly(conn); DbUtils.closeQuietly(ps);}...

2021-12-18 14:59:34 488

原创 P53 QueryRunner的使用

QueryRunner实现添加数据的操作@Testpublic void testInsert() { Connection conn = null; try { QueryRunner runner = new QueryRunner(); conn = JDBCUtils1.getConnection2(); String sql="insert into customers(name,email,birth)values(?,?,?

2021-12-18 14:44:06 446

原创 P50 Druid数据库连接池的实现

Druid数据库连接池的实现@Test public void getConnection() throws Exception { Properties pros = new Properties(); InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("Druid.properties"); pros.load(is); DataS

2021-12-18 12:30:15 195

原创 P49 DBCP数据库连接池的两种实现方式

DBCP数据库连接池的两种实现方式//测试DBCP的数据库连接池技术public class DBCPTest { //方式一:不推荐 @Test public void testGetConnection() throws SQLException { //创建了DBCP的数据库连接池 BasicDataSource source=new BasicDataSource(); //设置基本信息 source.s

2021-12-18 11:14:17 665

原创 P47 C3P0数据库连接池的两种实现方式

C3P0数据库连接池的两种实现方式方式一//方式一:doc文件夹中index.html 中的quick star@Testpublic void testGetConnection() throws Exception { //获取C3P0数据库连接池 ComboPooledDataSource cpds = new ComboPooledDataSource(); cpds.setDriverClass( "com.mysql.cj.jdbc.Driver" ); //lo

2021-12-17 19:45:03 845

原创 P44CustomerDAO及CustomerDAOImpl的实现与测试

CustomerDAO及CustomerDAOImpl的实现/*此接口用于规范针对于customers表的常用操作 */public interface CustomerDAO { //将cust对象添加到数据库中 void insert(Connection conn, Customer cust); //根据指定的ID删除表中的一条记录 void deleteById(Connection conn,int id); //针对内存中的cust对象,去修

2021-12-17 16:41:43 283

原创 P42 提供操作数据表的BaseDAO

提供操作数据表的BaseDAO/*封装了针对于数据表的通用操作 */public abstract class BaseDAO { //通用的增删改操作的方法--- version 2.0(考虑数据库事务) public void update(Connection conn, String sql, Object ...args) {//占位符的个数与可变形参的长度一致 PreparedStatement ps = null; try {

2021-12-17 12:06:49 120

原创 P37 数据库事务原则及代码实现

考虑数据库事务的转账操作/*1.什么叫数据库事务?事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态。 >一组逻辑操作单元:一个或多个DML操作2.事务处理的原则:保证所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式。当在一个事务中执行多个操作时,要么所有的事务都**被提交(commit)**,那么这些修改就永久地保存下来;要么数据库管理系统将放弃所作的所有修改,整个事务**回滚(rollback)**到最初状态。3.数据一旦提交,就不可

2021-12-16 20:38:10 344

原创 P32 批量插入数据

批量插入数据//批量插入的方式二:使用preparedstatement@Testpublic void testInsert1() { Connection conn = null; PreparedStatement ps = null; try { conn = JDBCUtil.getConnection(); String sql="insert into goods(name) values(?)"; ps = co

2021-12-16 19:23:06 55

原创 P29 向表中插入Blob数据和读取表中的Blob类型数据

查询数据表customers中Blob类型的字段//查询数据表customers中Blob类型的字段@Testpublic void testQuery() { Connection conn = null; PreparedStatement ps = null; InputStream is= null; FileOutputStream fos= null; ResultSet rs = null; try { conn = JD

2021-12-16 17:02:35 64

原创 P28 PreparedStatement练习题

练习1 插入数据public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("输入用户名:"); String name = scanner.next(); System.out.println("输入邮箱:"); String email = scanner.next(); System.out.println("

2021-12-15 20:37:35 362

原创 P23 PreparedStatement实现针对于不同表的通用的查询操作

使用PreparedStatement实现针对于不同表的通用的查询操作@Testpublic void testGetForList(){ String sql="select id,name,email from customers where id<?"; List<Customer> list = getForList(Customer.class, sql, 12); list.forEach(System.out::println); Str

2021-12-15 17:20:46 71

原创 P17 PreparedStatement针对表的查询操作

针对于Customers表的查询操作@Testpublic void testQuery1() { Connection conn = null; PreparedStatement ps = null; ResultSet resultSet = null; try { conn = JDBCUtil.getConnection(); String sql="select id,name,email,birth from custom

2021-12-15 16:11:25 657

原创 P13 preparedstatement实现表数据的增删改操作

preparedstatement实现表数据的添加操作/*使用preparedstatement来替换statement,实现对数据表的增删改查操作增删改:查 */public class PreparedStatementUpdate { //向customers表中添加一条记录 @Test public void testInsert() { Connection conn = null; PreparedStatement ps =

2021-12-14 20:53:18 434

原创 P93 查看删除触发器与课后练习

3.查看触发器#2.查看触发器#方式1:查看当前数据库的所有触发器的定义SHOW TRIGGERS;#方式2:查看当前数据库中某个触发器的定义SHOW CREATE TRIGGER salary_check_trigger;#方式3:从系统库information_schema的TRIGGERS表中查询“salary_check_trigger”触发器的信息。SELECT * FROM information_schema.TRIGGERS;4.触发器的删除#3.删除触发器

2021-12-12 14:54:30 637

原创 P92创建触发器

1.触发器的概述2.触发器的创建举例1#举例1:#①创建数据表CREATE TABLE test_trigger (id INT PRIMARY KEY AUTO_INCREMENT,t_note VARCHAR(30));CREATE TABLE test_trigger_log (id INT PRIMARY KEY AUTO_INCREMENT,t_log VARCHAR(30));#②查看表数据SELECT * FROM test_trigger;SELECT

2021-12-12 12:38:54 332

原创 第16章_变量、流程控制与游标练习题

第16_章练习题练习1.测试变量的使用#练习1:测试变量的使用#0.准备工作CREATE DATABASE test16_var_cur;USE test16_var_cur;CREATE TABLE employeesASSELECT * FROM atguigudb.`employees`;CREATE TABLE departmentsASSELECT * FROM atguigudb.`departments`;SET GLOBAL log_bin_trust

2021-12-12 11:34:23 429

原创 P90 游标的使用

5.游标的使用#6.游标的使用/*游标使用的步骤:①声明游标②打开游标③使用游标(从游标中获取数据)④关闭游标*/#举例:创建存储过程“get_count_by_limit_total_salary()”,声明IN参数 limit_total_salary,#DOUBLE类型;声明OUT参数total_count,INT类型。函数的功能可以实现累加薪资最高的几个员工的薪资值,#直到薪资总和达到limit_total_salary参数的值,返回累加的人数给total_count。

2021-12-11 15:59:11 486

原创 P89 跳转语句leave和iterate的使用

4.6跳转语句之leave#5.1 leave的使用/*举例1:创建存储过程 “leave_begin()”,声明INT类型的IN参数num。给BEGIN...END加标记名,并在BEGIN...END中使用IF语句判断num参数的值。如果num<=0,则使用LEAVE语句退出BEGIN...END;如果num=1,则查询“employees”表的平均薪资;如果num=2,则查询“employees”表的最低薪资;如果num>2,则查询“employees”表的最高薪资。IF

2021-12-11 15:13:59 288

原创 P88 循环结构loop、while、repeat

4.3循环结构之loop#4.1 循环结构之loop/*[loop_label:] LOOP 循环执行的语句END LOOP [loop_label]*/#举例1:DELIMITER //CREATE PROCEDURE test_loop()BEGIN #声明局部变量 DECLARE num INT DEFAULT 1; loop_label:LOOP #重新赋值 SET num=num+1; IF num >=10 THEN LEAVE loop_

2021-12-11 12:20:49 206

原创 P87 分支结构case的使用

4.2分支结构之case#3.2 分支结构之CASE#举例DELIMITER //CREATE PROCEDURE test_case()BEGIN #演示1:case...when...then... /* declare var int default 2; case var when 1 then select 'var=1'; when 2 then select 'var=2'; when 3 then select 'var=3'; else selec

2021-12-11 10:55:05 269

原创 P86 分支结构if的使用

4.1分支结构之 if#3.1分支结构之 if#举例1DELIMITER//CREATE PROCEDURE test_if()BEGIN #声明局部变量 DECLARE stu_name VARCHAR(15); IF stu_name IS NULL THEN SELECT'stu_name is null'; END IF;END//DELIMITER;#调用CALL test_if();#举例2:DELIMITER//CREATE PROCED

2021-12-10 18:03:17 150

原创 P85程序出错的处理机制

3.定义条件和处理程序3.1错误演示#2.1错误演示:#错误代码: 1364#Field 'email' doesn't have a default valueINSERT INTO employees(last_name)VALUES('Tom');DESC employees;#错误演示:DELIMITER //CREATE PROCEDURE UpdateDataNoCondition()BEGIN SET @x = 1; UPDATE employees SET

2021-12-10 16:11:30 180

原创 P84 会话用户变量与局部变量的

2.用户变量/*①用户变量: 会话用户变量 vs 局部变量②会话用户变量:使用"@"开头,作用域为当前会话③局部变量:只能使用在存储过程和存储函数中的*/2.1会话用户变量#1.6会话用户变量/*①变量的声明和赋值#方式1:“=”或“:=”SET @用户变量 = 值;SET @用户变量 := 值;#方式2:“:=” 或 INTO关键字SELECT @用户变量 := 表达式 [FROM 等子句];SELECT 表达式 INTO @用户变量 [FROM 等子句];②使

2021-12-10 12:14:07 125

原创 P83 global与session变量的使用

1.变量1.1查看系统变量#1.2.查看系统变量#查询全局系统变量SHOW GLOBAL VARIABLES; #617个#查询会话系统变量SHOW SESSION VARIABLES; #640个SHOW VARIABLES;#默认查询的是会话系统变量,640个#查询部分系统变量SHOW GLOBAL VARIABLES LIKE'admin_%';SHOW VARIABLES LIKE'character_%';#1.3查看指定系统变量SELECT @@glob

2021-12-10 10:58:09 239

原创 P82 存储过程与函数的练习题

存储过程练习#存储过程练习#0.准备工作CREATE DATABASE test15_pro_func;#1. 创建存储过程insert_user(),实现传入用户名和密码,插入到admin表中CREATE TABLE admin(id INT PRIMARY KEY AUTO_INCREMENT,user_name VARCHAR(15) NOT NULL,pwd VARCHAR(25) NOT NULL);DELIMITER //CREATE PROCEDURE ins

2021-12-09 21:02:32 594

原创 P81存储过程与函数的查看、修改、删除

4.存储过程、存储函数的查看#方式1.使用show create语句查看存储过程和函数的创建信息SHOW CREATE PROCEDURE show_mgr_name;SHOW CREATE FUNCTION count_by_id;#方式2.使用SHOW STATUS语句查看存储过程和函数的状态信息SHOW PROCEDURE STATUS;SHOW PROCEDURE STATUS LIKE'show_max_salary';SHOW FUNCTION STATUS LIKE'

2021-12-09 19:29:20 64

原创 P80 存储函数的创建与调用

2.存储函数的创建与调用#举例1:创建存储函数,名称为email_by_name(),参数定义为空,#该函数查询Abel的email,并返回,数据类型为字符串型。DELIMITER //CREATE FUNCTION email_by_name()RETURNS VARCHAR(25) DETERMINISTIC CONTAINS SQL READS SQL DATABEGIN RETURN (SELECT email FR

2021-12-09 17:26:29 626

原创 P79 存储过程的创建与调用

1.存储过程的创建与调用#0.准备工作CREATE DATABASE dbtest15;USE dbtest15;CREATE TABLE employeesASSELECT * FROM atguigudb.`employees`;CREATE TABLE departmentsASSELECT * FROM atguigudb.`departments`;1.1无参数,无返回值#1.创建存储过程#类型1:无参数,无返回值#举例1:创建存储过程select_all_d

2021-12-09 16:42:34 288

原创 P77 第14章视图课后练习

第14章练习题练习一USE dbtest14;#1. 使用表employees创建视图employee_vu,其中包括姓名(LAST_NAME),#员工号(EMPLOYEE_ID),部门号(DEPARTMENT_ID)CREATE OR REPLACE VIEW employee_vu(lname,emp_id,dept_id)ASSELECT last_name,employee_id,department_idFROM emps;#2. 显示视图的结构DESC employee_

2021-12-08 20:12:18 677

原创 P76 更新视图数据与视图的删除

4.更新视图中的数据#4.1 一般情况,可以更新视图的数据SELECT * FROM vu_emp1;SELECT employee_id,last_name,salaryFROM emps;#更新视图的数据,也会修改表中的数据UPDATE vu_emp1SET salary=20000WHERE employee_id=101;#更新表的数据,会导致视图的数据的更改UPDATE empsSET salary=10000WHERE employee_id=101;#删除视图

2021-12-08 19:47:25 400

原创 P75 视图的创建与查看

2.如何创建视图create database dbtest14;use dbtest14;create table empsasselect *from atguigudb.`employees`;create table deptsasselect *from atguigudb.`departments`;select * from emps;select * from depts;desc emps;desc atguigudb.employees;2.1

2021-12-08 17:38:00 106

原创 P74 数据库对象与视图的理解

1.视图的理解/*1.视图的理解① 视图,可以看做是一个虚拟表,本身是不存储数据的 视图的本质,就可以看做是存储起来的select语句 ②视图中select语句中涉及到的表,称为基表③针对视图做DML操作,会影响到对应的基表中的数据,反之亦然④视图本身的删除,不会导致基表中数据的删除⑤视图的应用场景:针对于小型项目,不推荐使用视图 针对于大型项目,可以考虑使用视图 ⑥视图的优点:简化查询;控制数据的访问..

2021-12-08 16:50:38 90

原创 P73 第13章_约束练习题

第13章_约束练习题练习一#练习1 已经存在数据库test04_emp,两张表emp2和dept2CREATE DATABASE test04_emp;USE test04_emp;CREATE TABLE emp2(id INT,emp_name VARCHAR(15));CREATE TABLE dept2(id INT,dept_name VARCHAR(15));#1.向表emp2的id列中添加PRIMARY KEY约束ALTER TABLE emp2ADD

2021-12-08 15:49:56 763

原创 P72 检查约束与默认值约束

7.检查约束#8. check约束create table test10(id int,last_name varchar(15),salary decimal(10,2) check(salary>2000));insert into test10values(1,'Tom',2500);#添加失败 工资低于2000,Check constraint 'test10_chk_1' is violated.INSERT INTO test10VALUES(1,'Tom',1

2021-12-08 14:53:43 203

原创 P71 外键约束的使用

6.外键约束6.1在create table时添加#7.1 在create table时添加#主表和从表:父表和子表#①先创建主表CREATE TABLE dept1(dept_id INT,dept_name VARCHAR(15));#②再创建从表CREATE TABLE emp1(emp_id INT PRIMARY KEY AUTO_INCREMENT,emp_name VARCHAR(15),department_id INT,#表级约束CONSTRA

2021-12-08 11:09:04 201

原创 P70 AUTO_INCREMENT

5.AUTO_INCREMENT5.1在create table时# 6.1在create table时CREATE TABLE test7(id INT PRIMARY KEY AUTO_INCREMENT,#id自增,自动赋值last_name VARCHAR(15));#开发中,一旦主键作用的字段上声明有AUTO_INCREMENT,则我们在添加数据时#就不要给主键对应的字段去赋值INSERT INTO test7(last_name)VALUES('Tom');SELEC

2021-12-07 20:18:14 48

原创 P69 主键约束

4.主键约束1.在create table时添加约束#5.1 在create table时添加约束#一个表中最多只能有一个主键约束#错误:Multiple primary key definedCREATE TABLE test3(id INT PRIMARY KEY, #列级约束last_name VARCHAR(15) PRIMARY KEY,salary DECIMAL(10,2),email VARCHAR(25));#主键约束特征:非空且唯一,用于唯一的标识表中的一条

2021-12-07 19:27:49 105

原创 P68 唯一性约束

3.唯一性约束作用:1.在create table时添加约束#4.1 在create table时添加约束CREATE TABLE test2(id INT UNIQUE, #列级约束last_name VARCHAR(15),email VARCHAR(25),salary DECIMAL(10,2),#表级约束 起名CONSTRAINT uk_test2_email UNIQUE(email));DESC test2;SELECT * FROM information

2021-12-07 17:33:10 220

原创 P67 非空约束的使用

2.非空约束#2. 如何查看表中的约束SELECT * FROM information_schema.table_constraintsWHERE table_name = 'test1';CREATE DATABASE dbtest13;USE dbtest13;#3.not null 非空约束#3.1 在create table时添加约束CREATE TABLE test1(id INT NOT NULL,last_name VARCHAR(15) NOT NULL,emai

2021-12-07 16:36:18 45

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除