zoukankan      html  css  js  c++  java
  • jdbc(java数据库连接)

    1 jdbc入门

    1.1 简介

    使用java程序访问(操作)数据库(发送sql语句),这叫用到了jdbc技术!!!!

    1.2 使用java程序访问数据库的前提

    1)先登录到数据库:

    数据库的主机地址(ip地址)

    端口

    数据库用户名

    数据库用户密码

    连接的数据库

    2)发送sql语句

    连接数据库的三种方式

    (1)通过驱动driver类来连接数据库;

    (2)通过DriverManager,注册Driver,来连接数据库;

    (3)通过反射Driver,加载Driver里面的静态代码块,实现自动注册Driver,在DriverManager连接数据库

    1.3 Jdbc的核心api

    |-Driver接口: 驱动程序接口。

    |-Connection connect()   用于连接数据库的方法

    可以使用驱动程序管理类获取连接:

    DriverManager.getConnection(url,user,pasword);

    |-Connection接口: 代表和数据库的连接

    |- Statement createStatement()  创建Statement接口的对象。

    |- PreparedStatement prepareStatement(String sql)  创建PreparedStatement接口的对象。

    |- CallableStatement prepareCall(String sql)创建CallableStatement接口的对象。

    |-Statement接口:用于执行静态 SQL 语句

    |- int executeUpdate(String sql)  执行DDLDML语句(更新sql语句)

    |- ResultSet executeQuery(String sql)  执行DQL语句(查询sql语句)

    |-PreparedStatement接口:用于执行预编译的 SQL 语句

    |- int executeUpdate():执行DDLDML语句(更新sql语句)

    |- ResultSet executeQuery() 执行DQL语句(查询sql语句)

    |-CallableStatement接口: 用于执行存储过程的SQL语句

    |- ResultSet executeQuery() 存储过程只能执行查询sql  

    设置输出参数registerOutParameter();  获取输出参数getXXX();

    |-ResultSet接口: 表示数据库结果集

     |- boolean next()   将光标移至下一行

     |- getXXX(): 获取结果集中的每列的值

    1.4 jdbc操作步骤

    1)注册驱动程序

    2)获取连接对象

    3)准备sql语句(DDL+DML)

    4)创建Statement对象( Statement,PreparedStatment, CallableStatement)

    5)执行sql语句

     DDL+DML: executeUpdte(sql)

    DQL; executeQuery()

    6)返回结果,处理结果

    ResultSet

    7)关闭资源

    2 使用Statement执行sql语句

    3 使用PreparedStatement执行SQL语句

     Statement vs PreparedStatement

       语法不同:

    1Statement只能执行静态的sql语句

    2PreparedStatement即可以执行静态sql语句,也可以执行预编译sql语句

    安全性不同:

    1Statement可以被用户进行sql注入

    2PreparedStatement不能被用户注入sql,比Statement更安全!!

    执行效率问题:

    1Statement不能利用数据库sql缓存功能

    2PreparedStatement可以利用数据库sql缓存功能。比Statement的执行效率更高的!!

    结论:建议尽量使用PreparedStatment

    4 优化jdbcUtil工具类

    使用类路径读取jdbc.properties文件

    -------------------------------------------------------------------------------------------------

    1 jdbc执行批处理

    1.1 引入

    之前:使用jdbc每次只能发送1sql语句,如果同时执行2000次插入,向数据库服务器发送2000 插入语句,这种做法的效率不高!

    现在:使用jdbc批处理执行2000次插入,但每次向数据库的服务器发送20sql,一共只需要发送100次就可以了!那么这种的做法的效率会比之前的做法高!!!

    批处理:一次发送多条SQL语句

    1.2 批处理的API

    Statement的批处理:

    void addBatch(String sql)  sql添加到缓存区中(没有发送的)

    int[] executeBatch()  执行批处理缓存中sql语句(发送到数据库执行)

    void clearBatch()  清空缓存区sql语句

    PreparedStatement的批处理:

    void addBatch()   把参数添加到缓存区中

    int[] executeBatch()  执行批处理缓存中所有参数(发送到数据库执行)

    void clearBatch()  清空缓存区参数列表

    2 Jdbc处理大容量数据

    2.1 什么是大容量

    字符:

        存储字符内容: mysqlchar  varchar  长度有限的。 65535

        大容量的字符字段:

          mysqltext   longtext(4G字符内容)

          oracle :  clob   longclob

    字节:

          mysqlblob65kb)   mediumblob16mb)  longblob4GB

       oracle:   blob

       

    3 Jdbc获取自增长的值

    4 事务

    4.1 数据库事务

    innoDB数据库类型: 支持事务。 

    MyISAM: 不支持事务,但执行效率高。

      set autocommit=0;

      commit;

      rollback;

    4.2 jdbc事务

    Connection.setAutoCommit(false);  开启事务

    Connection .commit();       提交事务

    Connection.rollback();      回滚事务

    4.3 事务的四大特性ACID

    原子性:一个事务的操作要么一起成功,要么一起失败!

    一致性: 在一个事务执行后,数据库从一个一致性的状态转变为另一个一致性。

    隔离性: 多个事务并发过程中,希望能够相互隔离的。

        多个事务在并发产生以下的现象:

          脏读: 一个事务读到了另一个事务没有提交的数据

          不可重复读:一个事务读到了另一个事务已经提交的更新数据(update

          幻读: 一个事务读到了另一个事务已经提交的插入数据(insert

    数据库可以设置不同的隔离级别来防止以上现象:(是否能够防止现象)

              脏读     不可重复读   幻读

    read uncommitted:     否         否        否

    read committed:         是         否        否

    repeatable-read:                                    

    serializable:                                     

    持久性: 事务一旦提交,应该永久保存下来

  • 相关阅读:
    大型架构.net平台篇(中间层均衡负载WCF)
    大型高性能ASP.NET系统架构设计
    百万级访问量网站的技术准备工作
    容器管理的分布式事务
    SQL Server 2005实现负载均衡
    nginx负载均衡 tomcat集群 memcache共享session
    JTA实现跨数据库操作
    [AX]AX2012 Table的AOSAuthorization 属性
    [AX]AX2012 Form上的ReferenceGroup control
    [AX]AX2012 Form开发概览
  • 原文地址:https://www.cnblogs.com/lldsgj/p/10802317.html
Copyright © 2011-2022 走看看