JDBC笔记(封装DBFactory)

这篇博客详细介绍了JDBC中常用的接口和类,包括DriverManager、Connection、PrepareStatement和ResultSet。还阐述了JDBC访问数据库的9个步骤,并讲解了如何封装DBFactory。此外,讨论了事务管理和JavaBean在数据封装中的应用,强调了JavaBean在软件分层和数据映射中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jdbc提供的常用的接口和类

  1. DriverManager:驱动程序管理器,主要用来获得与数据库的连接,常用Connection getConnection(url,username,password);返回一个Connection对象。
  2. Connection:表示与数据库的连接,主要用于获取执行SQL语句的预置语句对象,常用方法
    PrepareStatement preparedStatement(sql)。
  3. PrepareStatement:预置语句执行体,主要用于执行SQL语句。
    int executeUpdate():执行非查询语句(INSERT、DELETE、UPDATE)
    ResultSet executeQuery():执行查询语句(SELECT),返回结构集
  4. ResultSet :执行查询语句之后返回的结果集
    boolean next()将结果集记录指针移动到下一条记录,如果有记录则返回true,否则返回false,常常跟循环搭配使用
    getXXX()获取当前记录字段值,其中XXX表示数据库中字段的类型对应java的数据类型(注意数据库中的数据类型与Java数据类型不同的地方)。

jdbc访问数据库的步骤

第一步:导入数据库驱动jar包,并通过import java.sql.*导入。

第二步:加载注册驱动程序
Class.forName(“com.mysql.jdbc.Driver”);

第三步:定义好连接字符串以及连接数据库的用户名和密码;(以名为test的数据库为例)
String user=”root”;
String password=”root”;
String url=”jdbc:mysql://localhost:3306/test”;
也可以简写成String url=”jdbc:mysql:///test”;

第四步:利用驱动程序管理器获得数据库连接
Connection conn=DriverManager.getConnection(url,username,password);

第五步:定义待执行的SQL语句
String sql=”select name,age from users where id=?”;//?表示占位符

第六步:使用Connection对象的prepareStatement方法获得预置语句对象,并使用预置语句对象设定
占位符的值
PreparedStatement pstmt=conn.prepareStatement(sql);
//设置占位符的值
pstmt.setInt(1,1001);
//注意根据值得类型选择具体的set方法

第七步:使用pstmt的executeQuery方法执行SQL语句,得到结果集对象ResultSet

ResultSet rs = pstmt.executeQuery();

第八步:可以利用结果集进行数据操作了
Object getObject(int columnIndex); //通过列的编号获得任意数据类型的结果数据

Object getObject(String columnName); //通过列的名字获取任意数据类型的结果数据

ResultSetMetaData getMetaData(); //通过结果集返回结果集元数据信息

ResultSetMetaData:结果集元数据信息中还有常用的以下方法:
int getColumnCount(); //返回结果集中的列数
String getColumnName(int columnIndex) //根据列的索引得到列的名称
String getColumnTypeName(int columnIndex) //根据列的索引获取列的数据类型的名称

第九步:关闭资源(注意顺序)
rs.close();
pstmt.close();
conn.close();


封装一个成DBFactory

package com.edu.stu.Factory;

import java.sql.*;

public class DBFactory {
    private static DBFactory ref = new DBFactory();

    private DBFactory() {
        try {
        //加载驱动
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws SQLException {
        String url = "jdbc:mysql:///test?useSSL=true";//设置连接字符串
        return DriverManager.getConnection(url, "root", "root");//利用驱动程序管理器获取连接
    }

    //对sql语句进行非查询操作(查询操作类似只是返回的不是int型受影响行数而是返回ResultSet结果集,略),第一个参数是带sql语句(占位符式的),第二个参数是对应占位符中要设置的参数
    public static boolean OperDML(String sql, Object[] args) {
        boolean flag = false;

        try {
            Connection conn = getConnection();//获取连接
            PreparedStatement pstmt = conn.prepareStatement(sql);//获得预置语句对象,并使用预置语句对对象设定 
            for (int i = 0; i < args.length; i++) {
                pstmt.setObject(i + 1, args[i]);//填入占位符的参数值
            }

            int res = pstmt.executeUpdate();//update返回受影响行数
            if (res > 0)
                flag = true;
            pstmt.close();
            conn.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return flag;
    }

    //sql查询
    public static ResultSet OperQuery(String sql,Object[] args){
        ResultSet res=null;
        try {
            Connection conn=getConnection();
            PreparedStatement pstmt=conn.prepareStatement(sql);
            for(int i=0;i<args.length;i++)
            {
                pstmt.setObject(i+1, args[i]);
            }
            res=pstmt.executeQuery();
            pstmt.close();
            conn.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return res;
    }
}

扩展

事务

1.当我们使用DriverManager获得一条连接的时候,事务就处于自动提交模式,每条SQL语句都被当做一个事务来对待,并且事务在该语句执行完成后提交。

2.利用setAutoCommit(boolean)方法来决定是手动提交事务还是自动提交事务
–如果设置成手动提交事务,可以显式的使用Connection对象的commit()方法提交事务和rollback()方法回退事务。

JavaBean

1) 被用于封装各种操作细节,可以用来实现业务逻辑或数据访问逻辑,这样就可以显式的将软件分层,显式给客户的是一部分,访问数据库的是一部分。
2) JavaBean类跟普通类一样,数据成员不能被直接访问,只能通过共有的getter和setter方法来访问
3)JavaBean对数据的映射
I.映射单个实体:映射表中的一条记录
II.映射实体集:映射数据库中的一张表


如一个简单的学生类的javabean

package com.edu.stu.beans;

public class Student {
    private int id;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getScore() {
        return score;
    }
    public void setScore(int score) {
        this.score = score;
    }
    private String name;
    private String sex;
    private int age;
    private int score;
    public Student(int id, String name, String sex, int age, int score) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.score = score;
    }
}

一、概述: JDBC从物理结构上说就是Java语言访问数据库的一套接口集合。从本质上来说就是调用者(程序员)和实现者(数据库厂商)之间的协议。JDBC的实现由数据库厂商以驱动程序的形式提供。JDBC API 使得开发人员可以使用纯Java的方式来连接数据库,并进行操作。 ODBC:基于C语言的数据库访问接口。 JDBC也就是Java版的ODBC。 JDBC的特性:高度的一致性、简单性(常用的接口只有4、5个)。 1.在JDBC中包括了两个包:java.sql和javax.sql。 ① java.sql 基本功能。这个包中的类和接口主要针对基本的数据库编程服务,如生成连接、执行语句以及准备语句和运行批处理查询等。同时也有一些高级的处理,比如批处理更新、事务隔离和可滚动结果集等。 ② javax.sql 扩展功能。它主要为数据库方面的高级操作提供了接口和类。如为连接管理、分布式事务和旧有的连接提供了更好的抽象,它引入了容器管理的连接池、分布式事务和行集等。 注:除了标出的Class,其它均为接口。 API 说明 java.sql.Connection 与特定数据库的连接(会话)。能够通过getMetaData方法获得数据库提供的信息、所支持的SQL语法、存储过程和此连接的功能等信息。代表了数据库。 java.sql.Driver 每个驱动程序类必需实现的接口,同时,每个数据库驱动程序都应该提供一个实现Driver接口的类。 java.sql.DriverManager (Class) 管理一组JDBC驱动程序的基本服务。作为初始化的一部分,此接口会尝试加载在”jdbc.drivers”系统属性中引用的驱动程序。只是一个辅助类,是工具。 java.sql.Statement 用于执行静态SQL语句并返回其生成结果的对象。 java.sql.PreparedStatement 继承Statement接口,表示预编译的SQL语句的对象,SQL语句被预编译并且存储在PreparedStatement对象中。然后可以使用此对象高效地多次执行该语句。 java.sql.CallableStatement 用来访问数据库中的存储过程。它提供了一些方法来指定语句所使用的输入/输出参数。 java.sql.ResultSet 指的是查询返回的数据库结果集。 java.sql.ResultSetMetaData 可用于获取关于ResultSet对象中列的类型和属性信息的对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值