zoukankan      html  css  js  c++  java
  • JDBC API访问数据库的基本步骤。

    JDBC本质:官方定义了一套操作所有关系型数据库的规则(接口),各个数据库厂商实现这个接口,提供数据库驱动jar包。

      我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。

    任何一个Java应用程序使用JDBC API访问数据库,其基本工作可以分为5个步骤:

    (1)加载JDBC驱动程序;

    (2)建立数据库连接;

    (3)创建操作数据库SQL的Statement、PreparedStatement或CallableStatement对象;

    (4)执行语句并分析执行结果;

    (5)关闭连接。

    1、加载JDBC驱动程序

        利用Class类的方法forName(String driverName)加载JDBC驱动,不同的数据库的JDBC驱动名称不同,MySql的驱动类名为com.mysql.jdbc.Driver。

    Class forName("com.mysql.jdbc.Driver");
    
        //注意:
          //在Java Web应用开发中,如果要访问数据库,首先应将加载数据库的JDBC驱动程序(jar包)复制到Web应用程序的WEB-INFlib 目录下,这样Web应用程序才能正常地通过JDBC接口访问数据库。

    2、建立数据库的连接

        利用DriverManager类的方法getConnection()获得与特定数据库的连接实例(Connection实例)。例如创建一个连接的本地MySQL数据库userdb Connection对象,假设该数据库的用户名为root、密码为passwd,代码如下:

        //第一种方式:
          String url = "jdbc:mysql://localhost:3306/userdb?user = root & password = passwd";       Connection con = DriverManager.getConnection(url);     //第二种方式:
          private static final String url = "jdbc:mysql://localhost:3306/userdb";       private static final String user = "root";       private static final String password = "111111";       protected static Connection con = null;       con = DriverManager.getConnection(url , user , password);

    3、进行数据库操作

        对数据库的操作依赖于SQL语句,JDBC依据SQL语句的类型不同提供了三种执行SQL的对象,即Statement,PreparedStatement和CallableStatement。

        1)Statement对象执行静态SQL语句

        Statement对象用于执行不含参数的静态SQL语句,JDBC利用Connection实例的createStatement()方法创建一个Statement实例,通过Statement实例的execute()方法(不常用)、executeQuerry()方法(select)或者executeUpdate()方法(insert、update或 delete)等执行SQL语句。例如查询数据   表tb_users中的所有记录:

      //创建Statement对象,其中con为Connection对象
        Statement statement = con.createStatement();   
      //使用executeQuery()方法执行SELECT语句,该方法的返回值为ResultSet类型  
       ResultSet rs = statement.executeQuerry(select*fron tb_users);

        再如,删除数据表tb_users中的fd_username 为Allen的记录:

      //创建Statement对象,其中con为Connection对象
        Statement statement = con.createStatement();
      
    //使用executeUpdate()方法执行INSERT、UPDATE、DELETE等SQL语句,返回 int 类型
       int result = 0;      result = statement.executeUpdate("delete from tb_users where fd_username = 'Allen' ");

        2)PreparedStatement 执行动态SQL语句

        PreparedStatement用于执行含有动态的SQL语句,动态SQL语句是指在程序运行时能动态地为SQL语句的参数赋值,增加了程序的灵活性。PreparedStatement 对象由Connection 实例的 preparedStatement(String sql)方法构建。

          PreparedStatement 接口也有executeQuery()和executeUpdate()方法,但这两个方法都不带参数。该接口提供了setXxx(int paramIndex , xxx  var)方法为动态的SQL语句中的参数赋值。这里仍以上面的SQL操作为例说明PreparedStatement 对象     的创建和相关方法的使用。

      // 声明动态SQL ,参数使用?占位符表示
        String sqlSelect = "select * from tb_users where fd_username = ?";
      
    //创建PreparedStatement 对象psQuery,其中con为Connection对象     PreparedStatement PSQuery = con. preparedStatement(sqlSelect);
      
    /*为动态SQL语句中的参数赋值,由于fd_username为Sting类型,故使用setString()方法为参数赋值,1代表动态SQL语句中的第一个问题(第一个问号处值)*/     psQuery.setString(1,"Allen");
        String sqlDelete = "delete from tb_users where fd_username = ?";
    //创建PreparedStatement 对象 psUpdate ,其中con为Connection对象    PreparedStatement psUpdate = con.preparedStatement(sqlDelete);
      
    //使用executeUpdate()方法执行INSERT、UPDATE、DELETE等SQL语句,这里列举的是 删除
      ResultSet result = psUpdate.executeUpdate();
    
    

    4、对执行结果进行分析处理

        1)分析查询结果集 ResultSet

        在执行SELECT语句后必然产生一个ResultSet结果集实例,对结果集进行分析与处理是应用程序的最终目标,可以使用循环遍历结果集中的每一行记录,使用getXxx()方法获取遍历记录行指定列的数据。

      //查询tb_users表中记录的用户名和性别
        ResultSet rs = statement.executeQuerry("select fd_username , fd_gender from tb_users");
      //使用next() 方法判断结果集是否有下一行,从而遍历结果集中的所有记录行
        while(rs.next()){
        //获取遍历记录行中列名fd_username的对应值
          String username = rs.getString("fd_username");
        //获取遍历记录行中第二列的对应值
          String gender = rs.getString(2);
          System.out.println("用户名:"+ username + ",性别:"+ gender);

        2)分析执行结果

        对于INSERT、UPDATE、DELETE甚至是SQL DLL语句,一般由executeUpdate()方法执行且返回值为int 类型,表示受影响的记录行数,如返回值大于0表示该SQL语句成功执行。

        int result = 0;
        String sql = "delete from tb_users where fd_username = 'Allen' ";
      // execteUpdate()方法执行INSERT、UPDATE、DELETE等SQL语句,返回int类型
        result = statement.executeUpdate(sql);
      //分析执行结果
        if(result > 0){
            System.out.println("删除成功!");
        else
            System.out.println("删除失败!");

    5、关闭JDBC相关对象

    应用程序在对数据库操作完成以后,要把使用的所有JDBC对象全部关闭,以释放JDBC资源,关闭顺序和声明顺序正好相反。

    (1)关闭结果集ResultSet 对象;

    (2)关闭Statement、PreparedStatement对象;

    (3)关闭连接对象

    //关闭结果集rs
    if (rs != null){
      try {
           rs.close();
         } catch (SQLException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
         }
    }
    //关闭Statement对象statement
    if (statement!= null) {
        try {
           statement.close();
         } catch (SQLException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
         }
     }
    //关闭连接对象 con
    if (con!= null) {
        try {
           con.close();
         } catch (SQLException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
         }
    }

      Java应用程序用过JDBC操作5个基本步骤。首先加载JDBC驱动,使用DriverManage对象创建Connection实例与制定的数据库建立连接;

    然后使用Connection实例的createStatement()方法创建Statement实例(也可以创建PreparedStatement和CallableStatement对象),

    并利用Statement实例的executeQuery()方法执行INSERT、UPDATE、DELETE等语句,并通过分析与处理执行结果实现应用程序的具体功能,

    最后务必关闭与数据库之间的连接。

  • 相关阅读:
    CPP Info Memo part3
    在Google搜索结果显示原始链接(转自 月光博客)
    libc 之 locales
    Git 分支管理与本地 repository 创建
    py2exe issue: ImportError: No module named _fontdata_enc_winansi (http://stackoverflow.com/)
    CPP Info Memo (Part 1)
    CPP Info Memo part2
    HOWTO: Increase write speed by 'aligning' FAT32(通过对齐 FAT32 提高U盘访问速度, 转载)
    (转载)Gentoo中文man乱码
    如何选择开源许可证?(转载)
  • 原文地址:https://www.cnblogs.com/qzhc/p/11190942.html
Copyright © 2011-2022 走看看