标签:class 数据存储 stop ati order 语句 数据操作 商品 ring
1.数据库
概念:
就是存储数据的仓库,本质上就是一个系统文件.
作用:
存储数据
结构:
DBMS(数据库管理系统)
|------数据库
|------|------表
|------|------|------表数据
DBMS:数据库安装文件
常见数据库:
MYSQL数据库 开源的
ORACLE数据库 大型收费的
DB2 大型收费的,银行系统常用
停启服务:(停启服务时,CMD需要使用管理员身份运行)
启动:
net start mysql
停止:
net stop mysql
登录:
在CMD中使用命令:mysql -u用户名 -p密码
问题:数据存储在数据库中,如何去访问呢?
SQL:机构化查询语句
SQL分类:
DDL数据定义语言
用来定义数据库对象: 数据库database ,表table ,列column
create,alter,drop
DML数据操作语言
对数据库中表记录进行更新
add,update,delete
DQL数据查询语言
查询数据库中中记录
query
DCL数据控制语言
定义数据库访问权限和安全级别 grant
2.DDL数据定义语言(data definition language)
数据库操作:
创建:
格式1:
create database 数据库名称; ★
格式2:
create database 数据库名称 set character set "GBK";
查看
show databases; 查看所有数据库
use 数据库名; 使用数据库
select database(); 查看当前正在使用的数据库
show create database 数据库名; 查看数据库结构(创建语句)
修改:
alter database 数据库名 character set gbk;
删除:
drop database 数据库名;
表结构操作: ★★★
创建
create table 表名(
字段名 字段类型[长度] [约束条件],
字段名 字段类型[长度] [约束条件]
);
约束:
1.主键约束:primary key 要求被修饰的字段非空且唯一
2.非空约束:not null 要求被修饰的字段非空
3.唯一约束:unique 要求被修饰的字段唯一
数据类型:
JAVA MYSQL
-----------------
INT INT
FLOAT FLOAT
DOUBLE DOUBLE DOUBLE(5,2) 表示一共5位,3位整数2位小数
CHAR/STRING CHAR/VARCHAR
DATE DATE/TIME/DATETIME/TIMESTAMP
DATE:只存年月日,默认值为null
TIME:只存时分秒,默认值为null
DATETIME:存年月日 时分秒,默认值为null
TIMESTAMP:存年月日 时分秒,默认值为当前系统时间
面试题:
CHAR/VARCHAR区别?
CHAR:
固定长度的字符串,可以不指定长度,默认1
如果存储数据长度达不到指定长度,右补空格.
检索效率极高,占用空间大
常用:一些固定的值:性别/学历/等级
VARCHAR:
不固定长度的字符串,必须指定长度.
如果存储数据长度打不到指定长度,不进行补全
占用空间较小
常用:不固定的值:姓名/地址
查看
show tables; 查看所有表
show create table 表名; 查看表创建语句
desc 表名; 查看表结构
修改
alter table 表名 add 字段名 类型[长度] [约束]; --添加字段
例如:alter table category add pp varchar(32) ;
alter table 表名 modyfy 字段名 新类型[长度] [新约束]; --修改字段类型/约束
例如:alter table category modify pp int(11) ;
alter table 表名 change 字段名 新字段名 ; --修改列名
例如:alter table category change pp pigu int(11);
alter table 表名 drop ; --删除列
例如:alter table category drop pigu;
alter table 表名 rename to 新表名; --修改表名
例如:alter table rename category to cate;
删除
drop table 表名;
3.DML数据操作语言(Data Manipulation Language)★★★
表数据操作
添加数据 insert
格式1:
insert into 表名 values(值1,值2,..) --向表中插入所有列.每个字段必须都插入值
insert into 表名 (字段1,字段2,..)values(值1,值2,..) --向表中指定列插入数据 ★★★
注意:
1.列名数和values后面的值的个数要相同
2.列名顺序和插入值的顺序要一致
3.列的类型要和插入值的类型一致
4.插入值的时候,不能超过最大长度
5.如果有字符串或者日期需要加上引号‘‘
修改数据
格式:
update 表名 SET 字段名="值", 字段名="值",... [where 条件];
注意:
1.列的类型要和插入值的类型一致
2.修改值的时候,不能超过最大长度
3.如果有字符串或者日期需要加上引号‘‘
删除数据
格式:delete from 表名 [where 条件]
4.CMD中文乱码(了解):
解决方案:
1.修改数据库配置文件,将数据库编码设置为GBK (不推荐使用)
2.set names gbk; 设置当前窗口编码【当前窗口有效】.
show variables like ‘%char%‘;查看系统参数.
处理中文乱码:保证系统窗口编码和connection编码一致即可.
5.DQL数据查询语言: ★★★
查询数据
简单查询
select * from 表名;
条件查询
select * from 表名 where 条件;
排序
select * from 表名 order by 字段名 asc|desc;
聚合
count() 记录数
sum() 求和
avg() 平均数
max() 最大值
min()最小值
注意:聚合函数统计时不计算null值
分组
select * from 表名 group by 字段名 [having 条件];
SQL语句查询总结
SELECT DISTINCT * | 字段
FROM 表名
WHERE 查询条件
GROUP BY 分组字段(列名)
HAVING 分组条件
ORDER BY 排序字段 ASC|DESC
6.JDBC
概念:
java数据库连接
开发步骤:
1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
2.获得连接
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/demo", "root", "root");
3.获得语句执行者
Statement st = conn.createStatement();
4.执行SQL语句
String sql = "select * from product";
ResultSet rs = st.executeQuery(sql);
5.处理结果集
while (rs.next()) {}
6.释放资源(后得到的先关闭)
rs.close();
st.close();
conn.close()
JDBC的API
API详解:注册驱动:
方式1:
Class.forName("com.mysql.jdbc.Driver"); ★★★
方式2:
DriverManager.registerDriver(com.mysql.jdbc.Driver);(了解)
缺点:1.硬编码,扩展性低
2.会注册两次驱动
API详解:获得连接
格式:Connection conn = DriverManager.getConnection("url", "name", "password");
参数url: jdbc:数据库名称://数据库地址:端口/数据库名称
例如:jdbc:mysql://127.0.0.1:3306/demo
参数name:数据库用户名
参数password:数据库密码
API详解:获得语句执行者
1.Statement st = conn.createStatement(); (了解)
2.PrepareStatement pst = conn.prepareStatement(sql) ★★★
Statement和PrepareStatement区别:
a.PrepareStatement的执行效果要比Statement高
b.PrepareStatement对SQL语句进行预处理,防止SQL脚本注入
c.编写代码更加简单
API详解:预处理对象PrepareStatement
注意事项:
1.SQL语句中,需要的所有参数使用,分隔
String sql = "select * from product where price > ?";
2.设置实际参数(给对应?赋值)
a.?设置从1开始
b.?赋值的顺序和参数类型要和SQL语句字段对应
st.setDouble(1, 800); 表示给第一个问号赋值
API详解:结果集
rs.next();光标移动到下一行
rs.getXxx(int); 表示获得对应第几列的数据
rs.getXxx("字段名");表示获得对应字段的数据
注意:
rs.getXxx(..) Xxx的类型要和括号中()中对应字段类型一致
例如:
rs.getDouble(price) 获取价格
rs.getString(pname) 获取商品名称
代码:
package cn.itcast.b_jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import com.mysql.jdbc.Driver; public class DemoJDBCApi4 { /* * 准备工作: * 导入mysql的驱动包 * 1.注册驱动 2.获取连接 3.获取语句执行者 4.执行语句 5.处理结果集 6.释放资源 */ public static void main(String[] args) { /* * 1.注册驱动 * 方式1:使用反射 ★★★ * Class.forName("com.mysql.jdbc.Driver"); * 方式2: * DriverManager.registerDriver(new com.mysql.jdbc.Driver()); * 缺点: * 1.硬编码,不便于扩展 * 2.注册两次 */ try { Class.forName("com.mysql.jdbc.Driver"); /* * 2.获取连接 * DriverManager.getConnection("URL", "name", "password"); * 参数url: * jdbc:数据库名称://ip地址:端口号/数据库名称 * * */ Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/ee245_day08", "root", "root"); //System.out.println(connection); /* * 3.获取语句执行者 * Statement(了解) * PreparedStatement(掌握) * Statement和PreparedStatement区别(PreparedStatement优点): * 优点: * 1.对SQL语句进行预处理,放置SQL脚本注入 * 2.PreparedStatement执行效率高 * 3.编写代码更加方便 * * SQL字符串中使用?替换参数 * PreparedStatement.SetXxx Xxx类型要和数据库字段类型要匹配 * 注意: * st.setString(1,"联想"); 表示给第一个?赋值 * . * */ String sql = "select * from product where pname = ? "; PreparedStatement st = connection.prepareStatement(sql); st.setString(1,"联想"); //4.执行语句 ResultSet rs = st.executeQuery(); /* * 5.处理结果集 ResultSet * * 取值: * rs.getXxx("字段"); Xxx类型要和数据库字段类型要匹配 * rs.getXxx(int); Xxx类型要和数据库字段类型要匹配 * int 对应数据库中第几个字段(列) * * */ while(rs.next()){ int pid = rs.getInt(1); double pname = rs.getDouble(3); System.out.println(pid+"--"+pname); } //6.释放资源 后开的先关闭 rs.close(); st.close(); connection.close(); } catch (Exception e) { e.printStackTrace(); } } }
=====================================================================
面试题:
一.删除表数据时,使用delete from 表名 和 truncate 表名.有什么区别?
1.删除方式:
delete 一条一条删除,不情况 auto_increment记录数
truncate 直接删除表,将表重建.auto_increment记录数将置为0.重新开始
2.事物方面:
delete删除的数据,如果在一个事物中可以找回.
truncate 删除的数据找不回来.
二.where和having的区别
where是查询条件
having是分组条件,必须出现在group by 的后面
三.Statement和PrepareStatement区别:
a.PrepareStatement的执行效果要比Statement高
b.PrepareStatement对SQL语句进行预处理,防止SQL脚本注入
c.编写代码更加简单
标签:class 数据存储 stop ati order 语句 数据操作 商品 ring
原文地址:http://www.cnblogs.com/pytpyt/p/6351780.html