分享

java_JDBC编程

 怀旧妞妞 2010-10-18

JDBC编程的基本步骤是设置数据源、加载JDBC驱动器程序、指定数据库、打开数据库连接、提交查询、处理查询结果等。

1.statement对象

private Map getsysIdAndNameMap(ConnectionManager cm){
  Connection conn = this.initNewConn(cm);
  Map<String,Long> map = new HashMap<String,Long>();
  ResultSet rs = null;
  Statement statement = null;
  try {
   String sql = "select t.sid,t.name from systeminfo t";
   statement = conn.createStatement();
   rs = statement.executeQuery(sql);
   while(rs.next()){
    Long id = rs.getLong("sid");
    String name = rs.getString("name");
    map.put(name, id);
   }
  } catch (Exception e) {
   System.out.println("获取new系统表ID,名称键值对--SQL执行异常");
  }finally{
   try {
    rs.close();
    statement.close();
    conn.close();
   } catch (SQLException e) {
    System.out.println("获取new系统表ID,名称键值对--关闭数据库连接异常");
   }
   
  }
  return map;
 }
 

2:PreparedStatement

2.1.使用PreparedStatement进行预编译操作

在前面已经学过,Statement是一个实现Statement接口的类的对象,用于将SQL语句发送到数据库中。当一个Statement对象被创建时,它提供了一个创建SQL查询、执行该查询和检索返回结果的作用。

2.2.  PreparedStatement简介

PreparedStatement接口继承自Statement,与Statement相比,PreparedStatement增加了在执行SQL调用之前,将输入参数绑定到SQL调用中的功能。它用于执行带或不带输入参数的预编译SQL语句。因为PreparedStatement对象已编译过,所以执行速度要快于Statement对象。因此当需要多次调用一条SQL语句时,可以考虑使用PreparedStatement接口。

PreparedStatement接口继承了Statement的所有方法,同时还增加了一些方法,还更改了以下3个很重要的方法。

setXXX()

executeQuery()

executeUpdate()

其中setXXX()方法中的XXX指的是该参数对应的类型。例如参数是String类型,则方法为setString()。setXXX()方法有两个参数,第1个参数是指要设置参数的位置,第2个是指要设置的具体值。还以开始时举的例子为例:

如果基本数据库和驱动程序在语句提交之后仍保持这些语句的打开状态,则同一个 PreparedStatement可执行多次。如果这一点不成立,那么试图通过使用PreparedStatement 对象代替Statement对象来提高性能是没有意义的。

2.3.使用示例

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//打开数据库连接,aaa为数据源名称
Connection con=DriverManager.getConnection("jdbc:odbc:aaa","","");
//提交查询 
PreparedStatement ps=
con.prepareStatement("select * from emp where dal>?");
ps.setString(1,"2000");
ResultSet rs=ps.executeQuery();
//查看结果
System.out.println("empno\tempname\tjob\thiredate\tdal");
while(rs.next())

3:ResultSet 对象

ResultSet rs = stmt.executeQuery("select distinct logid from stat_data");
  rs.last(); //结果集指针知道最后一行数据
  int n = rs.getRow();
  System.out.println(n);
  rs.beforeFirst();//将结果集指针指回到开始位置,这样才能通过while获取rs中的数据
  while(rs.next()){
   System.out.println(rs.getInt(1));
  }
 }

4事务操作:

1.  概述:

在jdbc的数据库操作中,一项事务是由一条或是多条表达式所组成的一个不可分割的工作单元。我们通过提交commit()或是回滚rollback()来结束事务的操作。关于事务操作的方法都位于接口java.sql.Connection中。

2.  特点:
★ 在jdbc中,事务操作缺省是自动提交。也就是说,一条对数据库的更新表达式代表一项事务操作,操作成功后,系统将自动调用commit()来提交,否则将调用rollback()来回滚。
★ 在jdbc中,可以通过调用setAutoCommit(false)来禁止自动提交。之后就可以把多个数据库操作的表达式作为一个事务,在操作完成后调用commit()来进行整体提交,倘若其中一个表达式操作失败,都不会执行到commit(),并且将产生响应的异常;此时就可以在异常捕获时调用rollback()进行回滚。这样做可以保持多次更新操作后,相关数据的一致性,示例如下:

    try {

conn =

DriverManager.getConnection   

(jdbc:oracle:thin:@host:1521:SID,username,userpwd;

       conn.setAutoCommit(false);//禁止自动提交,设置回滚点

       stmt = conn.createStatement();

stmt.executeUpdate(“alter table …”); //数据库更新操作1

stmt.executeUpdate(“insert into table …”); //数据库更新操作2

       conn.commit(); //事务提交

     }catch(Exception ex) {   

         ex.printStackTrace();

         try {

          conn.rollback(); //操作不成功则回滚

          }catch(Exception e) {

e.printStackTrace();

           }

}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多