[Java] 纯文本查看 复制代码
数据库分类[/align]
关系型
mysql
oracle
db2
非关系型
redis
SQL
1.什么是SQL?
Structured Query Language:结构化查询语言
其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为“方言”。
2.SQL通用语法
1. SQL 语句可以单行或多行书写,以分号结尾。
2. 可使用空格和缩进来增强语句的可读性。
3. MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。
4. 3 种注释
* 单行注释: -- 注释内容
或 # 注释内容(mysql 特有)
* 多行注释: /* 注释 */
SQL分类
1) DDL(Data Definition Language)数据定义语言
用于定义数据库和表、列等,关键字:create, drop,alter 等
2) DML(Data Manipulation Language)数据操作语言
用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等
3) DQL(Data Query Language)数据查询语言
用来查询数据库中表的记录(数据)。关键字:select, where 等
4) DCL(Data Control Language)数据控制语言(了解)
用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等
数据类型
VARCHAR(长度)
CHAR(长度)
TEXT
DATE
DATETIME
TIMESTAMP 默认当前系统时间
* MySQL服务启动
1. 手动。
2. cmd--> services.msc 打开服务的窗口
3. 使用管理员打开cmd
* net start mysql : 启动mysql的服务
* net stop mysql:关闭mysql服务
* MySQL登录
1. mysql -uroot -p密码
2. mysql -hip -uroot -p连接目标的密码
3. mysql --host=ip --user=root --password=连接目标的密码
* MySQL退出
1. exit
2. quit
*netstat -ano | findStr "3306"
taskkill /F /PID mysql的进程id
* MySQL目录结构
1. MySQL安装目录:basedir="D:/develop/MySQL/"
* 配置文件 my.ini
2. MySQL数据目录:datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
* 几个概念
* 数据库:文件夹
* 表:文件
* 数据:数据
*数据库/表操作
//数据库操作
CREATE DATABASE db2;
CREATE DATABASE IF NOT EXISTS db2;
CREATE DATABASE db3 CHARACTER SET gbk;
CREATE DATABASE IF NOT EXISTS db3 CHARACTER SET utf8;
DROP DATABASE db3;
DROP DATABASE IF EXISTS db3;
ALTER DATABASE db1 CHARACTER SET utf8;
SHOW DATABASES;
SHOW CREATE DATABASE db2;
//表操作
CREATE TABLE student(id INT,stuname VARCHAR(30),age INT);
CREATE TABLE student2 LIKE student;
DROP TABLE student;
DROP TABLE studnet IF EXISTS;
ALTER TABLE student RENAME TO class;
ALTER TABLE student CHARACTER SET utf8;
ALTER TABLE student ADD weight INT;
ALTER TABLE student CHANGE age birth DATE;
ALTER TABLE student MODIFY age INT;
ALTER TABLE studnet DROP age;
SHOW TABLES;
DESC student;
//表中的数据操作
INSERT INTO student(id,stuname,age)VALUES(1,zhang,20);
INSERT INTO student VALUES(2,zuo,30);
DELETE FROM student WHERE id=2;
TRUNCATE TABLE student WHERE id=2;
UPDATE student SET age=20,stuname=zoezuo WHERE id=2;
SELECT * FROM student;
ALTER TABLE student CHANGE NAME stuname VARCHAR(30);
UPDATE student SET stuname="张子琪",weight=160 WHERE id=1;
USE db1;
事务 START TRANSACTION; COMMIT; ROLLBACK; 四大特性 原子 持久 一致 隔离 隔离级别(脏读,不可重复读,虚读,幻读) 默认隔离界别 MYSQL --> 3 ORACLE --> 2 jdbc 概念 一套接口(java提供的规范) --> 要求厂商自己实现操作各自数据库的 驱动 面向接口编程 1.注册驱动 2.获取连接 3.创建sql和执行sql的对象 4.执行sql获取结果 5.处理结果 6.释放资源 ps: 1.ResultSet的遍历 while(rs.next()){ rs.getObejct(1); rs.getObejct("列名") } 2.sql注入 使用 PrepareStatement 配合占位符 ? pst.executeQuery() --> 没有参数 pst.executeUpdate() --> 没有参数 3.事务 conn.setAutoCommit(false); conn.commit() conn.rollback(); 连接池 C3P0 接入步骤: 1.导jar 1.c3p0 2个 2.mysql驱动 2.导入配置文件(src目录下) c3p0-config.xml 3.使用 DataSource dataSource = new ComboPooledDataSource(); Connection con = dataSource.getConnection(); DRUID(德鲁伊) 接入步骤 1.导jar 1.druid 2.mysql驱动 2.导入配置文件(src) druid.properties 3.使用 Properties pro = new Properties(); pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties")) DataSource dataSource = DruidDataSourceFactory.createDataSoure(pro) Connection con = dataSource.getConnection(); JdbcUtils实现思路 1.获取数据源(连接池) DataSource 2.获取连接对象 Connection 3.释放资源 重载 思路: 1,2: DataSource在类加载的时候就应该初始化,为了保证对象能够及时创建,在 static{} 静态代码块中创建的对象 Properties pro = new Properties(); pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties")) dataSource = DruidDataSourceFactory.createDataSoure(pro) 提供返回数据源的方法 getDataSource() ---> return dataSource 提供返回连接 getConnection() ---> return dataSource.getConnection() 3: 在关闭之前做非空判断!!!JdbcTemplate SPRING (基于jdbc来简化数据库的操作) !!!如果有占位符需要传入参数 DataSource dataSource = new ComboPooledDataSource(); JdbcTemplate template = new JdbcTemplate(dataSource); 增删改 template.update("sql",[具体参数]); 查询 单条结果 Map map = template.queryForMap("sql",[具体参数]); Bean bean = template.queryForObject("sql",new BeanPropertyRowMapper(Bean.class),[具体参数]); 多条结果 List<map> list = template.queryForList("sql",[具体参数]); List list = template.query("sql",new BeanPropertyRowMapper(Bean.class),[具体参数]);</map