有关jdbc以及JDBC事务的相关操作

有关jdbc及jdbc事务的操作

一,什么是JDBC

*Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。我们通常说的JDBC是面向关系型数据库的。 --以上来自百度百科。*

二,JDBC的本质

本质上jdbc就是一套接口,我们需要面向接口编程,而不是面向具体的类,达到解耦合的目的,各大数据库厂商 如oracle,mysql,SqlServer都实现了jdbc接口方便我们调用。

*jdbc的接口就在,java.sql 包下*

## 三,JDBC步骤

- jdbc可以划分为6步,既:

1,注册数据库驱动

2,获取数据库连接对象

3,获取数据库操作对象

4,执行sql语句

5,处理查询结果集 *(注意 如果执行的sql语句是dml涉及增删改,则不需要这一步)*

6,关闭资源

## 四,JDBC代码

以下是需要处理查询结果集的

package top.nrcynet;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Demo {
    public static void main(String[] args) {

        String url = "";
        String user = "";
        String password = "";

        String sql = "select * from test.employee";

        Connection conn = null;
        Statement stat = null;
        ResultSet rs = null;

        try {
            //注册驱动
            Class.forName("com.mysql.jdbc.Driver");

            //获取数据库连接对象
            conn = DriverManager.getConnection(url, user, password);

            //获取数据库操作对象
            stat = conn.createStatement();

            //执行sql语句
            rs = stat.executeQuery(sql);

            //处理查询结果集
            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                String address = rs.getString("address");
                int departmentId = rs.getInt("department_id");
                System.out.println(id + "\t" + name + "\t" + address + "\t" + departmentId);
            }

        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }finally {
            //关闭资源
            if(rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(stat != null) {
                try {
                    stat.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

以下是不需要处理查询结果集的

package top.nrcynet;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class Demo02 {
public static void main(String[] args) {

        String url = "";
        String user = "";
        String password = "";

        String sql = "insert into test.employee(name,address,department_id) values(?,?,?)";

        Connection conn = null;
        PreparedStatement ps = null;

        try {

            //注册驱动
            Class.forName("com.mysql.jdbc.Driver");

            //获取数据库连接对象
            conn = DriverManager.getConnection(url, user, password);
            //设置不自动提交事务
            conn.setAutoCommit(false);

            //获取数据库预处理操作对象
            ps = conn.prepareStatement(sql);

            ps.setString(1, "张伟");
            ps.setString(2, "北京市");
            ps.setInt(3, 2);

            ps.execute();

            //手动提交事务
            conn.commit();
        } catch (ClassNotFoundException | SQLException e) {
            try {
                //程序报错,事务回滚
                conn.rollback();
            } catch (SQLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            e.printStackTrace();
        }finally {
            //关闭资源

            if(ps != null) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

- 关于代码:

* 1.java.sql.PreparedStatement,是一个具有预处理功能的接口,该接口可以有效防止sql注入事件的发生。在sql语句中用 "?" 占位符占位,利用该接口中的setString,setInt等方法给占位符传值,此方法第一个参数为从1开始的占位符位数,第二个参数为具体要传的值

* 2.在处理查询结果集中利用java.sql.ResultSet的实例可以遍历出数据,类似集合。利用next方法可以判断当当前行是否有值,并将索引指针指向下一行。利用该接口中的例如:getStirng,getInt等方法传入一个参数取值,该参数为当前列的字段名,或者从1开始的字段位数

## 五,关于事务

在java.sql.Connection接口中可以完成对事务的提交和混滚的基本操作,该接口中的setAutoCommit方法可以设置是否自动提交事务,默认是true,自动提交,同时该接口中也有commit,rollback方法进行提交和混滚的操作 以上就是jdbc的基本操作,源代码也提交到github,[点击这里查看源码](https://github.com/nrcy/jdbcDemo)

中国加油,武汉加油

原文地址:https://www.cnblogs.com/nrcy/p/12331778.html

时间: 2024-10-08 21:56:57

有关jdbc以及JDBC事务的相关操作的相关文章

JDBC事务的相关知识

事务的定义 事务(Transaction):是并发控制的单元,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务,sql server 能将逻辑相关的一组操作绑定在一起,以便服务器 保持数据的完整性. 事务的相关特性 用几个字母总结就是ACID. 1) 原子性(atomicity):事务是数据库的逻辑工作单位,而且是必须是原子工作单位,对于其数据修改,要么全部执行,要么全部不执行. 2) 一致性(consistency):事务在完成时,必须是所有的数据都保

Java数据库连接——JDBC调用存储过程,事务管理和高级应用

阅读目录 一.JDBC常用的API深入详解及存储过程的调用1.存储过程(Stored Procedure)的介绍2.JDBC调用无参存储过程3.JDBC调用含输入参数存储过程4.JDBC调用含输出参数存储过程二.JDBC的事务管理1.JDBC实现事务管理2.通过代码实现事物的管理三.数据库连接池(dbcp.c3p0)1.dbcp使用步骤2.c3p0使用步骤3.连接池总结四.JDBC的替代产品(Hibernate.Mybatis)1.Commons-dbutils 2.Hibernate简介3.M

JDBC学习笔记——事务、存储过程以及批量处理

1.事务                                                                                    1.1.事务的基本概念和使用示例 数据库事务,是指作为单个逻辑工作单元执行的一系列操作,要么完整地执行,要么完全地不执行. 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源.通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠.一个逻辑工作单元

JDBC&&c3p0、事务、批处理、多线程 于一体的经典秘方QueryRunner (common-dbutils)

目录: 基础篇_功能各自回顾 JDBC基础代码回顾(使用JdbcUtils工具简化) c3p0数据库连接池的使用(使用JdbcUtils工具简化) 大数据的插入(使用c3p0+JdbcUtils工具简化) 批处理操作(使用c3p0+JdbcUtils工具简化) 数据库中的事务处理(使用c3p0+JdbcUtils工具简化) 多线程的并发控制 进阶篇_迈向标准开发        自己编写dbutils工具( QueryRunner .TxQueryRunner和JdbcUtils)   (本文核心

【Spring实战】—— 16 基于JDBC持久化的事务管理

前面讲解了基于JDBC驱动的Spring的持久化管理,本篇开始则着重介绍下与事务相关的操作. 通过本文你可以了解到: 1 Spring 事务管理的机制 2 基于JDBC持久化的事务管理 首先看一下Spring的事务管理的机制 Spring本身并不提供事务管理,它只是把事务管理提交给事务管理器,而事务管理器则有多种实现,常见的就是基于JDBC的.Hibernate的.JPA以及JTA的. 操作流程可以参考下面的图片: 其实还有好多种类的事务管理器,这里就不一一列举了. 下面看一下在基于JDBC持久

JAVAEE——spring03:spring整合JDBC和aop事务

一.spring整合JDBC 1.spring提供了很多模板整合Dao技术 2.spring中提供了一个可以操作数据库的对象.对象封装了jdbc技术. JDBCTemplate => JDBC模板对象 与DBUtils中的QueryRunner非常相似. //0 准备连接池 ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setDriverClass("com.mysql.jdbc.Dri

JDBC(通俗易懂)简单的操作(增、删、改、查)_慕课手记

项目所写的类: 说明:①.DButil 动态加载数据库驱动,以及获取java.sql.Connection的对象. ②.Personmodel 数据库列(栏位)所对应的字段,定义了相应的set和get方法. ③.Persondao 对数据库相应的增删改查方法 . ④.Personaction 对Persondao里面增删改查方法的进一步补充完善. ⑤.Personview 对应的将要展示数据的类 ①②③④⑤的代码: package DB; import java.sql.Connection;

Spring入门(三)— AOP注解、jdbc模板、事务

一.AOP注解开发 导入jar包 aop联盟包. aspectJ实现包 . spring-aop-xxx.jar . spring-aspect-xxx.jar 导入约束 aop约束 托管扩展类和被扩展类 <!-- 要做AOP, 一定要托管扩展类和被扩展类 --> <bean id="us" class="com.pri.service.impl.UserServiceImpl"></bean> <bean id="

二、jdbc的关于事务的接口设计

所有文章 https://www.cnblogs.com/lay2017/p/12078232.html 正文 jdbc是jdk设计的一套操作数据库的API,全称是java database connectivity.开发者只需要面对统一的API接口,至于数据库服务的提供商则提供实现jdbc的连接器.开发者想要连接mysql,那么就引入mysql的连接器.想要oracle就引入oracle的连接器.jdbc很好地通过面向接口开发地方式将二者进行分离. 本文将简单提及一下jdbc的API中关于事务