JDBC 快速入门

来源:互联网 发布:c语言二分法解方程 编辑:程序博客网 时间:2024/06/04 23:30

  1年多没碰JDBC了,原来就没怎么学,现在稍微系统的复习以下:

 

JDBC的架构:

此图是O'Reilly的书摘里面您的,还是2.0时代的东西,我主要参考官方文档里面的内容,JDBC现在3.0

 

JDBC的介绍是这样的:

The Java Database Connectivity (JDBC) API provides universal data access from the Java programming language. Using the JDBC 3.0 API, you can access virtually any data source, from relational databases to spreadsheets and flat files. JDBC technology also provides a common base on which tools and alternate interfaces can be built.

JDBC API提供一种从Java的通用型/泛用型数据访问方法.使用JDBC3.0的API你可以访问任何数据源,从关系型数据库到电子表格到普通的文件.JDBC也提供了其他工具和接口构建的共同基础.

 

JDBC主要在两个包里面:

  • java.sql
  • javax.sql

  后者附带了服务器端的一些功能

 

JDBC的链接过程

  典型的过程是加载驱动->建立连接

  JDBC通常有两种方式:

  • DriverManager:这种是直接和数据库链接
  • DataSource:这种通过数据库连接池来连接的,这个池的概念比较不错.而且,通常当你不用的时候,链接是返回到池里面的,并不会断开连接,这样的频繁的访问的情况下,就不要花费大连的时间来建立和断开连接了.

 

 

 

结果集的处理:

  ResultSet接口提供了获取和操作执行结果的方法。ResultSet通过两个设置来决定它的机能,一个是游标的可操作方法,另外一个ResultSet的改变是如何影响到底层的数据源的。

  有三种不同的ResultSet类型:

  • TYPE_FORWARD_ONLY ,这个类型游标只能往前移动
  • TYPE_SCROLL_INSENSITIVE ,游标可以前后移,还可以跳到一个绝对位置
  • YPE_SCROLL_SENSITIVE,同上,不知道是不是有错

  ResultSet中控制游标:

 

  • next():向后移动一行,当在一行中时返回true,当在最后一行之后返回false
  • previous() :向前一行,同理当在第一行之前返回false
  • first() - 移动到ResultSet的第一行,当为空是返回false
  • last() - 同理
  • beforeFirst() - 移到第一行之前,当为空时此方法没有作用
  • afterLast() - 同理
  • relative(int rows) - 跳到相对当前行的位置,relative(-3),从现在往前倒3行,比如现在是第四行,往前倒到第一行
  • absolute(int row) - 跳到第row行,当为负数是从最后一行开始数起,比如有500行,absolute(-4)就是第497行

 

  获得数据:

  每个字段的数据都可以用getXXX方法获得,不过指导里面说应该从左往右读,而且每个仅读一次,而且最好用字段索引(从1开始i),因为字段名可以相同,此时只会获得第一个对应的字段。

  注意getINT可以用来读INTEGER,BINARYVARBINARYLONGVARBINARYDATE , TIME, or TIMESTAMP.

 

  更新数据:

  update需要两步:先更新字段,之后在应用到对应的行,此时才会写入到底层的数据源

 

 

插入和删除

  一般来说,既然都用Java写了,绝大多数情况下也无须去写sql来插入删除。所以JDBC可以直接做到这一点。实际上,当你获得了一个ResultSet的时候。就可以插入和删除了。在每个ResultSet里面有一个特别的行叫插入行,你可以把游标移动到这里来猛插数据。。。

   

 

 

预编译语句:

  如果你常用一个语句的话,可以用预编译语句来优化它。这样使得送出的查询无须翻译,直接可以执行。

 

 

 

使用Transactions:

  不知道正规的名称是不是叫事务,反正一个Transactions 就是一组语句,要么都跑完,要么都不跑。

  默认,建立一个连接的时候它是在auto-commit模式下的,也就是自动提交模式,这个时候每个语句被当成一个事务,并且一执行完就自动提交。

 

 

 

  此外,还可以设置一个回滚保存点:

 

 

  一般来说,要rollback通常还是在一个transcations里面遇到了SQLException的时候。

 

 

 

附加:使用批量更新batch updates

  一条一条update效率不比一次发送很多条update语句高(其实也可以是delete和insert),所以有了这个batch update