【04】JDBC

1. JDBC

  • JDBC ( Java Database Connectivity ) Java数据库连接;

  • Oracle(Sun)提供的Java访问数据库的规范;

  • 优点:

    • 执行效率高:直接把JDBC调用转换为符合相关数据库系统规范的请求,没有中间转换,效率高。
    • 跨平台:这种类型的驱动完全由JAVA实现,因此实现了平台独立性。
  • 缺点:

    • 连接每一种数据库需要提供针对特定数据库的连接驱动;
      Oracle11g,Oracle10g,Oracle9i,MySQL5.5,MySQL5.7,……
      在这里插入图片描述

2. JDBC操作步骤

2.1 注册驱动

2.2 根据驱动创建连接

  • Oracle

     Class.forName("oracle.jdbc.driver.OracleDriver");//oracle数据库驱动类的完全限定类名
     String url = "jdbc:oracle:thin:@localhost:1521:orcl";//orcl为数据库实例名
     Connection conn = DriverManager.getConnection(url, "test ", " test123456 ");//url,数据库用户名及密码
    
  • MySQL

     Class.forName("com.mysql.jdbc.Driver");//MySQL数据库驱动类的完全限定类名
     String url = "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8";//test为数据库名
     Connection conn = DriverManager.getConnection(url, "test ", " test123456 ");//url,数据库用户名及密码
    

2.3 根据连接创建语句的执行者

2.4 语句的执行者发送sql语句

2.5 处理结果集

2.6 释放资源

3. JDBC API中的类和接口

  • Driver接口:数据库驱动接口。
  • DriverManager类:管理各种驱动的类。
  • Connection接口:对连接进行管理。
  • Statement接口:对数据库进行操作。
  • PreparedStatement接口:对预编译的SQL语句进行处理。
  • CallableStatement接口:执行数据库存储过程。
  • ResultSet接口:数据库结果集。
  • DatabaseMetadata接口:数据库的整体综合信息,由驱动程序供应商实现。
  • ResultSetMetadata接口:用于获取关于 ResultSet 对象中列的类型和属性信息。
  • Types类:用于标识SQL 中数据的类型。

4. DriverManager类

  • 驱动管理类

  • java.sql包

  • 常用方法 – getConnection()

     public static Connection getConnection(String url,
              String user,
              String password)
              throws SQLException
     试图建立到给定数据库 URL 的连接。DriverManager 试图从已注册的 JDBC 驱动程序集中选择一个适当的驱动程序。 
     参数:
     	url - jdbc:subprotocol:subname 形式的数据库 url
     	user - 数据库用户,连接是为该用户建立的
     	password - 用户的密码 
     返回:
     	到 URL 的连接 
     抛出: 
     	SQLException - 如果发生数据库访问错误
    

5. Connection接口

  • 数据库连接对象

  • java.sql包

  • 常用方法 – createStatement()

     Statement createStatement() throws SQLException
     创建一个 Statement 对象来将 SQL 语句发送到数据库。
    
  • 常用方法 – prepareStatement ()

     PreparedStatement prepareStatement(String sql)throws SQLException
     创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。
    
  • 常用方法 – close()

     void close() throws SQLException
     立即释放此 Connection对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作。
    

6. Statement接口

  • java.sql包

  • 对数据库进行操作CURD。

  • 操作方向

      SQL语句和请求参数由客户端提交到服务器上;
      执行结果由服务器返回到客户端;
    
  • 常用方法 – execute(String sql)

     boolean execute(String sql) throws SQLException
     执行给定的 SQL 语句,该语句可能返回多个结果。执行所有的SQL语句,返回值是boolean类型,表示执行的SQL是否有结果。
    
  • 常用方法 – executeUpdate(String sql)

     int executeUpdate(String sql) throws SQLException
     执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句,或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)。
     返回的是影响行数,是一个整数。
    
  • 常用方法 – executeQuery(String sql)

     ResultSet executeQuery(String sql) throws SQLException
     执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。SELECT操作。
    
  • 常用方法 – close()

     void close() throws SQLException
     立即释放此 Statement对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作。
    

7. ResultSet接口

  • java.sql包

  • 结果集
    表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。 是一张二维表格(行、列)。

  • 游标
    ResultSet 对象具有指向其当前数据行的光标(游标)。光标位置从1开始,可以移动光标位置。

    • 移动的方法(了解)

       void beforeFirst():把光标放到第一行的前面,这也是光标默认的位置;
       void afterLast():把光标放到最后一行的后面;
       boolean first():把光标放到第一行的位置上,返回值表示调控光标是否成功;
       boolean last():把光标放到最后一行的位置上;
       boolean previous():把光标向上挪一行;
       boolean next():把光标向下挪一行;
       boolean relative(int row):相对位移,当row为正数时,表示向下移动row行,为负数时表示向上移动row行;
       boolean absolute(int row):绝对位移,把光标移动到指定的行上;

    • 判断游标位置的方法(了解)

       boolean isBeforeFirst():当前光标位置是否在第一行前面;
       boolean isAfterLast():当前光标位置是否在最后一行的后面;
       boolean isFirst():当前光标位置是否在第一行上;
       boolean isLast():当前光标位置是否在最后一行上;
       int getRow():返回当前光标所在位置;

    • 获取当前结果集的总行数(了解)
       先执行rs.last();把光标移动到最后一行,在执行rs.getRow();获得当前光标所在行,可以得到结果集一共有多少行。

    • 获取结果集的总列数(了解)
       先获取结果集的元数据 ResultSetMetaData rsmd = rs.getMetaData();
       获取结果集列数:int len = rsmd.getColumnCount();
       获取指定列的列名:String name = rsmd.getColumnName(int colIndex);

            /**
            * 动态获取结果
            */
            rs = stmt.executeQuery(sql);
            //获得列数
            int len = rs.getMetaData().getColumnCount();
            while(rs.next()){//遍历行
            //遍历列
            for (int i = 0; i < len; i++) {
            	System.out.print(rs.getString(i));
            	if(i<len){
            	    	System.out.print(",");
            	}
            }
            System.out.println("");//换行
            }
      
  • 常用方法 – next()

     boolean next() throws SQLException
     将光标从当前位置向前移一行(前进)。
    
  • 常用获得ResultSet中列的值的方法 – getXXX()

     String getString(int columnIndex)  throws  SQLException
     String getString(String columnName)  throws  SQLException
     String getInt(int columnIndex)  throws  SQLException
     String getInt(String columnName)  throws  SQLException
     String getBoolean(int columnIndex)  throws  SQLException
     String getBoolean(String columnName)  throws  SQLException
     String getDate(int columnIndex)  throws  SQLException
     String getDate(String columnName)  throws  SQLException
     String getDouble(int columnIndex)  throws  SQLException
     String getDouble (String columnName)  throws  SQLException
     。。。。。。
     参数可以写列名、列的别名、列的编号(编号从1开始)
    
  • 常用方法 – close()

     void close() throws SQLException
     立即释放此 ResultSet 对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作。
    

猜你喜欢

转载自blog.csdn.net/Spectre_win/article/details/88644185
04