Java-JDBC-连接数据库

数据库

  • 数据库是一种数据存储结构,它允许使用各种格式输入、处理和检索数据——不必在每次需要数据时重新输入它们。
  • 数据库具有以下主要特点:
    • 实现数据共享。
    • 减少数据的冗余度。
    • 数据的独立性。
    • 数据实现集中控制。
    • 数据的一致性和可维护性,以确保数据安全和可靠。
    • 数据库的种类及功能
  • 数据库的种类及功能
    数据库系统一般基于某种数据模型,可以分为层次型、网状型、关系型及面向对象型等。

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 changed

show 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技术主要完成以下几个任务:
    1. 与数据库建立一个连接。
    2. 向数据库发送SQL语句。
    3. 处理从数据库返回的结果。
      需要注意的是,JDBC并不能直接访问数据库,必须依赖于数据库厂商提供的JDBC驱动程序。

JDBC驱动程序的类型

  • JDBC的总体结构由4个组件——应用程序、驱动程序管理器、驱动程序数据源组成
  • JDBC驱动基本上分为以下4种。
    1. JDBC-ODBC桥:JDK提供的标准API
    2. JDBC本地API:把JDBC调用转成数据库的标准调用
    3. JDBC网络驱动: 第三方通过中间件来访问数据库
    4. 本地协议驱动:基于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接口的常用方法如下表所
Java-JDBC-连接数据库_第1张图片

使用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语句。
Java-JDBC-连接数据库_第2张图片

使用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接口类似于一个临时表,用来暂时存放数据库查询操作所获得的结果集。
Java-JDBC-连接数据库_第3张图片

获取结果集

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 

数据库应用一般操作过程 –总结

  1. 加载JDBC驱动程序:
  2. 创建数据库的连接获取数据库连接对象
  3. 创建获取执行对象。 Statement或PreparedStatement
  4. 执行SQL语句
  5. 处理结果 ( 两种情况) :
    1、执行更新返回的是本次操作影响到的记录数。
    2、执行查询返回的结果是一个ResultSet对象。
  6. 关闭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 事务时的重要方法

Java-JDBC-连接数据库_第4张图片

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可回滚的 结果集

你可能感兴趣的:(Java,java,数据库,开发语言)