数据库的分类:
关系型数据库、非关系型数据库。这跟数据库的发展相关。
关系型数据库: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编程扩展的更多相关文章

  1. 第十三章.MySQL数据库与JDBC编程(下)

    JDBC的典型用法: JDBC4.2常用接口和类简介: DriverManager:用于管理JDBC驱动的服务类,程序中使用该类的主要功能是获取Connection对象,该类包含如下方法: publi ...

  2. MySQL之JDBC编程增删改查

    MySQL之JDBC 一.JDBC是什么 Java DatabaseConnectivity (java语言连接数据库) 二.JDBC的本质 JDBC是SUN公司制定的一套接口(interface). ...

  3. 单独使用jdbc编程问题总结(一)

    在学习Mybatis之前,我们先来回顾JDBC编程的相关知识.在此基础上深入的学习Mybatis框架.如有错误,敬请指正. (一)首先我们既然要使用jdbc,当然是要操作数据库了.创建一个名为:myb ...

  4. 浅谈JDBC编程

    一.概述 1.为什么要用JDBC 数据库是程序不可或缺的一部分,每一个网站和服务器的建设都需要数据库.对于大多数应用程序员(此处不包含数据库开发人员)来说,我们更多的不是在DBMS中对数据库进行操纵, ...

  5. 02Mybatis_原生态jdbc编程中的问题总结——从而引生出为什么要用Mybatis

    我们先用jdbc去编写一个例子: 第一步:建表 /* SQLyog v10.2 MySQL - 5.1.72-community : Database - mybatis ************** ...

  6. JDBC编程的方式

    JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: 从上面可以看出JDBC编程一般要如下步骤: 1. 加载数据库驱动 2. 创建并获取数据库连接 3. 创建jdbc stateme ...

  7. JAVA基础知识之JDBC——编程步骤及执行SQL

    JDBC编程步骤 下面以mysql数据库为例, 1.加载驱动 首先需要下载数据库的驱动jar文件,并且在eclipse包中加入到class path中去, 例如mysql的驱动文件 mysql-con ...

  8. JDBC编程 之 增删改查

    JDBC编程之数据增加,更改,查询,删除 package com.good.jdbc; import java.sql.Connection; import java.sql.DriverManage ...

  9. JDBC编程步骤

    JDBC编程步骤 加载数据库驱动. 通常使用Class类的forName()静态方法来加载驱动. Class.forName(driverClass) dirverClass: mysql---Cla ...

随机推荐

  1. Ubuntu16.04下 编译安装 Tensorflow

    安装bazel sudo ./bazel***.sh 输入bazel version 检查是否安装. 编译tensorflow 1)./configure 除了选择支持cuda是y,其余的都选择n. ...

  2. HDU 1170 Shopping Offers 离散+状态压缩+完全背包

    题目链接: http://poj.org/problem?id=1170 Shopping Offers Time Limit: 1000MSMemory Limit: 10000K 问题描述 In ...

  3. 材料设计---Design

    效果: main_activity.xml <?xml version="1.0" encoding="utf-8"?> <!--Coordi ...

  4. [BUAA_SE_2017]个人作业-Week1

    个人作业-Week1 疑问 教材中说,PM在衡量需求时需要方方面面的能力与研究.可是,当下许多互联网IT公司只承担外包业务,即客户给什么需求就实现什么需求,甚至可能不要求其它先进的功能.此时,开发团队 ...

  5. python response.text和response.content的区别

      1.重点理解 response.text返回的类型是str response.content返回的类型是bytes,可以通过decode()方法将bytes类型转为str类型 推荐使用:respo ...

  6. 通过Get-Group导出组的成员

    导出组邮箱的前十个成员,需要注意的是: Get-Group没有Get-GroupMember命令,但是在结果中有一个Members的属性,这个属性包含了所有子成员的对象,用循环将它们列出来即可.有点对 ...

  7. 一次DHCP故障排错

    关于DHCP授权,我一直遇到这样一个问题:服务器明明已经在授权列表中了,但是服务就是起不来,看日志会告诉你服务器未授权或者局域网内已有DHCP服务器,但是实际上却并不是这样.现在终于知道原因了,老旧D ...

  8. MSTSC 修改端口的简单方法 3389

    1. 3389端口太过危险  最简单的办法是 修改默认端口方法非常简单. 2. win+r 打开运行, 输入 regedit 打开 注册表 3. 在地址栏输入 远程的服务的路径 输入的内容为: 计算机 ...

  9. js全端

    js是世界上最好的语言之一,或许可以不用加之一 我是个js游戏前端开发者,但是我不局限于只是开发h5游戏,微信小游戏... js很强大很强大很强大,没有哪种语言能通吃,除了js. 网页, app, 服 ...

  10. 深入理解JAVA虚拟机阅读笔记6——线程安全与锁优化

    线程安全:如果一个对象可以安全的被多个线程同时使用,那它就是线程安全的. 一.Java中的线程安全 1.不可变 不可变的对象一定是线程安全的.String.枚举类型.java.lang.Number的 ...