JDBC总结篇

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC总结篇相关的知识,希望对你有一定的参考价值。


1. 数据库选型

mysql5.5或者MySQL5.6
JDBC采用版本5.1.25

2. 访问数据库

JDBC总结篇_数据库


与数据库的连接本质上是Socket连接。

  • 加载驱动
//装载MySql驱动
Class.forName("com.mysql.jdbc.Driver");
//装载Oracle驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
  • DriverManager接口
  • DriverManager是JDBC的管理层,作用于用户和驱动程序之间。
  • DriverManager跟踪可用的驱动程序,并在数据库和相应的驱动程序之间建立连接。
  • Connection接口
    Connection与特定数据库的连接(会话),在连接上下文中执行 SQL 语句并返回结果。
    DriverManager的getConnection()方法建立在JDBC URL中定义的数据库Connection连接上
    连接MYSQL数据库:
Connection con = DriverManager.getConnection("jdbc:mysql://host:port/database","user","password");

连接ORACLE数据库:

Connection con = DriverManager.getConnection("jdbc:oracle:thin:@host:port:databse","user","password");
  • Statement接口
  • 用于执行静态 SQL 语句并返回它所生成结果的对象。
  • 三种Statement类:
  • Statement:
    由createStatement创建,用于发送简单的SQL语句。(不带参数的)
  • PreparedStatement:
    继承自Statement接口,由prepareStatement创建,用于发送含有一个或多个输入参数的sql语句。PreparedStatement对象比Statement对象的效率更高,并且可以防止SQL注入。我们一般都用PreparedStatement.
  • CallableStatement:
    继承自PreparedStatement 。由方法prePareCall创建,用于调用存储过程。
  • 常用的Statement方法:
  • execute():运行语句,返回是否有结果集(boolean)。
  • executeQuery():运行select语句,返回ResultSet结果集。
  • executeUpdate():运行insert/update/delete操作,返回更新的行数。
  • ResultSet接口
    Statement执行SQL语句时返回ResultSet结果集。
    ResultSet提供了检索不同类型字段的方法,常用的有:
  • getString():获得在数据库里是varchar、char等数据类型的对象。
  • getFloat():获得杂数据库里是Float类型的对象。
  • getDate():获得在数据库里面是Date类型的数据。
  • getBoolean():获得在数据库里面是Boolean类型的数据
  • 关闭连接
    ResultSet -> Statement -> Connection

3. 批处理

  • 对于大量的批处理,建议使用Statement,因为PreparedStatement的预编译空间有限,当数据量特别大时,会发生异常。
  • 需手动关闭自动提交。

4. 事务

一组要么同时执行成功,要么同时执行失败的SQL语句。是数据库操作的一个执行单元!

  • 事务开始于:
  • 连接到数据库上,并执行一条DML语句(INSERT、UPDATE或DELETE)。
  • 前一个事务结束后,又输入了另外一条DML语句。
  • 事务结束于:
  • 执行COMMIT或ROLLBACK语句。
  • 执行一条DDL语句,例如CREATE TABLE语句;在这种情况下,会自动执行COMMIT语句。
  • 执行一条DCL语句,例如GRANT语句;在这种情况下,会自动执行COMMIT语句。
  • 断开与数据库的连接。
  • 执行了一条DML语句,该语句却失败了;在这种情况中,会为这个无效的DML语句执行ROLLBACK语句。
  • 事务的四大特点(ACID)
  • atomicity(原子性)
    表示一个事务内的所有操作是一个整体,要 么全部成功,要么全失败;
  • consistency(一致性)
    表示一个事务内有一个操作失败时,所有的更改过的数据都必须回滚到修改前的状态;
  • isolation(隔离性)
    事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。
  • durability(持久性)
    持久性事务完成之后,它对于系统的影响是永久性的。
  • 事务隔离级别从低到高:
  • 读取未提交(Read Uncommitted)
  • 读取已提交(Read Committed)——默认
  • 可重复读(Repeatable Read)
  • 序列化(serializable)

5. 时间类型

  • java.util.Date
    子类:java.sql.Date 表示年月日
    子类:java.sql.Time 表示时分秒
    子类:java.sql.Timestamp 表示年月日时分秒
  • 日期比较处理
    插入随机日期
    取出指定日期范围的记录
public static  long  str2Date(String dateStr)
DateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
try
return format.parse(dateStr).getTime();
catch (ParseException e)
e.printStackTrace();
return 0;



......

ps = conn.prepareStatement("select * from t_user where lastLoginTime>? and lastLoginTime<? order by lastLoginTime ");
Timestamp start = new Timestamp(str2Date("2015-4-18 8:10:20"));
Timestamp end = new Timestamp(str2Date("2015-4-18 9:9:10"));
ps.setObject(1, start);
ps.setObject(2, end);

一般情况下使用long来表达时间是足够了。

6. CLOB(Character Large Object)

大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以​​流的方式​​来处理的。而非一般的字段,一次即可读出数据。

  • Mysql中相关类型:
    TINYTEXT最大长度为255(–1)字符的TEXT列。
    TEXT[(M)]最大长度为65,535(–1)字符的TEXT列。
    MEDIUMTEXT最大长度为16,777,215(–1)字符的TEXT列。
    LONGTEXT最大长度为4,294,967,295或4GB(–1)字符的TEXT列。

7. BLOB(Binary Large Object)

用于存储大量的二进制数据。大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式来处理的。一次即可读出该字段的数据。

  • Mysql中相关类型:
    TINYBLOB最大长度为255(–1)字节的BLOB列。
    BLOB[(M)]最大长度为65,535(–1)字节的BLOB列。
    MEDIUMBLOB最大长度为16,777,215(–1)字节的BLOB列。
    LONGBLOB最大长度为4,294,967,295或4GB(–1)字节的BLOB列。

​代码参考​


以上是关于JDBC总结篇的主要内容,如果未能解决你的问题,请参考以下文章

注册永久 JDBC 方言 sparkR

JDBC入门--- 时间类型大数据

JDBC事务

mybatis jdbcType date没有时分秒

JDBC值事务

个人永久性免费-Excel催化剂插件功能修复与更新汇总篇之七