JDBC

5、事务

需要执行SQL语句

create table account(id char(36) primary key,card_id varchar2(20) unique,name varchar2(8) not null,money number(10,2) default 0
)
insert into account values('6ab71673-9502-44ba-8db0-7f625f17a67d','1234567890','张三',1000);
insert into account (id,card_id,name) values('9883a53d-9127-4a9a-bdcb-96cf87afe831','0987654321','张三');

当批量处理数据时,如果中间有一句因为代码错误的原因可能会导致代码中断,如果代码执行一半后中断,执行权到catch,会导致出错之后的代码无法执行,但已执行的代码会提交。不能做到同时执行。所以需要经过处理

import java.sql.*;public class Trasaction {public static void main(String[] args) {try {//1、加载JDBC驱动程序Class.forName("oracle.jdbc.driver.OracleDriver");} catch (ClassNotFoundException e) {e.printStackTrace();}Connection connection = null;Statement statement = null;try {//2、获取数据库连接String url = "jdbc:oracle:thin:@192.168.30.212:1522:lanqiao";connection = DriverManager.getConnection(url, "scott", "root");connection.setAutoCommit(false);//关闭默认自动事务提交(事务处理)//3、创建Statement实例statement = connection.createStatement();//4、执行SQL语句statement.executeUpdate("update account set money=money-100 where card_id= '1234567890'");statement.executeUpdate("update account set money=money100 where card_id= '0987654321'");connection.commit();//提交事务(统一提交)} catch (SQLException e) {if(connection != null)//防止connection出现空指针异常try {connection.rollback();//撤销DML操作(统一撤销)} catch (SQLException e1) {e1.printStackTrace();}}e.printStackTrace();}finally {//6、关闭JDBC对象,释放资源try {if(statement!=null) {statement.close();}} catch (SQLException e) {e.printStackTrace();}try {connection.close();//close方法会提交事务} catch (SQLException e) {e.printStackTrace();}}}
}

四、JDBC整理

由于JDBC的连接过程比较繁琐,如果每次使用都需要使用大量的重复的代码,造成代码的冗余,所以需要需要我们把一些相同的过程截取出来封装

1、加载驱动

因为每次加载驱动都是从ojdbc中的固定文件中获取,所以可以抽取出来

public class DBLinks {static {try {Class.forName("oracle.jdbc.driver.OracleDriver");} catch (ClassNotFoundException e) {e.printStackTrace();}}
}

2、获取连接

由于每次连接的数据库不固定,所以需要定义properties文件,以及propertiesUtil工具类;

user_name=scott
password=root
url=jdbc:oracle:thin:@127.0.0.1:1521:orcl 
package com.xt.util;import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;import com.xt.exception.NotFoundPropertiesException;public class PropertiesUtil {static Properties properties;static {properties = new Properties();InputStream inStream = PropertiesUtil.class.getClassLoader().getResourceAsStream("db.properties");try {properties.load(inStream);} catch (IOException e) {e.printStackTrace();}catch (NullPointerException e) {throw new NotFoundPropertiesException ("没有在src根目录下找到properties文件!!");}}public static String getValue(String key) {return properties.getProperty(key);}public static void main(String[] args) {System.out.println(getValue("url"));}
}

之后再可以抽出以下代码:

private Connection getConnection() {Connection connection=null;try {connection = DriverManager.getConnection(PropertiesUtil.getValue("url"), PropertiesUtil.getValue("user_name"), PropertiesUtil.getValue("password"));return connection;} catch (SQLException e) {e.printStackTrace();}return null;}

3、释放资源

private void close(Connection connection,Statement statement,ResultSet rs) {if (rs!= null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();} }if (statement!= null) {try {statement.close();} catch (SQLException e) {e.printStackTrace();} }if (connection!=null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();} }}

4、修改数据

public boolean update(String sql) {Connection connection =getConnection();Statement statement =null;try {statement = connection.createStatement();int a =statement.executeUpdate(sql);return a>0;} catch (SQLException e) {e.printStackTrace();} finally {close(connection,statement,null);}return false ;}/*** 修改数据库中的数据(增,删,改)* *@autnor 李晨曦** @param sql* @return*/ public boolean update(String sql,Object...values) {Connection connection =getConnection();@SuppressWarnings("unused")Statement statement =null;PreparedStatement ps = null;try {statement = connection.createStatement();ps =connection.prepareStatement(sql);for (int i = 1; i <= values.length; i++) {ps.setObject(i, values[i-1]);}int a=ps.executeUpdate();return a>0;} catch (SQLException e) {e.printStackTrace();} finally {close(connection,ps,null);}return false;}

5、查询数据

public void select(String sql,IRowMapper rowMapper) {Connection connection =getConnection();Statement statement = null;ResultSet rs = null;try {statement =connection.createStatement();rs = statement.executeQuery(sql);rowMapper.dealResult(rs);} catch (SQLException e) {e.printStackTrace();}finally {close(connection, statement, rs);}}/*** 查询数据库* *@autnor 李晨曦** @param sql* @param rowMapper*/       public void select(String sql,IRowMapper rowMapper,Object...values) {Connection connection =getConnection();PreparedStatement preparedStatement = null;ResultSet rs = null;try {preparedStatement =connection.prepareStatement(sql);for (int i = 1; i <= values.length; i++) {preparedStatement.setObject(i, values[i-1]);}rs = preparedStatement.executeQuery();rowMapper.dealResult(rs);} catch (SQLException e) {e.printStackTrace();}finally {close(connection, preparedStatement, rs);}}

7、批量操作数据

public boolean batchUpdate(String ...strings) {Connection connection = getConnection();Statement statement = null;try {connection.setAutoCommit(false);statement = connection.createStatement();for (String string : strings) {statement.executeUpdate(string);}connection.commit();return true;} catch (SQLException e) {if (connection != null) {try {connection.rollback();} catch (SQLException e1) {e1.printStackTrace();} }e.printStackTrace();}finally {close(connection, statement, null);}return false;}

完整代码

package com.xt.util.db;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import com.xt.util.PropertiesUtil;
/*** 数据库连接* * @author 李晨曦**/
public class DBLinks {static {try {Class.forName("oracle.jdbc.driver.OracleDriver");} catch (ClassNotFoundException e) {e.printStackTrace();}}
/*** 连接数据库* *@autnor 李晨曦** @return*/private Connection getConnection() {Connection connection=null;try {connection = DriverManager.getConnection(PropertiesUtil.getValue("url"), PropertiesUtil.getValue("user_name"), PropertiesUtil.getValue("password"));return connection;} catch (SQLException e) {e.printStackTrace();}return null;}
/*** 释放数据库资源*   *@autnor 李晨曦** @param connection* @param statement* @param rs*/private void close(Connection connection,Statement statement,ResultSet rs) {if (rs!= null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();} }if (statement!= null) {try {statement.close();} catch (SQLException e) {e.printStackTrace();} }if (connection!=null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();} }}/*** 批量处理数据* *@autnor 李晨曦** @param strings* @return*/public boolean batchUpdate(String ...strings) {Connection connection = getConnection();Statement statement = null;try {connection.setAutoCommit(false);statement = connection.createStatement();for (String string : strings) {statement.executeUpdate(string);}connection.commit();return true;} catch (SQLException e) {if (connection != null) {try {connection.rollback();} catch (SQLException e1) {e1.printStackTrace();} }e.printStackTrace();}finally {close(connection, statement, null);}return false;}/*** 修改数据库中的数据(增,删,改)* *@autnor 李晨曦** @param sql* @return*/public boolean update(String sql) {Connection connection =getConnection();Statement statement =null;try {statement = connection.createStatement();int a =statement.executeUpdate(sql);return a>0;} catch (SQLException e) {e.printStackTrace();} finally {close(connection,statement,null);}return false ;}/*** 修改数据库中的数据(增,删,改)* *@autnor 李晨曦** @param sql* @return*/  public boolean update(String sql,Object...values) {Connection connection =getConnection();@SuppressWarnings("unused")Statement statement =null;PreparedStatement ps = null;try {statement = connection.createStatement();ps =connection.prepareStatement(sql);for (int i = 1; i <= values.length; i++) {ps.setObject(i, values[i-1]);}int a=ps.executeUpdate();return a>0;} catch (SQLException e) {e.printStackTrace();} finally {close(connection,ps,null);}return false;}/*** 查询数据库* *@autnor 李晨曦** @param sql* @param rowMapper*/public void select(String sql,IRowMapper rowMapper) {Connection connection =getConnection();Statement statement = null;ResultSet rs = null;try {statement =connection.createStatement();rs = statement.executeQuery(sql);rowMapper.dealResult(rs);} catch (SQLException e) {e.printStackTrace();}finally {close(connection, statement, rs);}}/*** 查询数据库* *@autnor 李晨曦** @param sql* @param rowMapper*/       public void select(String sql,IRowMapper rowMapper,Object...values) {Connection connection =getConnection();PreparedStatement preparedStatement = null;ResultSet rs = null;try {preparedStatement =connection.prepareStatement(sql);for (int i = 1; i <= values.length; i++) {preparedStatement.setObject(i, values[i-1]);}rs = preparedStatement.executeQuery();rowMapper.dealResult(rs);} catch (SQLException e) {e.printStackTrace();}finally {close(connection, preparedStatement, rs);}}/***创建数据库*     *@autnor 李晨曦** @param sql* @return*/public boolean create(String sql) {Connection connection =getConnection();Statement statement =null;ResultSet rs = null;try {statement = connection.createStatement();rs = statement.executeQuery(sql);return rs.next();} catch (SQLException e) {e.printStackTrace();}finally {close(connection, statement, rs);}return false;}
}

05—JDBC(2)相关推荐

  1. 头歌Educoder——Java高级特性 - JDBC(上)

    第1关:JDBC连接数据库 任务描述 本关任务:使用jdbc连接数据库并完成创建数据库和创建表的操作. 相关知识 JDBC API提供以下接口和类: DriverManager:此类管理数据库驱动程序 ...

  2. Spring Cloud config ------ jdbc(mysql)配置库

    在前面文章基础上进行,请参考: Spring Cloud config ------ 基础使用 Spring Cloud config ------ 认证和安全 Spring Cloud config ...

  3. Java基础(三十二)JDBC(2)连接数据库

    一.连接数据库的过程 连接数据库的过程:加载数据库驱动程序,不过只需在第一次访问数据库时加载一次,然后在每次访问数据库时创建一个Connection实例,然后执行操作数据库的SQL语句,并返回执行结果 ...

  4. java jdbc jar包_大数据从入门到深入:JavaEE 之 数据库技术 JDBC(1)

    1章 JDBC 1.1 JDBC概述 JDBC(Java DataBase Connectivity,java动态数据 库连接技术)是一种用于执行SQL语句的Java API : Applicatio ...

  5. JDBC(14)—对DAO进行改进修改

    结构: DAO2_7< T >(接口)->DAOTestImpl< T >(实现类)->CustomerDAO(继承的子类)->CustomerDAOTest ...

  6. Java学习之JDBC(1)

    JDBC是什么? JDBC是一种Java数据库连接,用于执行SQL的JavaAPI.能够为多种数据库提供统一访问. 因为我使用的是Mysql数据库,所以我以下的代码以Mysql为例. 如何通过JDBC ...

  7. 五、JDBC(复习)

    目录 一.JDBC核心组件 二.使用步骤 三.连接步骤 1.导包 2.注册JDBC驱动程序: 3.数据库URL配置,创建连接对象 (1)加载驱动 (2)获得链接 (3)定义sql,创建状态通道 (4) ...

  8. Educoder Java高级特性 - JDBC(上)

    第1关:JDBC连接数据库 任务描述 本关任务:使用jdbc连接数据库并完成创建数据库和创建表的操作. 相关知识 JDBC API提供以下接口和类: DriverManager:此类管理数据库驱动程序 ...

  9. 三天学会JDBC(一)基本操作1(给各位道友拜个早年啦)

    目录 一.概述 1.JDBC概述 2.JDBC编写步骤 二.JDBC数据库连接获取方式 传说中你为爱甘心被搁浅~ 以前学过,现在相当于系统复习,加油哦! 一.概述 1.JDBC概述 1.1 数据的持久 ...

  10. flink jdbc(mysql)修改为阿里云AnalyticDB方言

    前言 阿里云 AnalyticDB(mysql) 以下简称 adb数据库,是可以直接使用 Mysql的连接方式,但 adb与 mysql语法并不完全相同,有一些特殊的语法有些出入,比如我在使用 ups ...

最新文章

  1. malloc开辟的空间在哪一个区间_C++进阶系列之STL(2)SGI版本空间配置器
  2. 让Elasticsearch飞起来!——性能优化实践干货
  3. can硬件滤波 stm32cubemx_STM32CubeMX系列教程12:控制器局域网络(CAN)
  4. 基于 Kubernetes 的 FaaS 平台开源实现——Kubeless 的应用实践
  5. SpringMVC4返回json
  6. react学习(60)--ant design中getFieldDecorator
  7. 20145302张薇《Java程序设计》实验三报告
  8. selenium03-三个简单的web自动化实例
  9. Restorator软件使exe文件都不能打开,exe不支持此接口
  10. 服务零售全场景,苏宁机器人“分身有术”
  11. selenium之滑块操作
  12. Windows Server 2008 R2 下载地址
  13. win10 修改电脑密码 取消登录密码
  14. 云计算、大数据和人工智能之间的关系
  15. java 正数转负数_Java程序将正整数转换为负数,并将负整数转换为正数
  16. C. Odd/Even Increments
  17. 搬运视频怎么做成原创 | 短视频批量伪原创
  18. 电子技术部第四次培训总结
  19. vue中使用电子签名
  20. 《架构师》被孟岩表扬,心里高兴

热门文章

  1. 计算机组成原理期中考,计算机组成原理期中考卷
  2. ASP.NET 新闻发布网站
  3. lua的演进 lua的历史
  4. 剧本创作时的标准格式,让你的剧本轻松得到制片公司青睐
  5. c语言 tc 编译,用Win-TC编译与用TC2.0编译的差异
  6. 【Unity项目优化宝典】Unity3D手游开发客户端开发经验总结
  7. nginx ajax 504,内网配置错误引起的nginx 504 Connection timed out
  8. 领取敬业福或新春红包
  9. WPS自动生成目录,目录里显示图片如何解决
  10. windows2016小文件服务器,Windows Server 2016 搭建 SMB 共享文件