数据库的分类:
关系型数据库、非关系型数据库。这跟数据库的发展相关。
关系型数据库: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. 课堂练习 psp表

    项目计划总结表: 日期 编程 完善程序 测试程序 参考资料 日总结 3.20 18:00---19:30       1.5 3.21   9:30----10:00 10:00---10:30   ...

  2. Java每日学习笔记1

    单选按钮 JRadioButton radioButton1 = new JRadioButton("Java");// 创建单选按钮 contentPane.add(radioB ...

  3. Javascript面向对象二

    Javascript面向对象二 可以通过指定原型属性来对所有的对象指定属性, Object.prototype.name="zhangsan"; Object.prototype. ...

  4. java下Mysql基本操作

    https://www.cnblogs.com/centor/p/6142775.html

  5. thinkphp学习2-控制器

    1.定义控制器 一般来说,ThinkPHP的控制器是一个类,而操作则是控制器类的一个公共方法. 控制器通常需要继承系统的Controller类或者其子类,例如,下面定义了一个 \Home\Contro ...

  6. Centos7 Zookeeper 集群安装

    1:安装java 环境 -openjdk* 2:zookeeper 安装 (官网 http://www.apache.org/dyn/closer.cgi/zookeeper/) 2.1 目录创建 自 ...

  7. My复利计算程序测试报告

    My复利计算程序测试报告 4.0 单元测试----------------------------- 要求: 对我们和复利计算程序,写单元测试. 有哪些场景? 期待的返回值 写测试程序. 运行测试. ...

  8. PAT 1069 微博转发抽奖

    https://pintia.cn/problem-sets/994805260223102976/problems/994805265159798784 小明 PAT 考了满分,高兴之余决定发起微博 ...

  9. 常见meta标签记录

    关于meta <meta> 元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词. <meta> 标签位于文档的头部,不包含 ...

  10. C语言版kafka消费者代码运行时异常kafka receive failed disconnected

    https://github.com/edenhill/librdkafka/wiki/Broker-version-compatibility如果使用了broker版本是0.8的话, 在运行例程时需 ...