Day08.mysql&jdbc
-
数据库概述
-
数据库: 我们简单的理解数据库就是存储数据的仓库,本质上数据库也是一个系统文件按照特定的格式存储数据。
-
作用: 存储数据,并且可以对数据库中的数据进行crud操作。
-
数据库历史发展:
层次结构模型数据库管理系统
网状结构模型数据库管理系统
关系型结构数据库管理系统
非关系(面向对象)型数据库管理系统 NoSql redis. ……
-
常见关系型数据库:
oracle oracle 收费跨平台 非互联网大公司用的最多的数据库
DB2 IBM 收费跨平台 晚于Oracle的大型数据库
SQlServer 微软 中型数据库 不跨平台
Sybase sap 收费跨平台 大型数据库
mysql Oracle 跨平台(不同版本)开源免费 互联网公司以及小公司用的最多的数据库
-
sql
-
概述: 是Structured Query Language(结构化查询语言) ,我们可以通过sql对数据库进行管理和操作
-
分类:
①DDL:(Database Definition Language)数据库定义语言 主要作用:创建库创建表 create alter drop
-
②DML:(Database Manipulation language)数据库操作语言,主要作用:对数据库增删改 delete update insert
③DQL:(Database Query language)数据库查询语言,主要作用:对数据库中的数据进行查询
④DCL:(Database Control language)数据库控制语言,权限控制(了解)
-
创建库的操作:
(1) 创建库:
create datebase 库名
create database 库名 character set 编码集
(2) 查看库:
show character set; 查看数据库支持的字符集
show database ; 查看当前系统中有多少个数据库
show create database 库名; 查看我们创建相应库的信息
select database(); 查看当前所在的库
(3) 删除数据库:
drop database 库名;
(4) 修改数据库编码:
alter database 库名 character set 编码集;
alter database 库名char set 编码集;
-
选择库:
use 库名;
-
创建表操作:
-
语法:
create table 表名(
字段 字段的类型 【约束】,
…….
最后一行
);
注意:非最后一行必须加逗号,最后一行不能加任何符号。
-
数据类型:
java mysql
int int
float float
double double
String char/varchar:字符串。varchar长度可以改变,char长度指定。
varchar(32) char(18);
如果已知的长度固定就用char。
Date date time datetime timstamp(时间戳)
Datetime和timstamp区别:
Datetime默认null,
timestamp默认当前时间
-
约束:
primary key 主键约束
not null :非空约束
unique:唯一约束
default:默认约束。
foreign key:外键约束 :将两个表联系到一起。
-
查看表:
show tables; 查看当前库中有多少个表
desc 表名; 查看相应表的详细数据
-
删除表:
drop table 表名;
-
修改操作
alter table 表名 add 列名 类型(长度) ; –添加列.
alter table 表名 modify 列名 类型(长度) ; -改列的类型.
alter table 表名 change 旧列名 新列名 类型(长度) 约束; –修改表的列名.
alter table 表名 drop 列名; –删除列.
/rename table 表名 to 新表名; –修改表名
alter table 表名 rename to 新名; –修改表名
//alter table 表名 character set 字符集; –修改表的字符集
//show create table taname\G;
-
增删改查crud:
(1) 增:insert:
insert into 表名 values(字段值…..)
insert into 表名 (字段…) values (值。。。)
(2) 删:delete:
delete from 表名 where条件
如果我们不写where条件,我们会将数据库中的数据信息完全删除。
truncate table 表名:
给我的带来的效果是将数据库中的表中的信息都进行了删除。
(3) 改:update:
update 表名 set 字段 = xxxx where条件
(4) 查:select:
执行顺序
select 信息 from 表明 where[条件] 排序
(1)找表。
(2)条件
(3)结果
(4)排序
(5)分页
#查询语句: SELECE 列名1,列名2,…FROM 表;
SELECT gname,price FROM goods;
SELECT *FROM goods; #*代表所有列
SELECT gname AS 商品名 ,price AS 价格 FROM goods;
SELECT gname ,price AS 涨价前,price*1.2 AS 涨价后 FROM goods;
SELECT gname,price FROM goods WHERE price>22;
SELECT gname,address FROM goods WHERE price<>35; # <>表示不等于,与!=等效
#模糊查询 like 其中_表示一个字符,%表示任意个字符
SELECT *FROM goods WHERE gname LIKE ‘%果’; #以果结尾
SELECT *FROM goods WHERE address LIKE ‘%山%’;
SELECT *FROM goods WHERE gname LIKE ‘_果_’;
#in查询
SELECT *FROM goods WHERE price IN(5,10,15,20);
#betwen and 查询,包含首位数据
SELECT *FROM goods WHERE price>=10 AND price <=20;
SELECT *FROM goods WHERE price BETWEEN 10 AND 20;
SELECT *FROM goods WHERE DATETIME BETWEEN ‘2016-06-22’ AND ‘2016-08-08’;
#null
SELECT *FROM goods WHERE DATETIME IS NULL;#判断为空
SELECT *FROM goods WHERE DATETIME IS NOT NULL;#判断不为空
#排序
SELECT *FROM goods ORDER BY price; #自然顺序,升序排列
SELECT *FROM goods ORDER BY price DESC;#降序排列
SELECT *FROM goods WHERE price <33 ORDER BY price DESC LIMIT 5; #限制个数5个
#聚合函数
SELECT SUM(price) FROM goods;
SELECT AVG(price) FROM goods WHERE price <20;
SELECT COUNT(gname) FROM goods;
#分组查询 先分组,后计算
SELECT unit ,COUNT(*) FROM goods GROUP BY unit;
SELECT address ,AVG(price) FROM goods GROUP BY address;
SELECT address,AVG(price) FROM goods GROUP BY address HAVING AVG(price)<15;#注意having后面不能直接写成price,必须是AVG(price)
SELECT unit ,AVG(price) FROM goods WHERE price<15 GROUP BY unit;
#注意:where和having区别:where是在分组之前条件筛选,having是在分组运算后条件
筛选
-
JDBC:
-
概述: 我们用jdbc对对数据库进行连接,并操作数据库中的数据
-
java提供的操作数据库的api
Driver —– 代表驱动对象
Connection —连接对象
Statement —操作数据库的对象
ResultSet —结果对象
-
jdbc操作数据库基本步骤:
1.注册驱动
2.获取连接对象
3.获得操作数据库的对象
4.执行sql语句
5.返回结果集
6.释放资源
(4) JDBCUtils :
package cn.itcast.utils;
import java.io.FileReader; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties;
public private private private private static{ Properties pp = new Properties(); try { pp.load(new FileReader(“jdbc.properties”)); } catch (IOException e) { e.printStackTrace(); } drivername = pp.getProperty(“drivername”); url = pp.getProperty(“url”); user = pp.getProperty(“user”); password= pp.getProperty(“password”); } static{ try { // 注册驱动 Class.forName(drivername); } catch (ClassNotFoundException e) { e.printStackTrace(); } } //获取连接 public try { return DriverManager.getConnection(url, user, password); } catch (SQLException e) { e.printStackTrace(); } return } //释放资源 public if (rs!=null) { try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } rs=null; } if (stat!=null) { try { stat.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } stat=null; } if (con!=null) { try { con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } con=null; } } //方法重载 public if (stat!=null) { try { stat.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } stat=null; } if (con!=null) { try { con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } con=null; } } } |
-
增删改查案例:
package cn.itcast_01;
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;
import org.junit.Test;
import cn.itcast.utils.JdbcUtils;
public @Test public // 1.注册驱动 Class.forName(“com.mysql.jdbc.Driver”); // 2.获取连接对象 Connection con = DriverManager.getConnection(“jdbc:mysql://localhost:3306/bj232”, “root”, “root”); // 3.获取操作数据库对象 Statement stat = con.createStatement(); // 4.执行sql String sql = “INSERT INTO goods VALUES(null,’榴莲‘,30,’海南‘,’斤‘,’2016-08-08’)”; int System.out.println(i); // 5.释放资源 stat.close(); con.close(); } @Test public //获得连接对象 Connection con = JdbcUtils.getConnection(); //获得执行数据库对象 String sql=“update goods set address=’shanxi’ where id=?”; PreparedStatement stat = con.prepareStatement(sql); stat.setInt(1, 1); //执行sql int System.out.println(i); //关闭资源 JdbcUtils.coloseResoure(con, stat); } @Test public //获取连接对象 Connection con = JdbcUtils.getConnection(); //获得执行数据库对象 String sql = “delete from goods where gname=?”; PreparedStatement stat = con.prepareStatement(sql); stat.setString(1, “香蕉“); //执行sql int System.out.println(i); //关闭资源 JdbcUtils.coloseResoure(con, stat); } @Test public //获取连接对象 Connection con = JdbcUtils.getConnection(); //获得执行数据库对象 String sql =“select *from goods where price<20”; PreparedStatement stat = con.prepareStatement(sql); //执行sql ResultSet rs = stat.executeQuery(); //返回结果集 while (rs.next()) { String gname = rs.getString(2); System.out.println(gname); } //关闭资源 JdbcUtils.coloseResoure(con, stat, rs); } } |
相关笔试题:
1.
【sql分类】(笔试题)
DDL:(Database Definition Language)数据库定义语言
主要作用:创建库,创建表 —》create alter drop
DML:(Database Manipulation language)数据库操作语言
主要对作用:对数据库增删改
delete update insert
DQL:(Database Query language)数据库查询语言
主要对数据库中的数据进行查询
select
DCL:(Database Control Language)数据库控制语言
权限控制。(了解)
2. 我们在使用jdbc之前需要首先导入jar包
jdbc操作数据库的基本步骤(笔试题)
1:注册驱动
2:获取连接对象
3:获得操作数据库的对象 并且执行语句
4:返回处理结果
5:释放资源
3.删除表中所有记录使用delete from 表名;还是用truncate table 表名?
删除方式:delete 一条一条删除,不清空auto_increment记录数
truncate:直接将表删除,重新建表,auto_increment将置0
事务方面:delete 删除的数据,如果在一个事务中可以找回
truncate:删除的数据找不回,