24.Java核心技术—JDBC

1.Jdbc是Java平台访问数据库的唯一底层API,先看看几个典型的数据库连接方法,如mckoi、postgresql,mysql,oracle等数据库。

2.在连接数据库时,先要指定数据源url和驱动drivers,以及连接数据库用的用户名user和密码password,

   如对于mckoi:drivers=com.mckoi.JDBCDriver         url=jdbc:mckoi://localhost/ 

    postgresql:  drivers=org.postgresql.Driver           url=jdbc:postgresql:COREJAVA

           mysql:  drivers=com.mysql.jdbc.Driver          url=jdbc:mysql://localhost:3306/databasename

           oracle:   drivers=oracle.jdbc.driver.OracleDriver  url=jdbc:oracle:thin:@localhost:1521:databasename

 

3.连接数据库时用的相关类和接口:DriverManager类是个工具类,帮助管理驱动,得到一个Connection对象。Connection接口代表数据库连接,可以把它看成是一个数据库。Statement接口,代表数据库的操作对象。ResultSet接口,代表查询结果。类和接口的使用方法如下:

   Connection con=DriverManager.getConnection(url,user,password);

   Statement sta=con.createStatement();

   ResultSet rs=sta.executeQuery(sql);//执行select查询时使用的方法。

   int count=sta.executeUpdate(sql)//执行insert、update、delete或DLL的语句(create table).返回受影响的记录总数。

   boolean b=sta.execute(sql)//执行任何的sql语句,该语句如果返回一个结果集则返回true,这个方法既可以查询也可以更新。调用这个方法后,我们可以通过调

   用sta.getResultSet和getUpdateCount()方法得到语句的执行结果。

 

4.我们要注意在连接数据库的时候,不能直接获得Connection对象,而是首先要先进行驱动加载。如Class.forName(drivers)或通过命令行参数的方式设置,即

   java -Djdbc.drivers=com.mysql.jdbc.Driver

 

5. 使用Connection、Statement、ResultSet接口的时候要注意,每个Connection对象都可以创建一个或一个以上Statement对象,同一个Statement对象可以

    用于多个不相关的命令和查询,但是一个Statement对象最多只能打开一个结果集。如果需要执行多个查询操作,且需要同时分析查询结果,那么必须要创建多个

    Statement对象。最后使用完这些对象后要调用close关 闭。

6. 预备语句,PreparedStatement接口,它的意思就是对sql语句进行预处理,当我们要进行查询操作的时候,我们在对sql语句里的宿主变量赋值。如

    String sql="select id,name age from Student where id=?",当我们要进行查询操作的时候,就给id一个值。而Statement每进行一次操作就要重写sql语句。

 

7.可滚动结果集和可更新结果集:可滚动结果集就是说对我们得到的结果集可以上下移动,可以得到结果集任何位置的值;可更新结果集,就是说如果结果集的值更新了

   那么它可以自动的把更新的值存储到数据库中,不需要进行相应的操作来存储,反之亦然。

   得可滚动和可更新结果集的方法:Statemet sta=con.createStatement(type,concurrency)

   获得预备语句:PreparedStatement ps=con.prepareStatement(sql,type,concurrency),其中type表示是否可滚动,concurrency表示是否可更新。

   type有TYPE_FORWARD_ONLY(结果集不能滚动)、TYPE_SCROLL_INSENSITIVE(可滚动,但对数据库变化不敏感)、

         TYPE_SCROLL_SENSITIVE(可滚动,但对数据库变化不敏感)三个值。

   concurrency有COUCUR_READ_ONLY(不可更新)、CONCUR_UPDATEBLE(可更新)两个值。

 

8.事物:将一组数据库操作变成原子操作。我们在进行jdbc的时候,如果要用到事物,首先要关闭自定提交机制,con.setAutoCommit(false);如果所有的数据库操作

           都成功了,就手动提交。con.commit();如果有一个操作失败,就要回滚开始的时候,con.rollback()。当然,如果操作都成功我们也可以回滚。

 

   1)保存点:它可以更好的控制回滚操作。创建一个保存点意味着稍后只需返回到这个点,而非事物的开头。

       Statement stat=conn.createStatement();

       stat.executeUpdate(command1);

       Savepoint svpt=conn.setSavepoint();//设置保存点,回滚的时候,只返回到这里

       stat.executeUpdate(command2);

       if(....)conn.rollback(svpt);

       .....

       conn.commit();

   2)批量更新:实例如下

        Statement:Statement stat=conn.createStatement();

                         String command="create table...";

                         stat.addBatch(command);

                         while(...){command="insert into ...values ("+...+")";  stat.addBatch(command);}

                         int[] counts=stat.executeBatch();

 

        PreparedStatement :       PreparedStatement ps=con.prepareStatement(sql);

                                            while(.....){

                                               s.setXXX(1,XXX);
                                               ps.setXXX(2,XXX);
                                               ps.addBatch();}
                                            ps.executeBatch();

      

 

 

 

 

 

 

 

posted on 2012-04-28 14:53  ssy黑桃a  阅读(500)  评论(0编辑  收藏  举报