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
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 changed
show tab1es;--查看数据库中所有的表
describe student;--显示数据库中所有的表的信息
create database westos;--创建一个数据库
exit; --退出连接
--单行注释(SQL的本来的注释)
/*
(sq1的多行注释
helloi
asdas
dasdas
*/
CREATE DATABASE [IF NOT EXISTS]westos;
DROP DATABASE [IF EXISTS] westos
--tab键的上面,如果你的表名或者字段名是一个特殊字符,就需要带
USE school
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年份表示
JDBC的全称是Java DataBase Connectiviry,是一套面向对象的应用程序接口,指定了统一的访问各种关系型数据库的标准接口。JDBC是一种底层的API,因此访问数据库时需要在业务逻辑层中嵌入SQL语句。
Connection接口代表与特定的数据库的连接。
要对数据表中数据进行操作,首先要获取数据库连接。创建连接后,Connection实例就像在应用程序与数据库之间开通了一条渠道。
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);
Statement接口用于创建向数据库中传递静态SQL语句的对象,该接口规定了一些可以实现对数据库的常用操作方法。Statement接口的常用方法如下表所
要执行SQL语句首先要获得Statement/PreparedStatement类象。通过创建的连接数据库对象con的createStatement()方法可获得
Statement对象。
Statement stm = con.creatStatment(); //获取接口实现类的实例
stm.excuteQuery(String SqlStr);//像数据库发送sql
stm.excuteUpdate (String SqlStr);//向数据库发送sql
向数据库发送一个SQL语句,数据库中的SQL解释器负责把SQL语句生成底层的内部命令,然后执行该命令,完成相关的数据操作。如果不断地向数据库提交SQL语句,肯定会增加数据库中SQL解释器的负担,影响执行的速度。
解决办法,使用PreparedStatment替代Statement对象,对SQL语句预处理。
PreparedStatement支持通配符 “?”。
PreparedStatement接口继承Statement,用于执行动态的SQL语句,通过PreparedStatement实例执行的SQL语句,将被预编译并保存到PreparedStatement实例中。从而可以反复地执行该SQL语句。
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
ResultSet接口类似于一个临时表,用来暂时存放数据库查询操作所获得的结果集。
Statement/PrepareStatement对象用相应的方法实
现对数据库的查询或修改,操作完成后会将查询的
结果集存放在ResultSet类的对象中返回。
ResultSet res = stm.executeQuery(String sqlStr);
如:String sqlStr=“select * from user”;
ResultSet res = stm.executeQuery(String sqlStr);
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程序向数据库获得一个Connection对象时,默认情况下这个Connection对象会自动向数据库提交在它上面发送的SQL语句。在并行处理的情况下往往会带来问题。例如银行转账转出与转入,仓储中的库存,入库,出库分表处理等
为了解决这个问题,JDBC提供了一种确保数据库操作同步完成的机制,我们把这种机制称为JDBC事务。
原子性(Atomicity):事务是数据库的逻辑工作单位,它对数据库的修改要么全部执行,要么全部不执行。
一致性(Consistemcy):事务前后,数据库的状态都满足所有的完整性约束
隔离性(Isolation):并发执行的N个事务是隔离的,一个不影响一个,一个事务在没有commit之前,被修改的数据不可能被其他事务看到(通过设置数据库的隔离级别)。
持久性(Durability):持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。持久性主要在于DBMS的恢复性能。
1、设置事务的提交方式为非自动提交: conn.setAutoCommit(false);
2、将需要添加事务的代码放入try,catch块中。
3、在try块内添加事务的提交操作,表示操作无异常,提交事务。 conn.commit();
4、在catch块内添加回滚事务,表示操作出现异常,撤销事务 conn.rollback();
5、设置事务提交方式为自动提交: conn.setAutoCommit(true);
连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。连接池放了N个Connection对象,本质上放在内存当中,在内存中划出一块缓存对象,应用程序每次从池里获得Connection对象,而不是直接从数据里获得,这样不占用服务器的内存资源。
事实上,当一个线程需要用 JDBC 对一个 GBase 或其它数据库操作时,它从池中请求一个连接。当这个线程使用完了这个连接,将它返回到连接池中,这样这就可以被其它想使用它的线程使用。
当连接从池中“借出”,它被请求它的线程专有地使用。从编程的角度来看,这和用户的线程每当需要一个 JDBC 连接的时候调用DriverManager.getConnection() 是一样的,采用连接池技术,可通过使用新的或已有的连接结束线程。
连接池可以极大的改善用户的 Java 应用程序的性能,同时减少全部资源的使用。
1、导入支持jar包()
2、创建 BasicDatasource对象
3、设置BasicDataSource对象的属性
4、 设置获取连接的方法及归还连接的方法
示例 DBUtil.java
1、JDBC批处理
2、JDBC可回滚的 结果集