JDBC编程扩展
数据库的分类:
关系型数据库、非关系型数据库。这跟数据库的发展相关。
关系型数据库:mysql、oracle、sqlserver
非关系型数据库:redis、memcathe、mogodb、hadoop
1、JDBC
api层:程序员针对api层开发程序,告诉程序要链接到哪里,使用什么驱动
接口层:java针对各大数据库厂商开发的接口,由数据库厂商去完成实现。
一般在开始之前,就Connection con=null;Statement state=null;ResultSet rs=null;后期先判断非空,然后再关闭。不判断有可能空指针异常。
2、游标
应用场景:一次读取多行数据库记录
过滤条件太弱,读取记录过多
问题分析:一次读取大量数据库记录,会造成内存溢出(JVM内存大小限制)
游标:客户端读取部分服务器结果集的机制
使用方式:URL添加参数useCurorFetch=true(获取链接的时候)
使用preparedStatement
setFetchSize()设置游标的大小
示例:preparedStatement ps = null;
String sql="select * from t_user where sex = ?";
ps = con.prepareStatement(sql);
ps.setFetchSize(10);
ps.setString(1,"男");
rs = ps.executeQuery();
3、流方式
应用场景:读取大字段的内容
问题分析:读取的一行记录太大,造成内存溢出
流方式:将大字段内容以二进制流的方式,划分为多个区间,每次出来一个区间。
使用方法:ResultSet.getBinaryStream()
示例:class.forName("");
con = DriverManage.getConnection(DB_url,user,pwd)
String sql = "select * from user";
PreparedStatement ps=null;
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
InputStream in = rs.getBinaryStream();
File f = new File("文件路径");
OutputStream out = null;
out = new FileOutputStream(f);
byte[] b=new byte[1024];
int temp=0;
while((temp=in.read(b))!=-1){
out.write(b,0,temp);
}
}
4、批量插入
应用场景:离线数据挖掘分析导入数据库,展示数据
数据迁移
定时刷新缓存数据到数据库
分析:SQL解析花销
网络传输花销
日志刷新的花销
法一:批处理:addBatch()将多个insert语句,添加到同一个
executeBatch()
clearBatch()
法二:批量插入: insert into table value ()()()
事务
事务的特性(ACID):原子性:atomicity 事务的原子性确保要么全部完成,要么完全不起作用
一致性:consistency 一旦所有事务动作完成,事务就被提交。也就是说要么都成功,要么都不成功。
隔离性:isolation 多个事务同时处理一个数据的时候,每个事务都应该与其它事务隔离开来,防止数据损坏。
持久性:durability 一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响。应该被持久化到数据库中。
同一个Connection,setAutoCommit(false)//设置自动提交为false,commit()//完成部署以后提交,rollback()//在catch块中执行。使用PreparedStatement预处理。
脏读:读取一个事务未提交的更新
不可重复读:同一个事务中两次读取相同的记录,结果不一样
幻读:两次读取的结果包含的行记录不一样
事务的隔离级别:
读未提交(read uncommitted) 允许出现脏读、不可重复读、幻读
读提交(read committed) 不允许出现脏读、可能出现重复读、幻读
重复读(repeatable read) 不能出现重复读、可能出现幻读
串行化(serializable) 都不准发生
MySql默认级别是:repeatable read 重复读
事务隔离级别越高,数据库性能越差。
数据库连接池
作用:1、实现限流的作用,保护数据库
2、实现连接的复用
数据库在启动的时候,会初始化一些链接到连接池中,客户端在请求连接的时候,会首先到连接池里请求租借一个连接,用完再还回到连接池中,供其它请求使用。值得注意的是:服务器会自动关闭8个小时以上的空闲链接,所以我们应该定期维护数据库连接池。
常见的数据库服务器架构:
1、读写分离:非一致性读分散到多个只读节点上(从库)
一致性读和事务依然由主节点承担(主库)
2、缓存+数据库:业务服务器————缓存————数据库。业务服务器进行的数据交互动作会先放到缓存中,数据库只需要定期的从缓存中异步刷新到数据库即可。
3、分布式数据库:
数据库设计的三大范式:
1、数据库表中的每一列是不能进行分割的基本数据项,同一个列中不能有多个值,也就是实体类的属性不能有重复的多个值。
2、表中每一行必须可以被唯一区分。为实现区分,通常加上一列,以存储各个实例的唯一标识。也就是主键
3、要求一个数据库表中不包含已在其它表中已包含的非主关键信息。也就是外键。
当然有时候我们设计表的时候,也不完全遵循这些范式,这就是反三范式:有的时候为了效率查询,通常会设置重复的字段。例如订单和订单项。订单的总价可以由单价和数量计算而来,但是如果订单很多的时候,在获取的时候才去计算,效率就很低。
数据库默认的最大链接数:100.在mysql的配置文件中,有一个my.**的配置文件,里面有个maxinum的属性。那里就是表示数据库的默认最大连接量。
JDBC编程扩展的更多相关文章
- 第十三章.MySQL数据库与JDBC编程(下)
JDBC的典型用法: JDBC4.2常用接口和类简介: DriverManager:用于管理JDBC驱动的服务类,程序中使用该类的主要功能是获取Connection对象,该类包含如下方法: publi ...
- MySQL之JDBC编程增删改查
MySQL之JDBC 一.JDBC是什么 Java DatabaseConnectivity (java语言连接数据库) 二.JDBC的本质 JDBC是SUN公司制定的一套接口(interface). ...
- 单独使用jdbc编程问题总结(一)
在学习Mybatis之前,我们先来回顾JDBC编程的相关知识.在此基础上深入的学习Mybatis框架.如有错误,敬请指正. (一)首先我们既然要使用jdbc,当然是要操作数据库了.创建一个名为:myb ...
- 浅谈JDBC编程
一.概述 1.为什么要用JDBC 数据库是程序不可或缺的一部分,每一个网站和服务器的建设都需要数据库.对于大多数应用程序员(此处不包含数据库开发人员)来说,我们更多的不是在DBMS中对数据库进行操纵, ...
- 02Mybatis_原生态jdbc编程中的问题总结——从而引生出为什么要用Mybatis
我们先用jdbc去编写一个例子: 第一步:建表 /* SQLyog v10.2 MySQL - 5.1.72-community : Database - mybatis ************** ...
- JDBC编程的方式
JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: 从上面可以看出JDBC编程一般要如下步骤: 1. 加载数据库驱动 2. 创建并获取数据库连接 3. 创建jdbc stateme ...
- JAVA基础知识之JDBC——编程步骤及执行SQL
JDBC编程步骤 下面以mysql数据库为例, 1.加载驱动 首先需要下载数据库的驱动jar文件,并且在eclipse包中加入到class path中去, 例如mysql的驱动文件 mysql-con ...
- JDBC编程 之 增删改查
JDBC编程之数据增加,更改,查询,删除 package com.good.jdbc; import java.sql.Connection; import java.sql.DriverManage ...
- JDBC编程步骤
JDBC编程步骤 加载数据库驱动. 通常使用Class类的forName()静态方法来加载驱动. Class.forName(driverClass) dirverClass: mysql---Cla ...
随机推荐
- 20162314 Experiment 1: Linear structure - experiment report.
Experiment report of Besti course:<Program Design & Data Structures> Class: 1623 Student N ...
- P2P通讯原理
1.简介 当今互联网到处存在着一些中间件(MIddleBoxes),如NAT和防火墙,导致两个(不在同一内网)中的客户端无法直接通信.这些问题即便是到了IPV6时代也会存在,因为即使不需要NAT,但还 ...
- Unity3D游戏开发——访问集中式共享模块的设计模式
什么是设计模式 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结.设计模式是开发人员在开发过程中面临的一般问题的解决方案,这些解决方案是众多开发人 ...
- pygame入门
pygame入门 说明 在学习pygame时,主要参考了目光博客的教程.目光博客 原教程是2011年写的,年代比较久远了,使用Python2.我学习时使用python3将代码重新实现了一遍,同时补充了 ...
- Read N Characters Given Read4 II - Call multiple times
The API: int read4(char *buf) reads 4 characters at a time from a file. The return value is the actu ...
- Ubuntu 14.04(64bit)使用mentohust连接校园网
ubuntu14.04系统安装成功之后,需要连接上网络才可以对更新系统以及安装一些必须包.而在学校中,经常遇到的情况需要通过锐捷客户端来连接校园网. 更新: 在Ubuntu14.04下面不用装ment ...
- 记录下log4j的两种配置方式
XML文件配置 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE log4j:configura ...
- MachineLearning Exercise 7 : K-means Clustering and Principle Component Analysis
findClosestCentroids.m m = size(X,); :m [value index] = min(sum((repmat(X(i,:),K,)-centroids).^,)); ...
- 前端基础:HTTP 状态码详解
HTTP 状态码详解 1xx(信息类):表示接收到请求并继续处理 100 客户端应当继续发送请求.这个临时响应是用来通知客户端他的部分请求已经被服务器接收,且仍未被拒绝.客户端应当继续发送请求的剩余部 ...
- 【刷题】COGS 2701 动态树
★★★☆ 输入文件:dynamic_tree.in 输出文件:dynamic_tree.out 简单对比 时间限制:1 s 内存限制:256 MB [题目描述] 开始时有n个点形成的森林,共m个操作. ...