数据库的分类:
关系型数据库、非关系型数据库。这跟数据库的发展相关。
关系型数据库: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. 奔跑吧DKY——团队Scrum冲刺阶段-Day 1-领航

    各个成员在 Alpha 阶段认领的任务 修改 序号 修改 具体描述 1 游戏过程 取消原来的跳跃和俯身按钮,保留跳跃的功能,可以触屏滑动来躲避地面障碍物,也可以躲避另一种陷阱障碍物 2 闯关功能 取消 ...

  2. 2018软工实践—Beta冲刺(1)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Beta 冲鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调组内工作 调试服务器性能 展示GitHub当日代码/文档签入记录(组内 ...

  3. Maven3 用Maven创建第一个web项目(2)servlet演示

    上一章用Maven新建了web项目成功后,本文演示在此基础上应用servlet. 1.首先修改pom.xml文件,添加servlet依赖 <project xmlns="http:// ...

  4. week4d:个人博客作业

    7,程序结果的显示 1,界面 2,选第一选项. 3,输入3个数后. 4,选择第一个. 5,输入第4个数字. 6,再次进行一轮游戏. 7,选择是否要看历史记录. 8,进入下一轮游戏. 9,开始第二轮数字 ...

  5. 解决nginx+uWSGI部署Django时遇到的static文件404的问题

    昨天是利用Django自带的runserver部署的服务器,但是由于runserver比较不稳定,因此决定采用uWSGI+nginx进行部署. 昨天已经安装好了uwsgi和nginx,使用该指令打开8 ...

  6. 第二版_TestNG+Excel+(HTTP+JSON) 简单接口测试

    ---------------------------------------------------------------------------------------------------- ...

  7. C++模板常用功能讲解

    前言 泛型编程是C++继面向对象编程之后的又一个重点,是为了编写与具体类型无关的代码.而模板是泛型编程的基础.模板简单来理解,可以看作是用宏来实现的,事实上确实有人用宏来实现了模板类似的功能.模板,也 ...

  8. Python fullstack系列【2】Python数据类型

    基本数据类型 学习一门编程语言通常都是先了解其不同的数据类型,以及每种数据类型对象所附带的方法,Python也不例外,本篇就详细介绍下这部分. Python基本数据类型总览: 1.Booleans(布 ...

  9. Finding LCM LightOJ - 1215 (水题)

    这题和这题一样......只不过多了个数... Finding LCM LightOJ - 1215 https://www.cnblogs.com/WTSRUVF/p/9316412.html #i ...

  10. 【UOJ#80】二分图最大权匹配(KM)

    题面 UOJ 题解 模板qaq #include<iostream> #include<cstdio> #include<cstdlib> #include< ...