数据库
- 数据库是一种数据存储结构,它允许使用各种格式输入、处理和检索数据——不必在每次需要数据时重新输入它们。
- 数据库具有以下主要特点:
- 实现数据共享。
- 减少数据的冗余度。
- 数据的独立性。
- 数据实现集中控制。
- 数据的一致性和可维护性,以确保数据安全和可靠。
- 数据库的种类及功能
- 数据库的种类及功能
数据库系统一般基于某种数据模型,可以分为层次型、网状型、关系型及面向对象型等。
SQL语言
SQL(Structure Query Language,结构化查询语言)被广泛地应用关系数据库中,使用SQL语言可以方便地查询、操作、定义和控制数据库中的数据。SQL语言主要由以下几部分组成。
数据定义语言(Data Definition Language,DDL),如create、alter、drop等。
数据库查询语言( Data Query Language ,DQL), 如select
数据操纵语言(Data Manipulation Language,DML),如、insert、update、delete等。
数据控制语言(Data Control Language,DCL),如grant、revoke等。
事务控制语言(Transaction Control Language),如commit、rollback等。
指针控制语言(CCL):指针控制语言 DECLARE CURSOR
常用SQL语句简介
- select语句:
Seclect [所选字段列列举] from 表名 where 条件表达式 group by
字段 order by 字段[ASC|DESC]
如:select * from users_tb where sex=‘女’ oredr by age; - insert语句:
insert into 表名[字段名1,字段名2……] values(值1,值2……);
如:insert into user(id,name,sex,age) values(2,‘lili’,’女’,20); - update语句:
update 表名 set 字段名= 值 where 条件表达式
如:update user_tb set age =24 where id=2; - delete语句:
delete from 表名 where 条件表达式
连接数据库
mysq1-uroot -p123456 --连接数据库
update mysql.user set authentication_string=password('123456') where user='root'and Host = 'Toca1host'; --修改用户密码
flush privileges; --刷新权限
----------------------------
--所有的语句都使用;结尾
show databases; --查看所有的数据库mysq1>use school --切换数据库use数据库名
Database changedshow tab1es;--查看数据库中所有的表
describe student;--显示数据库中所有的表的信息create database westos;--创建一个数据库
exit; --退出连接
--单行注释(SQL的本来的注释)
/*
(sq1的多行注释
helloi
asdas
dasdas
*/
操作数据库
- 1、创建数据库
CREATE DATABASE [IF NOT EXISTS]westos;
- 2、删除数据库
DROP DATABASE [IF EXISTS] westos
- 3、使用数据库
--tab键的上面,如果你的表名或者字段名是一个特殊字符,就需要带
USE school
- 4、查看数据库
SHOW DATABASES--查看所有的数据库
数据库的列数据
- 数值
tinyint 十分小的数据 1个字节
smallint 较小的数据 2个字节
mediumint 中等大小的数据 3个字节
int 标准的整数 4个字节 常用的int
bigint 较大的数据 8个字节
float 浮点数 4个字节
double 浮点数 8个字节 (精度问题!)
decimal 字符串形式的浮点数 金融计算的时候,一般是使用decimal
- 字符串
char 字符串固定大小的0~255
varchar 可变字符串 0~65535 常用的变量 String
tinytext 微型文本 2^8-1
text 文本串 2^16-1 保存大文本
- 时间日期
java.util.Date
date YYY-MM-DD,日期格式
time HH:mm:ss 时间格式
·datetime YYYY-MM-DD HH:mm:ss 最常用的时间格式
·timestamp时间戳,1970.1.1到现在的毫秒数!也较为常用!
·year年份表示
- null
没有值,未知
注意,不要使用NULL进行运算,结果为NULL
数据库的字段属性(重点)
- Unsigned:
无符号的整数
声明了该列不能声明为负数 - zerofill
0填充的
不足的位数,使用0来填充,int(3),5->005 - 自增:
通常理解为自增,自动在上一条记录的基础上+1(默认)
通常用来设计唯一的主键~index,必须是整数类型
可以自定义设计主键自增的起始值和步长 - 非空NUll not null
假设设置为not nul川,如果不给它赋值,就会报错!
NUll,如果不填写值,默认就是ul! - 默认:
设置默认的值!
SX,默认值为男,如果不指定该列的值,则会有默认的值!
JDBC技术
JDBC的全称是Java DataBase Connectiviry,是一套面向对象的应用程序接口,指定了统一的访问各种关系型数据库的标准接口。JDBC是一种底层的API,因此访问数据库时需要在业务逻辑层中嵌入SQL语句。
- JDBC技术主要完成以下几个任务:
- 与数据库建立一个连接。
- 向数据库发送SQL语句。
- 处理从数据库返回的结果。
需要注意的是,JDBC并不能直接访问数据库,必须依赖于数据库厂商提供的JDBC驱动程序。
JDBC驱动程序的类型
- JDBC的总体结构由4个组件——应用程序、驱动程序管理器、驱动程序和数据源组成。
- JDBC驱动基本上分为以下4种。
- JDBC-ODBC桥:JDK提供的标准API
- JDBC本地API:把JDBC调用转成数据库的标准调用
- JDBC网络驱动: 第三方通过中间件来访问数据库
- 本地协议驱动:基于Java编写的驱动程序类(最常用)
JDBC常用接口: Connection接口
Connection接口代表与特定的数据库的连接。
要对数据表中数据进行操作,首先要获取数据库连接。创建连接后,Connection实例就像在应用程序与数据库之间开通了一条渠道。
JDBC常用类:DriverManager类
DriverManager类用来管理数据库中的所有驱动程序。
DriverManager类中的方法都是静态方法。
应用程序加载完驱动程序后,可以调用该类的
getConnection方法来获取数据库的链接对象。
如:Connection con = DriverManger.getConection(dbURl,dbUserName,dbPSW);
连接数据库步骤
1、加载数据库的驱动程序(只需要在第一次访问数据库时加载一次)
语法: Class.forName(String DriverName);
如:
String jdbcDriver ="com.mysql.jdbc.Driver";Class.forName(jdbcDriver);
2、创建一个连接(Connection对象)
Connection con = DriverManager.getConnection (String dbUrl,String dbUserName,String dbPsw);如:
String dbUrl ="jdbc:mysql://localhost:3306/db_books";//数据库地址
String dbUserName ="root"; //用户名
String dbPsw = "123456"; //密码
Connection con = DriverManager.getConnection(dbUrl,dbUserName,dbPsw);
JDBC常用接口: Statement接口
Statement接口用于创建向数据库中传递静态SQL语句的对象,该接口规定了一些可以实现对数据库的常用操作方法。Statement接口的常用方法如下表所
使用Statement
要执行SQL语句首先要获得Statement/PreparedStatement类象。通过创建的连接数据库对象con的createStatement()方法可获得
Statement对象。
Statement stm = con.creatStatment(); //获取接口实现类的实例
stm.excuteQuery(String SqlStr);//像数据库发送sql
stm.excuteUpdate (String SqlStr);//向数据库发送sql
JDBC常用接口: PreparedStatement接口
向数据库发送一个SQL语句,数据库中的SQL解释器负责把SQL语句生成底层的内部命令,然后执行该命令,完成相关的数据操作。如果不断地向数据库提交SQL语句,肯定会增加数据库中SQL解释器的负担,影响执行的速度。
解决办法,使用PreparedStatment替代Statement对象,对SQL语句预处理。
PreparedStatement支持通配符 “?”。
PreparedStatement接口继承Statement,用于执行动态的SQL语句,通过PreparedStatement实例执行的SQL语句,将被预编译并保存到PreparedStatement实例中。从而可以反复地执行该SQL语句。
使用PreparedStatement
1、获取PreparedStatment对象:
String sqlStr =select * from user where age=?,sex=?;
PreparedStatement pstm = con.PrepareStatement(String sqlStr);
2、 设置参数
pstm.setInt(1,25);//设置第一通配符 的值为整型 25;
pstm.setString(2,“女”);//
3、执行 :pstm.executeQuery/executeUpdate
JDBC常用接口: ResultSet接口
ResultSet接口类似于一个临时表,用来暂时存放数据库查询操作所获得的结果集。
获取结果集
Statement/PrepareStatement对象用相应的方法实
现对数据库的查询或修改,操作完成后会将查询的
结果集存放在ResultSet类的对象中返回。
ResultSet res = stm.executeQuery(String sqlStr);
如:String sqlStr=“select * from user”;
ResultSet res = stm.executeQuery(String sqlStr);
处理查询结果集 *.next()
ResultSet类的next()方法的返回值是boolean类
型的数据,当游标移动到最后一行之后会返回false。
ResultSet res = stm.executeQuery(String sqlStr);
while(res.next())
{
//处理语句
}
注:res.next() 移动游标后,不可回滚
resultset.beforeFirst();//移动到最前面
resultset.afterLast();//移动到最后面
resu1tSet.next();//移动到下一个数据
resu1tset.previous();//移动到前一行
resultset.absolute(row);//移动到指定行
数据库常用操作:模糊查询
SQL语句中提供了LIKE操作符用于模糊查询,可使用“%”来代替0个或多个字符,使用下划线“_”来代替一个字符。例如,在查询姓张的同学的信息时,可使用以下SQL语句:
select * from user where name like '张%'
数据库操作:添加、修改、删除记录
对数据执行添加、修改和删除操作:
通过PreparedStatement类的指定参数动态地对数据表中原有数据进行修改操作,并通过executeUpdate()方法执行更新语句。
insert into user(file1,file2,file3,file4) values(2,'lili','女',20);
update user set age =24,[……] where id=2;
delete from user where age=20
数据库应用一般操作过程 –总结
- 加载JDBC驱动程序:
- 创建数据库的连接获取数据库连接对象
- 创建获取执行对象。 Statement或PreparedStatement
- 执行SQL语句
- 处理结果 ( 两种情况) :
1、执行更新返回的是本次操作影响到的记录数。
2、执行查询返回的结果是一个ResultSet对象。 - 关闭JDBC对象:
1、关闭记录集 ResutSet
2、关闭声明 Statement/PreparedStatement
3、关闭连接对象 Connection
JDBC 事务
JDBC 事务简介:为什么要使用事务
当Jdbc程序向数据库获得一个Connection对象时,默认情况下这个Connection对象会自动向数据库提交在它上面发送的SQL语句。在并行处理的情况下往往会带来问题。例如银行转账转出与转入,仓储中的库存,入库,出库分表处理等
为了解决这个问题,JDBC提供了一种确保数据库操作同步完成的机制,我们把这种机制称为JDBC事务。
JDBC 事务简介:事务的特性(ACID)
原子性(Atomicity):事务是数据库的逻辑工作单位,它对数据库的修改要么全部执行,要么全部不执行。
一致性(Consistemcy):事务前后,数据库的状态都满足所有的完整性约束
隔离性(Isolation):并发执行的N个事务是隔离的,一个不影响一个,一个事务在没有commit之前,被修改的数据不可能被其他事务看到(通过设置数据库的隔离级别)。
持久性(Durability):持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。持久性主要在于DBMS的恢复性能。
编写JDBC 事务时的重要方法
JDBC 事务编写过程
1、设置事务的提交方式为非自动提交: conn.setAutoCommit(false);
2、将需要添加事务的代码放入try,catch块中。
3、在try块内添加事务的提交操作,表示操作无异常,提交事务。 conn.commit();
4、在catch块内添加回滚事务,表示操作出现异常,撤销事务 conn.rollback();
5、设置事务提交方式为自动提交: conn.setAutoCommit(true);
JDBC 连接池技术
JDBC 连接池技术:为什么要是用连接池
连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。连接池放了N个Connection对象,本质上放在内存当中,在内存中划出一块缓存对象,应用程序每次从池里获得Connection对象,而不是直接从数据里获得,这样不占用服务器的内存资源。
事实上,当一个线程需要用 JDBC 对一个 GBase 或其它数据库操作时,它从池中请求一个连接。当这个线程使用完了这个连接,将它返回到连接池中,这样这就可以被其它想使用它的线程使用。
当连接从池中“借出”,它被请求它的线程专有地使用。从编程的角度来看,这和用户的线程每当需要一个 JDBC 连接的时候调用DriverManager.getConnection() 是一样的,采用连接池技术,可通过使用新的或已有的连接结束线程。
连接池可以极大的改善用户的 Java 应用程序的性能,同时减少全部资源的使用。
JDBC 连接池技术:怎样创建和使用连接池
1、导入支持jar包()
2、创建 BasicDatasource对象
3、设置BasicDataSource对象的属性
4、 设置获取连接的方法及归还连接的方法
示例 DBUtil.java
JDBC 其它应用(自学了解)
1、JDBC批处理
2、JDBC可回滚的 结果集