动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

求知JDBC的实际操作过程

06-20 18:39 343浏览
举报 T字号
  • 大字
  • 中字
  • 小字

DBC是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成.JDBC提供了一种基准,据此可以构建更高级的工具和接口,毫无疑问JDBC是连接java应用程序和数据库之间的桥梁。它使数据库开发人员能够编写数据库应用程序,JDBC实现了所有这些面向标准的目标并且具有简单,严格类型定义且高性能实现的接口。接下来介绍一下JDBC的实际操作过程

JDBC主要包括一个类和三个核心接口

1.DriverManager类:驱动管理类,用于管理所有注册的驱动。(针对不同的数据库调用不同的驱动)它是JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库的驱动程序之间建立连接.此外,DriverManager类中的方法都是静态方法,所以在程序中无须对它进行实例化,直接通过类名就可以用.DriverManager类的常用方法有getConnection(String url,String user,String password)方法

2.Connection接口:代表与数据库之间的连接。要对数据库表进行操作,首先要与数据库建立来连接。就好像在应用程序和数据库之间建立一条连接的路径,通过DriverManager类的getConnection()方法可获取Connection实例。创建方法为:

Connection conn = DriverManager.getConnection(url,user,pass);

这个对象的常用方法:

 

 

 

3.PreparedStatement:预处理并执行sql语句支持预编译,在创建PreparedStatement对象的时候将sql语句传递给数据库做预编译,以后每次执行sql语句时,效率会提高很多。  PreperedStatement是Statement的孩子,它的实例对象可以通过调用:

    PreperedStatement st =  conn.preparedStatement()

Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。PreparedStatement 可对SQL进行预编译,从而提高数据库的执行效率。

并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。

4.ResultSet:用于接收数据库所有查询记录,并使用ResultSet显示内容。

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

5.遍历结果集:

 

public List getAllPet() {

        //创建一个集合对象

        List pets=new ArrayList<>();

        //声明一个宠物对象

        Pet pet=null;

        //sql语句

        String sql="SELECT `id`,`name`,`typename`,`health`,`love`,`birthday`,`price`,`owner_id`,`store_id`,`type` FROM pet";

        //参数集

        Object[] params={};

        //对sql语句和参数进行处理,执行的结果存放在res中

        res=super.executeSelect(sql, params);

        try {

        /*

         res.next使用res对象读取记录中的内容,有两个动作,

         1、数据库指针指向下一条记录;

         2、如果没有返回false,自然循环退出;如果有记录,完成第二个动作,把记录内容存入res中,并返回true.

         */

 

            while(res.next()){

                pet=new Pet();//创建宠物对象

                //getInt是以Int类型取出res里的此列数据

                pet.setId(res.getInt("id"));

                pet.setName(res.getString("name"));

                pet.setTypename(res.getString("typename"));

                pet.setHealth(res.getInt("health"));

                pet.setLove(res.getInt("love"));

                pet.setBirthday(res.getDate("birthday"));

                pet.setPrice(res.getInt("price"));

                pet.setOwner_id(res.getInt("owner_id"));

                pet.setStore_id(res.getInt("store_id"));

                pet.setType(res.getInt("type"));

                pets.add(pet);

            }

        } catch (SQLException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

 

        return pets;

    }

具体实现代码如下:

 

package jdbc;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

 

/**

 * 数据库操作基础类

 *

 * @author AAA

 *

 */

public class BaseDao {

    // 创建4个常量(数据库连接地址,数据库驱动类地址,数据库登录权限名,登录密码)

    //数据库驱动类地址

    private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";

    //数据库连接地址

    private static final String URL = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";

    //用户名

    private static final String UNAME = "system";

    //密码

    private static final String UPWD = "ok";

 

    // 使用静态块加载数据库的驱动

    static {

        try {

            Class.forName(DRIVER);

        } catch (ClassNotFoundException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

    // 声明三个核心接口对象(Connection,PreparedStatment,ResultSet)

    private Connection conn = null;// 数据库连接的对象

    private PreparedStatement pstmt = null;// SQL命令预处理并执行操作的对象

    protected ResultSet res = null;// 查询后返回的结果集对象

    // 编写创建数据库连接对象的方法(DriverManager)

 

    private void getConn() {

        try {

            conn = DriverManager.getConnection(URL, UNAME, UPWD);

        } catch (SQLException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

 

    // 编写关闭数据库释放资源的方法

    protected void colseAll() {

        if (null != res) {

            try {

                res.close();

            } catch (SQLException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

        if (null != pstmt) {

            try {

                pstmt.close();

            } catch (SQLException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

        if (null != conn) {

            try {

                conn.close();

            } catch (SQLException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

    }

 

    // 编写数据库的查询方法

    protected ResultSet excuteSelect(String sql, Object[] params) {

        // 调用数据库连接对象的方法

        this.getConn();

        // 创建预处理对象

        try {

            pstmt = conn.prepareStatement(sql);

            // 通过for循环对参数进行预处理

            if (null != params) {

                for (int i = 0; i < params.length; i++) {

                    pstmt.setObject(i+1, params[i]);

                }

            }

            // 操作查询并返回结果集

            res = pstmt.executeQuery();

        } catch (SQLException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        return res;

    }

    // 编写数据库的增删改的方法

    protected int excuteEdit(String sql,Object[] params){

        int count = 0;

        //调用数据库连接对象的方法

        this.getConn();

        try {

            //创建SQL命令预处理执行操作的对象

            pstmt = conn.prepareStatement(sql);

            //对参数进行预处理

            for (int i = 0; i < params.length; i++) {

                pstmt.setObject(i+1, params[i]);

            }

            //接收操作执行返回的行数

            count = pstmt.executeUpdate();

        } catch (SQLException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }finally {

            this.colseAll();

        }

        return count;

    }

 

}

6、释放资源

    Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, Statement和Connection对象。值得注意的是为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。

当然,我们上面所说的只是JDBC的一些简单的操作步骤,其实JDBC还有很多的知识和需要注意的地方。在实际操作中的过程也会遇到各种各样的问题需要我们去探索和解决。不经历风雨怎么见彩虹,只有通过不断的学习和探索,在实践的道路上得出真知。

0人推荐
共同学习,写下你的评论
0条评论
冷酷自尊VIP
程序员冷酷自尊VIP

5篇文章贡献26210字

作者相关文章更多>

推荐相关文章更多>

MySQL开发规范

达芬奇09-04 11:38

必须掌握的30种SQL语句优化

不写代码你养我啊08-23 11:30

ES(Elasticsearch)支持PB级全文搜索引擎入门教程

HelloWorld09-29 17:28

Java面试中的hadoop面试题及答案整理

兔子06-15 17:15

数据库分类之速成篇

呵呵呀06-17 18:54

发评论

举报

0/150

取消