文档章节

JDBC学习笔记

Coselding
 Coselding
发布于 2016/05/14 15:52
字数 1532
阅读 7
收藏 0

本文为博主原创,允许转载,但请声明原文地址:http://www.coselding.cn/blog/5/5-125.html

1.加载驱动:加载实现数据库接口的实现类
 String driver = "com.mysql.jdbc.Driver";
 Class.forName(driver);
2.实例化数据库连接对象:(需要数据库账户密码)
  connection = DriverManager.getConnection(URL, username, password);
3.获取操纵数据库的statement对象:
  Statement statement = connection.createStatement();
4.使用statement对象进行数据库操纵
5.按照顺序关闭ResultSet,Statement,Connection对象,断掉与数据库的连接
6.面向接口编程
7.封装成JdbcUtils处理jdbc相应的基本操作;
8.PrepareStatement可以进行sql语句的预编译和防止SQL注入漏洞。
9.一定记得用完之后关闭数据库连接,该资源极其珍贵。
10.数据库分页:主要完成查询总条数的获取,再根据要查询的页码在数据库中查询到相应的部分内容回传到浏览器,limit ?,?进行分页查询,具体参考常用相关组件和CustomerSystem项目。主要在于浏览器中当前页码数的维护工作。
11.大文本操作:(大文本要用流操作,防止占用过多内存)
设置值:
  PreparedStatement.setCharacterStream(index, reader, length);
  //注意length长度须设置,并且设置为int型
获取值:
  reader = resultSet. getCharacterStream(i);
  reader = resultSet.getClob(i).getCharacterStream();
  string s = resultSet.getString(i);
12.大数据操作:(大数据要用流操作,防止占用过多内存)
设置值:PreparedStatement. setBinaryStream(i, inputStream, length);
获取值:
  InputStream in  = resultSet.getBinaryStream(i);
  InputStream in  = resultSet.getBlob(i).getBinaryStream();
13.批处理:
Statement:优点:可以调用不同的sql语句批处理;
缺点:相同的sql语句要写多次,没有预编译
 PreparedStatement:
优点:执行相同sql语句但是参数不同只需要写一次sql语句
缺点:只能应用在SQL语句相同,但参数不同的批处理中
14.获取自动生成的主键:
设置statement执行获取主键:
connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
 获取主键结果集:rs = statement.getGeneratedKeys();
15.调用存储过程:
获取存储过程Statement:
  connection.prepareCall("{call demoSp(?,?)}");
 输入参数:
  statement.setString(1, "xxxx");
 输出参数:
  statement.registerOutParameter(2, Types.VARCHAR);//数据类型Types
 执行:
  statement.execute();
 得到执行结果:
  statement.getString(2);
16.事务操作:
开启事务:connection.setAutoCommit(false);
提交事务:connection.commit();
回滚事务:connection.rollback();没提交的情况下会自动回滚到事务开始阶段,该代码用户手动回滚
回滚点:Savepoint
设置回滚点:sp = connection.setSavepoint();
回滚到回滚点:connection.rollback(sp);
回滚点之前的sql要记得提交:connection.commit();
17.事务基础知识:
基本特征:原子性(A)
          一致性(C):事务前后的整体状态是一致的
          隔离性(I):并发线程安全问题
          持久性(D):commit之后保证一定保存了
难题:隔离性!!!--脏读、不可重复读、虚读
脏读:A事务修改但未提交,B事务读,A事务再回滚,则B读取的数据是脏数据;
不可重复读:A事务查询,B事务修改,A事务第二次查询得到的结果和之前的不一致;
虚读:A事务查询,B事务添加一个数据,之后A在查询得到的结果集多了一条;
隔离性解决方案:
 
隔离级别越高性能越差,根据具体情况进行选择。
注:此处设置的隔离级别是设置当前事务的隔离级别,和别的事务的隔离级别没关系,且对应该隔离级别的该事务就会有对应可能出现的隔离性问题。
注:查询程序可设置Read committed;
    统计程序要设置Serializable
18.JDBC设置隔离级别:
connection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
在开启事务之前设置隔离级别;
19.数据库连接池:
数据库连接的创建代价很大,因此实现创建多个数据库连接形成集合,需要的时候从中进行申请,用完之后再重新返回集合中,并且连接池要控制好连接状态,最大连接数,空闲连接数等参数,并发控制等。
  A、 Dbcp连接池:需要pool、dbcp、colletions三个commons的包,版本要对应;
  B、 Dbcp使用步骤:
    // 加载配置文件
    InputStream is = JDBCUtil_DBCP.class.getClassLoader()
       .getResourceAsStream("dbcpconfig.properties");
    properties.load(is);
    // DataSource工厂
    factory = new BasicDataSourceFactory();
    // 工厂通过配置文件生成DataSource对象
    ds = factory.createDataSource(properties);
  C、 从连接池申请数据库连接:(在jdbcutils中创建连接池)
    ds.getConnection();
  D、 C3P0连接池:
    导入c3p0的jar包
    加入c3p0-config.xml配置文件
    创建连接池:
    cpds = new ComboPooledDataSource("myConfig");
     获取连接对象: cpds.getConnection();
  E、 Tomcat服务器自带连接池:
    Tomcat创建一个数据库连接池放到JNDI容器中,再通过JNDI容器获取数据库连接池。(其实是DBCP连接池)
    附:JNDI详解教程:
    http://www.cnblogs.com/xing901022/p/4568803.html
    a. 配置Tomcat的Context(此之后Tomcat服务器就创建好了连接池并放入了JNDI容器中)
     附:可以配置context.xml的位置,详见:http://localhost:8080/docs/config/context.html
     配置详情:
      <Context>
        <Resource name="jdbc/EmployeeDB"
            auth="Container"
            type="javax.sql.DataSource"
            username="root"
            password=""
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost:3306/customersystem"
            maxActive="8"
            maxIdle="4"/>
      </Context>
    b. 从JNDI容器中获取连接池对象:
      初始化 jndi:
      Context initCtx = new InitialContext();
      得到jndi容器:
      Context envCtx = (Context) initCtx.lookup("java:comp/env");
      从容器中检索连接池:
      DataSource ds = (DataSource) envCtx.lookup("jdbc/EmployeeDB");
      获取连接:
      conn = ds.getConnection();
      注:该种方式要把数据库的驱动放到tomcat的lib下,防止找不到数据库驱动。
20.JDBC框架相关:
 获取数据库元数据:(数据库基本信息)
DatabaseMetaData metaData = connection.getMetaData();
获取Statement的参数元数据:(PreparedStatement的sql语句参数详细信息)
ParameterMetaData parameterMetaData = st.getParameterMetaData();
ResultSet结果集元数据:(获取结果集的相关详细信息)
ResultSetMetaData resultSetMetaData = rs.getMetaData();
框架设计思路:抽取相同部分代码,再用模版设计模式,接口回调控制主控逻辑,由子类具体实现各个模块的具体过程。保证主流程的统一性和各模块的多样性。
21.Oracle大数据存储处理:(不建议使用dbutils)
 
 
样例:
  写入:
 
   读取:
 

 

本文为博主原创,允许转载,但请声明原文地址:http://www.coselding.cn/blog/5/5-125.html

© 著作权归作者所有

Coselding

Coselding

粉丝 2
博文 17
码字总数 19240
作品 1
青岛
程序员
私信 提问
给大家分享一个JAVA技术大牛的课程笔记

目前,Java语言已经广泛应用于生活中的各个领域,无论是网络编程还是数据库编程,甚至是web开发都有Java语言的身影 很多小伙伴想学习java却布置从何学起,现在给大家分享一个JAVA大神课程笔记...

dadaxiaoxiao
2015/12/31
304
1
111 多线程JUC包下代码分析

Java多线程系列目录(共43篇) AtomicLongFieldUpdater:通过反射+CAS实现对传入对象的指定long字段实现类似AtomicLong的操作 http://www.cnblogs.com/skywang12345/p/javathreadscategory.ht...

素雷
2017/10/31
0
0
一份关于 Java、Kotlin 与 Android 的学习笔记

JavaKotlinAndroidLearn 这是一份关于 Java 、Kotlin 、Android 的学习笔记,既包含对基础知识点的介绍,也包含对一些重要知识点的源码解析,笔记的大纲如下所示: Java 重拾Java(0)-基础知...

叶应是叶
2018/08/08
0
0
BAT等大厂Android面试书单和知识点清单

java是Android开发的基础,在BAT的初面中,会涉及到比较多的java基础知识,所以比较重要,下面我介绍的书籍内容是由浅到深。 1.Thinking in java:这本书被称为Java的三大圣经之一,虽然书比...

android自学
2018/07/25
0
0
全新互联网Java后端开发技术思维导图

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/t4i2b10X4c22nF6A/article/details/82714797 图文里的技术如何学习,有没有免费资料? 对Java的技术,架构技术...

JAVA高级架构v
2018/09/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nproc systemd on CentOS 7

Increasing nproc for processes launched by systemd on CentOS 7 Ask Question I have successfully increased the nofile and nproc value for the local users, but I couldn't find a p......

MtrS
37分钟前
1
0
了解微信小程序下拉刷新功能

小程序提供了这个事件。 onPullDownRefresh() 监听用户下拉刷新事件。 如果要开启下拉刷新功能,要先到json配置: "enablePullDownRefresh":true 配置后下拉有反应了但是没有加载效果,在onP...

oixan__
今天
2
0
springmvc java对象转json,上传下载(未完)拦截器Interceptor以及源码解析(未完待续)

package com.atguigu.my.controller;import java.util.Collection;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Contr......

architect刘源源
今天
29
0
[日更-2019.5.24、25、26] Android系统中的Binder通信机制分析(一)--servicemanager

声明 其实对于Android系统Binder通信的机制早就有分析的想法,记得去年6、7月份Mr.Deng离职期间约定一起对其进行研究的,但因为我个人问题没能实施这个计划,留下些许遗憾... 最近,刚好在做...

Captain_小馬佩德罗
昨天
24
0
聊聊dubbo的DataStore

序 本文主要研究一下dubbo的DataStore DataStore dubbo-2.7.2/dubbo-common/src/main/java/org/apache/dubbo/common/store/DataStore.java @SPI("simple")public interface DataStore { ......

go4it
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部