数据库。。
day01
1. 数据库:DateBase简称DB
2. MySQL启动:①cmdàservices.msc打开服务窗口
②使用管理员打开cmd:net stop mysql 启动 net start mysql 关闭
③手动 资源管理器-管理-服务
登录:①mysql –uroot –p密码
②mysql –hip –uroot –p连接目标的密码
退出:exit/quit
目录结构:数据库(文件夹)、表(文件)、数据(数据)
3. SQL(结构化查询语言):定义了操作所有关系型数据库的规则;每种数据库操作存在差异,称为“方言”
4. SQL的通用语法:
① SQL语句可单行或多行书写,以分号结尾
② MySQL数据库中的SQL语句不区分大小写,关键字建议使用大写
③ 3种注释:单行注释:-- 注释内容(#注释内容:MySQL特有);* 多行注释:/* 注释 */
5. SQL分类:DDL操作数据库、表;DML增删改表中的数据;DQL查询表中的数据;DCL(了解)
6. DDL:CRUD操作数据库
C(Create):创建 ①create database 数据库名称;
②create datebase if not exists 数据库名称;
③create database 数据库名称 character set 字符集名;
④create database if not exists 数据库名称 character set 字符集名;
R(Retrieve):查询 ①show databases;
②查询某个数据库的创建语句:show create database 数据库名称;
U(Update):修改 修改数据库字符集:alter database 数据库名称 character set 字符集名;
D(Delete):删除 ①drop database 数据库名称;②drop database if exists 数据库名称;
使用数据库:①查询正在使用的数据库名称:select database();②使用数据库:use 数据库名称;
7. DDL:CRUD操作表
C(Create):创建 ①create table 表名(
列名1 数据类型1,
列名2 数据类型2,
…
列名n 数据类型n
);
数据库类型:
1) int(整数类型):age int;
2) double(小数类型):score double(5,2)
3) data(日期): yyyy-MM-dd
4) datatime(日期):yyyy-MM-dd HH:mm:ss
5) timestamp(时间错类型):yyyy-MM-dd HH:mm:ss 默认使用系统当前时间
6) varchar(字符串):name varchar(20); 姓名最大二十个字符
②复制表:create table 表名 like 被复制的表名;
R(Retrieve):查询 ①show tables;②查询表结构:desc 表名;
U(Update):修改 ①表名:alter table 表名 rename to 新表名;
②修改字符集:alter table 表名 character set 字符集;
③添加列:alter table 表名 add 列名 数据类型;
④修改列名、类型:alter table 表名 change 列名 新列名 新数据类型;
alter table 表名 modify 列名 新数据类型;
⑤删除列:alter table 表名 drop 列名;
D(Delete):删除 ①drop table 表名;②drop table if exists 表名;
8. DML(增删改):
1) 添加数据:insert into 表名(列名1,列名2…列名n) values (值1,值2…值n)
l 若不写列名,则为所有列添加值
2) 删除数据:delete from 表名 【where 条件】;
l 不加条件删除所有记录,有多少条记录删除多少次(不推荐)
l TRUNCATE TABLE 表名; 先删除表,在创建一张一样的空表
3) 修改数据:update 表名 set 列名1=值1,列名2=值2……where 条件;
l 不加条件修改全部记录
day02
1. DQL(查询):
1) 基础查询:select 列名1… from 表名; select * from 表名;
a) 去除重复:distinct
b) 计算列:列名相加(ifnull(表达式1,表达式2):null参与运算,计算结果都为null)
c) 起别名:as(可省略)
2) 条件查询:
where子句后跟条件
运算符
* > 、< 、<= 、>= 、= 、<>、!=
* BETWEEN...AND
* IN( 集合)
* LIKE:模糊查询:select * from 表名 where name like “_&”
* 占位符:
* _:单个任意字符
* %:多个任意字符
* IS NULL
* and 或 &&
* or 或 ||
* not 或 !
3) 排序查询:order by 排序字段1,排序方式1……
l asc(默认),升序;desc,降序
l 多个条件时,仅前面条件一样,走后面条件
4) 聚合函数:列纵向计算(排除null值)
①count:计算个数 select count(列名) from 表名; <一般选择非空列:主键>
②max:计算最大值 select max(列名) from 表名;
③min:计算最小值 select min(列名) from 表名;
④sum:计算和 select sum(列名) from 表名;
⑤avg:计算平均值 select avg(列名) from 表名;
5) 分组查询:
①group by 列名; select 列名,avg(math) from student group by 列名;
select 列名,avg(math) from student where 条件 group by 列名;
select 列名,avg(math) from student group by 列名 having 条件;
where在分组前限定条件,having在分组后
where后不可跟聚合函数,having可以
6) 分页查询:(limit是一个方言)
limit 开始的索引<(当前页码-1)*每页显示条数>;
select * from student limit 0,3;
select * from student limit 3,3;
select * from student limit 6,3;
2. 约束:对表中的数据进行限定
1) 非空约束:not null
① 创建表时添加约束 id int not null;
② 创建表后添加约束 alter table 表名 modify name varcher[20] not null;
③ 删除约束:alter table 表名 modify name varcher[20];
2) 唯一约束:unique
① 创建时:name varchar[20] unique;
② 创建后:alter table 表名 modify name varchar[20] unique;
③ 删除:alter table 表名 drop index 列名;
3) 主键约束:primary key(非空且唯一,每个表只有一个字段为主键)
① create table 表名(
id int primary key,
age int
);
② 创建表后添加主键:alter table 表名 modify id int primary key;
③ 删除主键:alter table stu drop primary key;
l 自动增长:
①创建表时,添加主键约束:
create table 表名(
id int primary key auto_increment,
age int
);
②删除自动增长: alter table stu modify id int;
③添加自动增长: alter table stu modify id int auto_increment;
4) 外键约束:foreign key
① 创建表时添加:
create table 表名(
…
外键列
constraint 外键名称 foreign key (外键列名称) reference 主表名称(主表列名称)
);
② 删除外键:alter table 表名 drop foreign key 外键名称;
③ 添加外键:
alter table 表名 add constraint 外键名称 foreign key (外键名字段) references 主表名称(主表列名称)
④ 级联操作:
alter table 表名 add constraint 外键名称
foreign key (外键名字段) references 主表名称(主表列名称)on update cascade on delete cascade
级联更新:on update cascade
级联删除:on delete cascade
3. 数据库的设计:
1) 多表之间的关系:
① 一对一:任意一方添加唯一外键指向另一方的主键
② 一对多:“多”建立外键指向“一”的主键
③ 多对多:需借助“中间表”,“中间表”至少两个字段,这两个字段作为“中间表”的外键指向两表主键
4. 数据库范式:<后面的范式满足前面的范式>
1) 第一范式(1NF):每一列都是不可分割的原子数据项
2) 第二范式(2NF): 函数依赖:aàb
完全函数依赖:(a,b)àc
部分函数依赖:aàc (a,b)àc
传递函数依赖:aàb,bàc
码:一个属性/属性组被其他属性完全依赖
3) 第三范式(3NF):2NF基础上消除函数依赖
5. 数据库的备份、还原:
1) cmd:mysqldump –u用户名 –p密码 数据库名>保存的路径
2) 图形化工具
day03
1. 多表查询:select * from 表名1,表名2…
l 得到笛卡尔积(两个集合的所有组成情况)
1) 内连接查询:
① 隐式内连接:select * from 表名1,表名2 where 条件;
② 显式内连接:select * from 表名1 [inner] join 表名2 on 条件;
2) 外连接查询:
① 左外连接:select * from 表1 left [outer] join 表2 on 条件;
② 右外连接:select * from 表1 right [outer] join 表2 on 条件;
3) 子查询:查询中嵌套查询
2. 事物:
1) 概念:被事物管理的多个操作,要么同时成功,要么同时失败
2) 操作:① 开启事物:start transaction;
② 回滚:rollback;
③ 提交:commit;
l 查看事物提交方式:select @@autocommit; 1—自动提交 0—手动提交
l 修改:select @@autocommit=0;
3) 四大特征:① 原子性:不可分割的最下操作单位,要么同时成功,要么同时失败
② 持久性:事物提交或回滚后,数据库会持久化保存数据
③ 隔离性:多个事物之间,相互独立
④ 一致性:事物操作前后,数据总量不变
4) 隔离级别(了解):
概念:多个事物之间有隔离性,若操作同一批数据,会引发一些问题,设置不同隔离级别来解决
存在问题:脏读、不可重复读、幻读
隔离级别:① read uncommitted :读未提交
② read committed:读已提交(Oracle) 可解决脏读
③ repeatable read:可重复读(MySQL) 可解决脏读、不可重复读
④ serializable:串行化 均可解决
l 隔离级别从小到大安全性越来越高,效率越来越低
l 查询隔离级别:select @@tx_isolation;
l 设置隔离级别:set global transaction level 级别字符串;
3. DCL:管理用户,授权
1) 管理用户:① 创建用户:create user ‘用户名’@‘主机名’ identified by ‘密码’;
② 删除用户:drop user ‘用户名’@‘主机名’;
③ 修改用户密码:update user set password = password(‘新密码’) = ‘用户名’;
set password for ‘用户名’@’主机名’=passWord(‘新密码’);
*忘记密码:①以管理员运行cmd,停止MySQL:net stop mysql;
②使用无验证方式启动MySQL:mysqld –skip-grant-tables,回车
③打开新的cmd,直接输入MySQL,回车
④use MySQL;改密码语句
⑤任务管理器关闭mysqld
⑥以管理员运行cmd,启动MySQL:net start mysql;
⑦新密码登录
④ 查询用户:切换到MySQL数据库:use MySQL;
查询user表:select * from user;
l 通配符:% 表示可以在任意主机使用用户登录数据库
2) 权限管理:① 查询权限:show grants for ‘用户名’@‘主机名’;
② 授予权限:grant 权限列表 on 数据库名.表名 to ‘用户名’@‘主机名’;
权限通配符: all
数据库名、表名通配符:*
③ 撤销权限:revoke 权限列表 on 数据库名.表名 from ‘用户名’@‘主机名’;
day04
1. JDBC概念:Java DataBase Connectivity java数据库连接——java操作数据库
l 本质:sun公司定义的一套操作所有关系型数据库的规则——接口。
各个数据库厂商去实现这套接口,提供数据库驱动jar包。
我们使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
2. 步骤:
1. 导入驱动jar包 mysql-connector-java-5.1.37-bin.jar
1.复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下
2.右键-->Add As Library
2. 注册驱动
3. 获取数据库连接对象 Connection
4. 定义sql
5. 获取执行sql语句的对象 Statement
6. 执行sql,接受返回结果
7. 处理结果
8. 释放资源
3. 各个类详解:
a) DriverManager:驱动管理对象
i. 注册驱动
ii. 获取数据库连接:
- 方法:static Connection getConnection(String url, String user, String password)
* 参数:
* url:(指定连接的路径)jdbc:mysql://ip地址(域名):端口号/数据库名称
* 例子:jdbc:mysql://localhost:3306/db3
* user:用户名
* password:密码
b) Connection:数据库连接对象
1. 功能:
1. 获取执行sql 的对象
* Statement createStatement()
* PreparedStatement prepareStatement(String sql)
2. 管理事务:
* 开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事物
* 提交事务:commit()
* 回滚事务:rollback()
c) Statement: 执行sql
1. boolean execute(String sql) :可以执行任意的sql 了解
2. int executeUpdate(String sql) :
执行DML(insert、update、delete)语句、DDL(create,alter、drop)语句
* 返回值:影响的行数,可以通过这个影响的行数判断DML语句是否执行成功 返回值>0的则执行成功,反之,则失败。
3. ResultSet executeQuery(String sql) :执行DQL(select)语句
d) insert语句:
代码:
Statement stmt = null;
Connection conn = null;
try {
//1. 注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2. 定义sql
String sql = "insert into account values(null,'王五',3000)";
//3.获取Connection对象
conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");
//4.获取执行sql的对象 Statement
stmt = conn.createStatement();
//5.执行sql
int count = stmt.executeUpdate(sql);//影响的行数
//6.处理结果
System.out.println(count);
if(count > 0){
System.out.println("添加成功!");
}else{
System.out.println("添加失败!");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
//stmt.close();
//7. 释放资源
//避免空指针异常
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
e) ResultSet:结果集对象,封装查询结果
* boolean next(): 游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),
如果是,则返回false,如果不是则返回true
* getXxx(参数):获取数据
* Xxx:代表数据类型 如: int getInt() , String getString()
* 参数:
1. int:代表列的编号,从1开始 如: getString(1)
2. String:代表列名称。 如: getDouble("balance")
* 注意:
* 使用步骤:
1. 游标向下移动一行
2. 判断是否有数据
3. 获取数据
4. JDBC管理事物:
* 开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务
* 在执行sql之前开启事务
* 提交事务:commit()
* 当所有sql都执行完提交事务
* 回滚事务:rollback()
* 在catch中回滚事务
day05
数据库连接池:
1. 概念:存放数据库连接的集合(节约资源、用户访问高效)
2. 实现:
a) 标准接口:DataSource
i. 方法:
1. 获取连接:getConnection();
2. 归还连接:Connection.close()
b) 由数据库厂商来实现它
i. C3P0:数据库连接池技术
ii. Druid:数据库连接池实现技术,由阿里巴巴提供
数据库。。
day01
1. 数据库:DateBase简称DB
2. MySQL启动:①cmdàservices.msc打开服务窗口
②使用管理员打开cmd:net stop mysql 启动 net start mysql 关闭
③手动 资源管理器-管理-服务
登录:①mysql –uroot –p密码
②mysql –hip –uroot –p连接目标的密码
退出:exit/quit
目录结构:数据库(文件夹)、表(文件)、数据(数据)
3. SQL(结构化查询语言):定义了操作所有关系型数据库的规则;每种数据库操作存在差异,称为“方言”
4. SQL的通用语法:
① SQL语句可单行或多行书写,以分号结尾
② MySQL数据库中的SQL语句不区分大小写,关键字建议使用大写
③ 3种注释:单行注释:-- 注释内容(#注释内容:MySQL特有);* 多行注释:/* 注释 */
5. SQL分类:DDL操作数据库、表;DML增删改表中的数据;DQL查询表中的数据;DCL(了解)
6. DDL:CRUD操作数据库
C(Create):创建 ①create database 数据库名称;
②create datebase if not exists 数据库名称;
③create database 数据库名称 character set 字符集名;
④create database if not exists 数据库名称 character set 字符集名;
R(Retrieve):查询 ①show databases;
②查询某个数据库的创建语句:show create database 数据库名称;
U(Update):修改 修改数据库字符集:alter database 数据库名称 character set 字符集名;
D(Delete):删除 ①drop database 数据库名称;②drop database if exists 数据库名称;
使用数据库:①查询正在使用的数据库名称:select database();②使用数据库:use 数据库名称;
7. DDL:CRUD操作表
C(Create):创建 ①create table 表名(
列名1 数据类型1,
列名2 数据类型2,
…
列名n 数据类型n
);
数据库类型:
1) int(整数类型):age int;
2) double(小数类型):score double(5,2)
3) data(日期): yyyy-MM-dd
4) datatime(日期):yyyy-MM-dd HH:mm:ss
5) timestamp(时间错类型):yyyy-MM-dd HH:mm:ss 默认使用系统当前时间
6) varchar(字符串):name varchar(20); 姓名最大二十个字符
②复制表:create table 表名 like 被复制的表名;
R(Retrieve):查询 ①show tables;②查询表结构:desc 表名;
U(Update):修改 ①表名:alter table 表名 rename to 新表名;
②修改字符集:alter table 表名 character set 字符集;
③添加列:alter table 表名 add 列名 数据类型;
④修改列名、类型:alter table 表名 change 列名 新列名 新数据类型;
alter table 表名 modify 列名 新数据类型;
⑤删除列:alter table 表名 drop 列名;
D(Delete):删除 ①drop table 表名;②drop table if exists 表名;
8. DML(增删改):
1) 添加数据:insert into 表名(列名1,列名2…列名n) values (值1,值2…值n)
l 若不写列名,则为所有列添加值
2) 删除数据:delete from 表名 【where 条件】;
l 不加条件删除所有记录,有多少条记录删除多少次(不推荐)
l TRUNCATE TABLE 表名; 先删除表,在创建一张一样的空表
3) 修改数据:update 表名 set 列名1=值1,列名2=值2……where 条件;
l 不加条件修改全部记录
day02
1. DQL(查询):
1) 基础查询:select 列名1… from 表名; select * from 表名;
a) 去除重复:distinct
b) 计算列:列名相加(ifnull(表达式1,表达式2):null参与运算,计算结果都为null)
c) 起别名:as(可省略)
2) 条件查询:
where子句后跟条件
运算符
* > 、< 、<= 、>= 、= 、<>、!=
* BETWEEN...AND
* IN( 集合)
* LIKE:模糊查询:select * from 表名 where name like “_&”
* 占位符:
* _:单个任意字符
* %:多个任意字符
* IS NULL
* and 或 &&
* or 或 ||
* not 或 !
3) 排序查询:order by 排序字段1,排序方式1……
l asc(默认),升序;desc,降序
l 多个条件时,仅前面条件一样,走后面条件
4) 聚合函数:列纵向计算(排除null值)
①count:计算个数 select count(列名) from 表名; <一般选择非空列:主键>
②max:计算最大值 select max(列名) from 表名;
③min:计算最小值 select min(列名) from 表名;
④sum:计算和 select sum(列名) from 表名;
⑤avg:计算平均值 select avg(列名) from 表名;
5) 分组查询:
①group by 列名; select 列名,avg(math) from student group by 列名;
select 列名,avg(math) from student where 条件 group by 列名;
select 列名,avg(math) from student group by 列名 having 条件;
where在分组前限定条件,having在分组后
where后不可跟聚合函数,having可以
6) 分页查询:(limit是一个方言)
limit 开始的索引<(当前页码-1)*每页显示条数>;
select * from student limit 0,3;
select * from student limit 3,3;
select * from student limit 6,3;
2. 约束:对表中的数据进行限定
1) 非空约束:not null
① 创建表时添加约束 id int not null;
② 创建表后添加约束 alter table 表名 modify name varcher[20] not null;
③ 删除约束:alter table 表名 modify name varcher[20];
2) 唯一约束:unique
① 创建时:name varchar[20] unique;
② 创建后:alter table 表名 modify name varchar[20] unique;
③ 删除:alter table 表名 drop index 列名;
3) 主键约束:primary key(非空且唯一,每个表只有一个字段为主键)
① create table 表名(
id int primary key,
age int
);
② 创建表后添加主键:alter table 表名 modify id int primary key;
③ 删除主键:alter table stu drop primary key;
l 自动增长:
①创建表时,添加主键约束:
create table 表名(
id int primary key auto_increment,
age int
);
②删除自动增长: alter table stu modify id int;
③添加自动增长: alter table stu modify id int auto_increment;
4) 外键约束:foreign key
① 创建表时添加:
create table 表名(
…
外键列
constraint 外键名称 foreign key (外键列名称) reference 主表名称(主表列名称)
);
② 删除外键:alter table 表名 drop foreign key 外键名称;
③ 添加外键:
alter table 表名 add constraint 外键名称 foreign key (外键名字段) references 主表名称(主表列名称)
④ 级联操作:
alter table 表名 add constraint 外键名称
foreign key (外键名字段) references 主表名称(主表列名称)on update cascade on delete cascade
级联更新:on update cascade
级联删除:on delete cascade
3. 数据库的设计:
1) 多表之间的关系:
① 一对一:任意一方添加唯一外键指向另一方的主键
② 一对多:“多”建立外键指向“一”的主键
③ 多对多:需借助“中间表”,“中间表”至少两个字段,这两个字段作为“中间表”的外键指向两表主键
4. 数据库范式:<后面的范式满足前面的范式>
1) 第一范式(1NF):每一列都是不可分割的原子数据项
2) 第二范式(2NF): 函数依赖:aàb
完全函数依赖:(a,b)àc
部分函数依赖:aàc (a,b)àc
传递函数依赖:aàb,bàc
码:一个属性/属性组被其他属性完全依赖
3) 第三范式(3NF):2NF基础上消除函数依赖
5. 数据库的备份、还原:
1) cmd:mysqldump –u用户名 –p密码 数据库名>保存的路径
2) 图形化工具
day03
1. 多表查询:select * from 表名1,表名2…
l 得到笛卡尔积(两个集合的所有组成情况)
1) 内连接查询:
① 隐式内连接:select * from 表名1,表名2 where 条件;
② 显式内连接:select * from 表名1 [inner] join 表名2 on 条件;
2) 外连接查询:
① 左外连接:select * from 表1 left [outer] join 表2 on 条件;
② 右外连接:select * from 表1 right [outer] join 表2 on 条件;
3) 子查询:查询中嵌套查询
2. 事物:
1) 概念:被事物管理的多个操作,要么同时成功,要么同时失败
2) 操作:① 开启事物:start transaction;
② 回滚:rollback;
③ 提交:commit;
l 查看事物提交方式:select @@autocommit; 1—自动提交 0—手动提交
l 修改:select @@autocommit=0;
3) 四大特征:① 原子性:不可分割的最下操作单位,要么同时成功,要么同时失败
② 持久性:事物提交或回滚后,数据库会持久化保存数据
③ 隔离性:多个事物之间,相互独立
④ 一致性:事物操作前后,数据总量不变
4) 隔离级别(了解):
概念:多个事物之间有隔离性,若操作同一批数据,会引发一些问题,设置不同隔离级别来解决
存在问题:脏读、不可重复读、幻读
隔离级别:① read uncommitted :读未提交
② read committed:读已提交(Oracle) 可解决脏读
③ repeatable read:可重复读(MySQL) 可解决脏读、不可重复读
④ serializable:串行化 均可解决
l 隔离级别从小到大安全性越来越高,效率越来越低
l 查询隔离级别:select @@tx_isolation;
l 设置隔离级别:set global transaction level 级别字符串;
3. DCL:管理用户,授权
1) 管理用户:① 创建用户:create user ‘用户名’@‘主机名’ identified by ‘密码’;
② 删除用户:drop user ‘用户名’@‘主机名’;
③ 修改用户密码:update user set password = password(‘新密码’) = ‘用户名’;
set password for ‘用户名’@’主机名’=passWord(‘新密码’);
*忘记密码:①以管理员运行cmd,停止MySQL:net stop mysql;
②使用无验证方式启动MySQL:mysqld –skip-grant-tables,回车
③打开新的cmd,直接输入MySQL,回车
④use MySQL;改密码语句
⑤任务管理器关闭mysqld
⑥以管理员运行cmd,启动MySQL:net start mysql;
⑦新密码登录
④ 查询用户:切换到MySQL数据库:use MySQL;
查询user表:select * from user;
l 通配符:% 表示可以在任意主机使用用户登录数据库
2) 权限管理:① 查询权限:show grants for ‘用户名’@‘主机名’;
② 授予权限:grant 权限列表 on 数据库名.表名 to ‘用户名’@‘主机名’;
权限通配符: all
数据库名、表名通配符:*
③ 撤销权限:revoke 权限列表 on 数据库名.表名 from ‘用户名’@‘主机名’;
day04
1. JDBC概念:Java DataBase Connectivity java数据库连接——java操作数据库
l 本质:sun公司定义的一套操作所有关系型数据库的规则——接口。
各个数据库厂商去实现这套接口,提供数据库驱动jar包。
我们使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
2. 步骤:
1. 导入驱动jar包 mysql-connector-java-5.1.37-bin.jar
1.复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下
2.右键-->Add As Library
2. 注册驱动
3. 获取数据库连接对象 Connection
4. 定义sql
5. 获取执行sql语句的对象 Statement
6. 执行sql,接受返回结果
7. 处理结果
8. 释放资源
3. 各个类详解:
a) DriverManager:驱动管理对象
i. 注册驱动
ii. 获取数据库连接:
- 方法:static Connection getConnection(String url, String user, String password)
* 参数:
* url:(指定连接的路径)jdbc:mysql://ip地址(域名):端口号/数据库名称
* 例子:jdbc:mysql://localhost:3306/db3
* user:用户名
* password:密码
b) Connection:数据库连接对象
1. 功能:
1. 获取执行sql 的对象
* Statement createStatement()
* PreparedStatement prepareStatement(String sql)
2. 管理事务:
* 开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事物
* 提交事务:commit()
* 回滚事务:rollback()
c) Statement: 执行sql
1. boolean execute(String sql) :可以执行任意的sql 了解
2. int executeUpdate(String sql) :
执行DML(insert、update、delete)语句、DDL(create,alter、drop)语句
* 返回值:影响的行数,可以通过这个影响的行数判断DML语句是否执行成功 返回值>0的则执行成功,反之,则失败。
3. ResultSet executeQuery(String sql) :执行DQL(select)语句
d) insert语句:
代码:
Statement stmt = null;
Connection conn = null;
try {
//1. 注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2. 定义sql
String sql = "insert into account values(null,'王五',3000)";
//3.获取Connection对象
conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");
//4.获取执行sql的对象 Statement
stmt = conn.createStatement();
//5.执行sql
int count = stmt.executeUpdate(sql);//影响的行数
//6.处理结果
System.out.println(count);
if(count > 0){
System.out.println("添加成功!");
}else{
System.out.println("添加失败!");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
//stmt.close();
//7. 释放资源
//避免空指针异常
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
e) ResultSet:结果集对象,封装查询结果
* boolean next(): 游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),
如果是,则返回false,如果不是则返回true
* getXxx(参数):获取数据
* Xxx:代表数据类型 如: int getInt() , String getString()
* 参数:
1. int:代表列的编号,从1开始 如: getString(1)
2. String:代表列名称。 如: getDouble("balance")
* 注意:
* 使用步骤:
1. 游标向下移动一行
2. 判断是否有数据
3. 获取数据
4. JDBC管理事物:
* 开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务
* 在执行sql之前开启事务
* 提交事务:commit()
* 当所有sql都执行完提交事务
* 回滚事务:rollback()
* 在catch中回滚事务
day05
数据库连接池:
1. 概念:存放数据库连接的集合(节约资源、用户访问高效)
2. 实现:
a) 标准接口:DataSource
i. 方法:
1. 获取连接:getConnection();
2. 归还连接:Connection.close()
b) 由数据库厂商来实现它
i. C3P0:数据库连接池技术
ii. Druid:数据库连接池实现技术,由阿里巴巴提供