zoukankan      html  css  js  c++  java
  • 20145231第九周学习笔记

    20145231 《Java程序设计》第九周学习总结

    教材学习内容总结

    第十六章:整合数据库

    JDBC简介

    •JDBC全名Java DataBase Connection,是Java联机数据库的标准规范,它定义一组标准类与接口,应用程序需要联机数据库时调用这组标准API,而标准API中的接口会由数据库厂商操作,通常称为JDBC驱动程序;如图:

    •JDBC标准分为两个部分:JDBC应用程序开发接口者以及JDBC驱动程序开发者接口;

    •JDBC应用程序开发接口相关API主要在java.sql与javax.sql两个包中;

    •更换数据库时,应用程序无需进行修改,只需要更换数据库驱动程序成果,即可对另一个数据库进行操作;

    连接数据库

    步骤如下

    一、 注册Driver对象;

    在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方法forName(String className)实现。

    
    try{   
    //加载MySql的驱动类   
    Class.forName("com.mysql.jdbc.Driver") ;   
    }catch(ClassNotFoundException e){   
    System.out.println("找不到驱动程序类 ,加载驱动失败!");   
    e.printStackTrace() ;   
    }   
    
    

    成功加载后,会将Driver类的实例注册到DriverManager类中。

    提供JDBC连接的URL:

    
    //例如:(MySql的连接URL)   
    jdbc:mysql:   
    //localhost:3306/test?useUnicode=true&characterEncoding=gbk ;   
    useUnicode=true:表示使用Unicode字符集。如果characterEncoding设置为   
    gb2312或GBK,本参数必须设置为true 。characterEncoding=gbk:字符编码方式。 
    
    

    二、 取得Connection操作对象;

    要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象, 该对象就代表一个数据库的连接。

    使用DriverManager的getConnectin(String url , String username ,String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和 密码来获得。

    
    //连接MySql数据库,用户名和密码都是root   
     String url = "jdbc:mysql://localhost:3306/test" ;    
     String username = "root" ;   
     String password = "root" ;   
     try{   
    Connection con =    
             DriverManager.getConnection(url , username , password ) ;   
     }catch(SQLException se){   
    System.out.println("数据库连接失败!");   
    se.printStackTrace() ;   
     }  
    
    

    要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3种类型:

    *执行静态SQL语句。通常通过Statement实例实现。 *
    *执行动态SQL语句。通常通过PreparedStatement实例实现。 *
    *执行数据库存储过程。通常通过CallableStatement实例实现。 *

    ·具体的实现方式:

    
     Statement stmt = con.createStatement() ;   
       PreparedStatement pstmt = con.prepareStatement(sql) ;   
       CallableStatement cstmt =    
                            con.prepareCall("{CALL demoSp(? , ?)}") ;  
    
    

    处理结果有两种情况:
    1.执行更新返回的是本次操作影响到的记录数。 2.执行查询返回的结果是一个ResultSet对象。

    三、 关闭Connection操作对象;

    操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:

    1.关闭记录集
    2.关闭声明
    3.关闭连接对象

    
      if(rs != null){   // 关闭记录集   
        try{   
            rs.close() ;   
        }catch(SQLException e){   
            e.printStackTrace() ;   
        }   
          }   
          if(stmt != null){   // 关闭声明   
        try{   
            stmt.close() ;   
        }catch(SQLException e){   
            e.printStackTrace() ;   
        }   
          }   
          if(conn != null){  // 关闭连接对象   
         try{   
            conn.close() ;   
         }catch(SQLException e){   
            e.printStackTrace() ;   
         }   
       }  
    
    

    使用Statement、ResultSet

    •要执行SQL,必须取得java.sql.Statement操作对象,可以使用Connection的createStatement()来建立Statement对象,然后使用executeUpdate()、executeQuery()等方法来执行SQL;

    具体实现代码:

     ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;   
    int rows = stmt.executeUpdate("INSERT INTO ...") ;   
    boolean flag = stmt.execute(String sql) ;   
    
    

    使用PreparedStatement、CallableStatement

    •要让SQL执行生效,要执行executeUpdate()或executeQuery()方法,在此次SQL执行完毕后,调用clearParemeters()清除设置的参数,就可以再次调用PreparedStatement实例;

    JDBC进阶

    •DriverManager类讲解

    Jdbc程序中的DriverManager用于加载驱动,并创建与数据库的链接,这个API的常用方法:
    DriverManager.registerDriver(new Driver()) DriverManager.getConnection(url, user, password)  

    •注意:在实际开发中并不推荐采用registerDriver方法注册驱动。原因有二:

     
    1.查看Driver的源代码可以看到,如果采用此种方式,会导致驱动程序注册两次,也就是在内存中会有两个Driver对象。
    2.程序依赖mysql的api,脱离mysql的jar包,程序将无法编译,将来程序切换底层数据库将会非常麻烦。
    
    

    •推荐方式:Class.forName("com.mysql.jdbc.Driver");

    采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要依赖具体的驱动,使程序的灵活性更高。

    •Connection类讲解

    JDBC程序中的Connection,它用于代表数据库的链接,Collection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成的,这个对象的常用方法:

    ·createStatement():创建向数据库发送sql的statement对象。

    ·prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。

    ·prepareCall(sql):创建执行存储过程的callableStatement对象。

    ·setAutoCommit(boolean autoCommit):设置事务是否自动提交。

    ·commit() :在链接上提交事务。

    ·rollback() :在此链接上回滚事务。

    •ResultSet类卷动、更新数据

    JDBC程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
    ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:

    1.获取任意类型的数据
    getObject(int index)

    getObject(string columnName)  

    2.获取指定类型的数据,例如:

    getString(int index)

    getString(String columnName)

    3.ResultSet还提供了对结果集进行滚动的方法:

    next():移动到下一行

    Previous():移动到前一行

    absolute(int row):移动到指定行

    beforeFirst():移动resultSet的最前面。

    afterLast() :移动到resultSet的最后面。

    教材中遇到的问题及解决方法

    对于JDBC数据库的使用有了一定了解,但是对于其的实际意义还不太明确。

    其他(感悟、思考等,可选)

    通过本周学习了解了JDBC连接数据库的使用。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 200/200 2/2 20/20
    第二周 300/500 2/4 21/41
    第三周 450/950 3/7 22/63
    第四周 450/1365 2/9 20/83
    第五周 450/1815 2/11 20/113
    第六周 450/2315 2/13 20/133
    第七周 300/2615 2/15 15/148
    第八周 300/2915 2/17 15/163
    第九周 200/3115 2/19 10/173 了解了JDBC

    参考资料

  • 相关阅读:
    【设计模式】3、工厂方法模式
    【设计模式】2、生成器模式(建造者模式)
    【设计模式】1、抽象工厂模式
    UNION 和UNION ALL
    树的遍历
    相关前台跨域的解决方式
    有关this指针指向问题
    有关箭头函数
    深入理解js的变量提升和函数提升
    linux tail 命令详解
  • 原文地址:https://www.cnblogs.com/xzh20145231/p/5451290.html
Copyright © 2011-2022 走看看