JDBC总结篇

1. 数据库选型

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

2. 访问数据库


与数据库的连接本质上是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( 2 8 2^8 28–1)字符的TEXT列。
    TEXT[(M)]最大长度为65,535( 2 16 2^{16} 216–1)字符的TEXT列。
    MEDIUMTEXT最大长度为16,777,215( 2 24 2^{24} 224–1)字符的TEXT列。
    LONGTEXT最大长度为4,294,967,295或4GB( 2 32 2^{32} 232–1)字符的TEXT列。
7. BLOB(Binary Large Object)

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

  • Mysql中相关类型:
    TINYBLOB最大长度为255( 2 8 2^8 28–1)字节的BLOB列。
    BLOB[(M)]最大长度为65,535( 2 16 2^{16} 216–1)字节的BLOB列。
    MEDIUMBLOB最大长度为16,777,215( 2 24 2^{24} 224–1)字节的BLOB列。
    LONGBLOB最大长度为4,294,967,295或4GB( 2 32 2^{32} 232–1)字节的BLOB列。

代码参考

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值