JDBC学习之二:JDBC处理DML语句1(重点)

这里写一个典型的JDBC程序,往后写的JDBC程序的步骤基本上和这里的一样:

(仔细观察会发现,似乎所有的对象都是通过调用方法生成的,没有一个new关键字,这也是我们生成驱动对象时不使用new oracle.jdbc.driver.OracleDriver的原因,为了方便统一)

 

//这是一个JDBC处理有返回值的sql语句的典型例子

import java.sql.* ;  //第一步,导入java中的sql.*包(实际是第二步,第一步引入外部包)

 

public class JdbcTest1 {

    public static void main(String[] args) {

       Connection conn = null;    //为什么要定义在这里呢?因为如果在使用时才定义的话将造成finally中找不到这些引用变量

       Statement stmt = null;

       ResultSet rs = null;

       try{

           Class.forName("oracle.jdbc.driver.OracleDriver"); //第二步,生成驱动对象,并且自动向DriverManager注册

           conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.1:1521:SXT", "scott","tiger");   //第三步,和数据库建立连接

           stmt = conn.createStatement();   //一般的,要执行SQL语句之前的必要操作

           rs = stmt.executeQuery("select * from dept");  //返回对应的执行结果。execute译作执行,query译作查询,即执行查询语句

           //上面不结果返回给结果集合ResultSetrs就像一个游标,但和数据库中的游标不同,在数据库中游标是指向第一条记录的,

           //而程序中的游标是指向第一条记录的上面的,就像以前学过的迭代器。

           while(rs.next()) {

              String s1 = rs.getString("deptno");   //getString方法表示把结果以字符串的形式读取出来,参数是一个字段,表示把该字段中的记录(数据)以字符串的形式拿出来

              System.out.println(s1);

              int i = rs.getInt("deptno"); //把字段对应的数据以数值的形式拿出来

              System.out.println(i);

              //当然,只要可以转换,我们可以把结果以各种各样的形式拿出来

           }

       }

      

       catch(ClassNotFoundException e){

           System.out.println("找不到驱动类!");   //学过建立日志之后我们应该把异常记录到日志里面,LOG

       }

      

       catch(SQLException e) {  //调用sql包中的类的方法,可能会抛出该异常

           e.printStackTrace();

       }

 

       //连接就像我们之前学过的流,好比管道一样,使用完了之后不要忘了关闭

       //后打开的先关闭

       finally{

           try{     //因为这里调用close方法,也可能出现异常,所以要用try-catch

              if(rs != null){      //只有非空的引用才能调用方法,这样做是为了避免产生新的异常

                  rs.close();  

                  rs = null;       //结束对一个引用的使用后,应该使之指向空,方便回收器进行回收

              }

              if(stmt != null) {

                  stmt.close();

                  stmt = null;

              }

              if(conn != null) {

                  conn.close();

                  conn = null;

              }

           } catch(SQLException e) {

                  e.printStackTrace();

              }

       }

    }

}

 

/*

    思考:为什么我们要处理抛出的异常而不直接抛出去呢?

    因为如果直接抛出异常的话,程序运行时一旦某个位置出现异常,异常后面的程序块不在执行,

    那么我们的连接将无法关闭,日积月累,将占用大量的内存,最后导致整个系统崩溃,

    这也是要求我们有能处理的异常一定要处理的原因!

 

 

    总结: 要学会随时随地处理任何可能出现的异常和避免异常的产生,在使用引用时更要小心仔细,尽量追求完美!

*/

 

 

各种数据库的连接串:

转载于:https://my.oschina.net/u/223398/blog/55409

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值