• Java Web编程的主要组件技术——JDBC


    参考书籍:《J2EE开源编程精要15讲》

    JDBC(Java DataBase Connectivity)是Java Web应用程序开发的最主要API之一。当向数据库查询数据时,Java应用程序先调用JDBC API,然后JDBC API把查询语句提交给JDBC驱动器,JDBC驱动器把查询语句转化为特定数据库理解的形式,JDBC驱动器检索SQL查询的结果,并转化为Java应用程序使用的等价JDBC API类和接口。

    JDBC驱动器

      JDBC软件包本身不能链接任何数据库,它只是一个API框架,需要数据库驱动程序以及其他软件包提供实施方法。

      JDBC数据库驱动程序分为以下几类:

    • JDBC-ODBC桥接驱动器:把JDBC API翻译成ODBC API,适用MS Access、MS SQL Server等数据库
    • 部分本机API的Java驱动器:有些数据库,如DB2和Informix,包含数据库厂商供应的JDBC驱动器,包含可JDBC API可直接调用的类
    • 纯Java驱动器:通过IP/TCP把Java应用程序或applet链接到数据库

      常见数据库驱动器和数据库URL(本地URL)

    数据库名 数据库驱动器 数据库URL(本地)
    Oracle9i  oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@localhost:1521:dbName
    SQL Server 2000 com.microsoft.jdbc.sqlserver.SQLServerDriver jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ddbName;
    MySQL com.mysql.jdbc.Driver jdbc:mysql://localhost/dbName
    JDBC-ODBC sun.jdbc.odbc.JdbcOdbcDriver jdbc:odbc:datasourceName

    JDBC API的核心组件

    • DriverManager类:用于跟踪可用的JDBC驱动程序并生成数据库连接
    • Connection接口:用于取得数据库信息,生成数据库语句,管理数据库事务
    • ResultSet接口:访问SQL查询返回的数据。next()以此定位每一行数据,用相应的get方法读取数据
    • Statement接口:提供在基层连接上运行的SQL语句,生成结果集。有2个子接口,PreparedStatement和CallableStatement   

        PreparedStatement 提供可以与查询信息一起预编译的一种语句类型

      CallableStatement继承自PreparedStatement ,用来封装数据库中存储过程的执行

    用JDBC查询数据库

    • 装载驱动器
    • 连接数据库
    • 查询数据库  

      装载驱动器

        调用Class类的forName()方法装入数据库特定的驱动器,如:装载MySQL的驱动器

          Class.forName("com.mysql.jdbc.Driver");

      连接数据库

        先从DriverManager类生成Connection对象,如

          String url="jdbc:mysql://localhost/mydatabase";

          Connection con=DriverManager.getConnection(url,"Bill","123");

          本地MySQL数据库mydatabase,用户名为Bill,密码为123

      查询数据库

        1) Statement对象:把简单查询语句发送到数据库

          executeQuery()方法执行简单的选择(SELECT)查询,返回ResultSet对象

          executeUpdate()方法执行SQL的INSERT、UPDATE或DELETE语句,返回int值,给出收影响的行数

          如:

            Statement st=con.createStatement();

            ResultSet rs=st.executeQuery("select * from students");

        2) PreparedStatement对象:允许执行参数化的查询

          如:

            String sql="select * from students where stuID=?";

            PreparedStatement ps=con.prepareStatement(sql);

            ps.setString(1,"56789");//设定第一个问号处参数值为56789,类型为String

            ResultSet rs=ps.executeQuery();

        示例:

     1 import java.sql.*;
     2 
     3 class Jdbc Test{
     4     public static void main(String args[]){
     5         try{
     6             Class.forName("com.mysql.jdbc.Driver");
     7             String url="jdbc:mysql://localhost/mydatabase";
     8             Connection con=DriverManager.getConnection(url,"Bill","123");
     9             String sql="select * from students where stuID=?";
    10             PreparedStatement ps=con.prepareStatement(sql);
    11             ps.setString(1,"56789");
    12             ResultSet rs=ps.executeQuery();
    13             while(rs.next()){
    14                 String name=rs.getString("student_name");
    15             }
    16             rs.close();
    17             con.close();
    18         }catch(SQLException e){
    19             e.printStackTrace();
    20         }
    21     }
    22 }
    View Code

        

      

  • 相关阅读:
    还零钱
    递归与动态规划II-汉诺塔
    leetcode 95. Unique Binary Search Trees II
    技术实力详解
    正反向路由
    usermod命令、用户密码管理、mkpasswd命令
    作为阿里的面试官,我有话想说。
    [招聘] 阿里巴巴-淘系技术部,长期内推,专人跟进。
    Vue源码翻译之渲染逻辑链
    Vue源码翻译之组件初始化。
  • 原文地址:https://www.cnblogs.com/cqq626/p/4319891.html
Copyright © 2020-2023  润新知