JDBC(Java DataBase Connectivity)

2023-11-20

JDBC

目录

JDBC

简介

JDBC结构步骤

API接口

DriverManager

Conection

Statement

ResultSet

PreparedStatement


简介

        JDBC是使用Java语言操作关系数据库的一套ADI。全称Java DataBase Connectivity,Java数据库连接。一套标准接口操作其他所有关系数据库。数据库接口实现驱动jar包由数据库厂商提供。

JDBC结构步骤

1、注册驱动

2、获取连接

3、定义SQL语句

4、获取执行SQL对象

5、执行SQL语句

6、返回处理结果

7、释放资源

//注册驱动
//Class.forName("com.mysql.cj.jdbc.Driver");
        
//获取连接
String url = "jdbc:mysql://127.0.0.1:3306/练习jdbc";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);

//定义sql
String sql = "update account set money = 2000 where id = 1;";

//获取执行sql的对象 Statement
Statement stmt = conn.createStatement();

//执行sql
int count = stmt.executeUpdate(sql);//返回受影响的行数

//处理结果
System.out.println(count);

//释放资源c
stmt.close();
conn.close();

API接口

DriverManager

功能:注册驱动、获取数据库连接。

注册驱动本质上是使用了DriverManager类的方法,MySQL5之后驱动的版本可以不用写注册驱动的代码,原因是它自己帮你注册好了。

获取数据库连接DriverManager.getConnection(url, username, password)

//获取连接
String url = "jdbc:mysql://127.0.0.1:3306/练习jdbc";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);

Conection

功能:获取执行对象、事务管理、

事务管理:

开启事务 setAutoCommit(boolean autocommit) true自动提交false手动提交;

提交事务 commit()

回滚事务 rollback()

String url = "jdbc:mysql://127.0.0.1:3306/练习jdbc";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);

String sql1 = "update account set money = 3000 where id = 1;";
String sql2 = "update account set money = 4000 where id = 2;";

Statement stmt = conn.createStatement();

try {
    //开启事务
    conn.setAutoCommit(false);
    //执行事务
    int count1 = stmt.executeUpdate(sql1);
    System.out.println(count1);
    int i = 3/0;//异常
    int count2 = stmt.executeUpdate(sql2);
    System.out.println(count2);
    //提交事务
    conn.commit();
} catch (Exception throwables) {
    //回滚事务
    conn.rollback();
}

stmt.close();
conn.close();

Statement

执行SQL语句

excuteUpdate(sql) 执行DML、DDL语句 返回影响的行数;需注意建表、删表、建数据库、删数据库的返回是0;

excuteQuery(sql) 执行DQL语句 返回ResultSet 一个结果集对象。

  • excuteUpdate(sql) 执行DML
String url = "jdbc:mysql://127.0.0.1:3306/练习jdbc";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);

String sql = "update account set money = 4000 where id = 1;";

Statement stmt = conn.createStatement();

int count = stmt.executeUpdate(sql);

if(count > 0){
    System.out.println("修改成功");
}else{
    System.out.println("修改失败");
}

stmt.close();
conn.close();
  •  excuteUpdate(sql) 执行DDL
String url = "jdbc:mysql://127.0.0.1:3306/练习jdbc";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);

String sql = "CREATE TABLE demo(\n" +
        "\tid int,\n" +
        "\tname VARCHAR(10)\n" +
        ");";

Statement stmt = conn.createStatement();

int count = stmt.executeUpdate(sql);

//建表删表建数据库删数据库的返回是0
System.out.println(count);

stmt.close();
conn.close();

  • excuteQuery(sql) 执行DQL语句
String url = "jdbc:mysql://127.0.0.1:3306/练习jdbc";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);

String sql = "CREATE TABLE demo(\n" +
        "\tid int,\n" +
        "\tname VARCHAR(10)\n" +
        ");";

Statement stmt = conn.createStatement();

stmt.executeQuery(sql);//返回一个ResultSet结果集

stmt.close();
conn.close();

ResultSet

1、ResultSet封装了DQL查询语句的结果

2、ResultSet能通过next()来获取查询结果,next()判断当前行是否为有效行,true有效说明有数据,false无效说明当前行没有数据。getXXX(参数)获取参数。参数获取可通过列的编号也可通过列名,要注意列的编号是从1开始的。

String url = "jdbc:mysql://127.0.0.1:3306/练习jdbc";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);

String sql = "SELECT * FROM account;";

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(sql);//返回一个ResultSet结果集

while(rs.next()){
    int id = rs.getInt(1);
    String name = rs.getString(2);
    int money = rs.getInt(3);
    System.out.println(id);
    System.out.println(name);
    System.out.println(money);
    System.out.println("---------------------");
    System.out.println(rs.getInt("id"));
    System.out.println(rs.getString("name"));
    System.out.println(rs.getInt("money"));
    System.out.println("---------------------");
}

rs.close();
stmt.close();
conn.close();

PreparedStatement

继承自Statement,用于预防sql注入。

Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1/练习jdbc", "root", "123456");
String sql = "select * from account where id = ?";
int id = 1;
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, id);
ResultSet rs = pstmt.executeQuery();
while(rs.next()){
    System.out.println("查到");
    System.out.println(rs.getInt("money"));
}
rs.close();
pstmt.close();
conn.close();

数据库连接池

一个负责分配、管理数据库连接的容器。

它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;
释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏;
好处:
资源重用;
提升系统响应速度;
避免数据库连接遗漏。

常见数据库连接池:DBCP、C3P0、Druid。

Driud使用步骤:
1.导入jar包 druid-1.1.12jar
2.定义配置文件
3.加载配置文件
4.获取数据库连接池对象
5.获取连接

Properties prop = new Properties();
prop.load(new FileInputStream("src/com/yozi/druid.properties"));
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);

Connection conn = dataSource.getConnection();

System.out.println(conn);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDBC(Java DataBase Connectivity) 的相关文章

随机推荐

  • 实时监控Cat之旅~配置Cat集群需要注意的问题

    在配置cat集群时 有一些设置是我们应该注意的 从它的部署文档中我们可以看到相关信息 但说的还不够明确和重要 大叔今天总结一下Cat集群配置的注意事项 服务端datasources xml用来设置连接的mysql 集群里的服务器对这项配置是
  • pyecharts运行后产生的html文件用浏览器打开空白

    引用 https github com pyecharts pyecharts issues 503 使用logging日志打印代码错误 coding utf 8 from future import unicode literals im
  • Mageia 9 发布:搭载 Linux 内核 6.4,支持 PulseAudio

    导读 Mageia 最初是 Mandriva Linux 的一个分支 但现在已经发展成全面的 独立 Linux 发行版 从 2010 年以来 Mageia 已经成为一个用于桌面或服务器的稳定且安全的操作系统 并且定期更新 它的近期的发布公告
  • C语言排序算法实现

    C语言实现各种排序算法 冒泡排序 选择排序 插入排序 希尔排序 插入方式 非交换方式 快速排序 归并排序 分治思想 基数排序 桶排序 基数排序的基本思想 典型的空间换时间方式 冒泡排序 include
  • moviepy 生成的视频只有声音没有图像

    问题描述 PDF转成视频 用moviepy 将图片生成视频的时候 生成的视频 有些播放器 播放只有声音没有图像 解决方案 查看源码后发现在 ffmpeg writer py 文件里面有一段这样的代码 if codec libx264 and
  • 在线AI日语视频音频翻译中文字幕

    新番视频没有字幕 AI日语字幕识别让你先睹为快 蓝海智能在线AI工具 niceaitools com languageTra 目前价格是每视频音频分钟0 42元 具体使用方法如下 1 格式工厂处理 把你的日语视频或音频文件 通过格式工厂处理
  • VBA 自定义函数 库存消耗截止

    两个自定义函数 按照库存 计算哪一周库存能消耗完 标出周 自定义函数 按照库存 计算消耗完的那一周实际消耗多少数量 自定义函数 从消耗完的那一周开始算起 后面的周消耗数量都变为0 按钮 Function HaoJin StockQty As
  • Pytorch中常用的损失函数

    Pytorch中常用的损失函数 回归 nn L1Loss nn MSELoss 分类 nn CrossEntropyLoss 回归 nn L1Loss 平均绝对误差 也称L1范数损失 计算预测值与真实值之间的误差绝对值 L 1 L o s
  • python中模块,包,库的概念

    https www cnblogs com mlgjb p 7875494 html 模块 就是 py文件 里面定义了一些函数和变量 需要的时候就可以导入这些模块 包 在模块之上的概念 为了方便管理而将文件进行打包 包目录下第一个文件便是
  • OpenGL入门教程之 深入理解

    一 OpenGL简介 OpenGL是一种用于渲染2D 3D矢量图形的跨语言 跨平台的应用程序编程规范 OpenGL包含一系列可以操作图形和图像的函数 但OpenGL没有实现这些函数 OpenGL仅规定每个函数应该如何执行以及其输出值 类似接
  • 若依开源框架登录扩展Springboot+security,密码、验证码多种登录

    自定义登录扩展类 继承DaoAuthenticationProvider类型 重写additionalAuthenticationChecks方法 CustomLoginAuthenticationProvider java package
  • 是面试官放水,还是公司实在是太缺人?这都没挂,华为原来这么容易进...

    华为是大企业 是不是很难进去啊 在华为做软件测试 能得到很好的发展吗 一进去就有9 5K 其实也没有想的那么难 直到现在 心情都还是无比激动 本人211非科班 之前在字节和腾讯实习过 这次其实没抱着什么特别大的希望投递 没想到华为可以再给我
  • 2023计算机毕业设计SSM最新选题之java个人微博网站1x930

    2023计算机毕业设计SSM最新选题之java个人微博网站1x930 做毕业设计一定要选好题目 毕设想简单 其实很简单 这里给几点建议 1 首先 学会收集整理 年年专业都一样 岁岁毕业人不同 很多人在做毕业设计的时候 都犯了一个错误 那就是
  • 数组理论干货

    数组 如果看文字麻烦就直接跳到最后一个代码块 Array 1 Java语言中的数组是一种引用数据类型 不属于基本数据类型 数组的父类是Object 2 数组实际上是一个容器 可以同时容纳多个元素 数组是一个数据的集合 数组 字面意思是 一组
  • JAVA输出一个爱心

    在 Java 中输出一个爱心可以使用字符画的方式 如下代码所示 public class LoveHeart public static void main String args System out println System out
  • discuz 论坛配置 QQ/163 网易邮箱

    步骤 在 discuz 后台的 站长 邮件设置 里按如下配置 SMTP 服务器固定 163 网易填 ssl smtp 163 com QQ 邮箱则填 ssl smtp qq com 端口 465 验证 勾选 配置完成后 会进行测试验证 发信
  • clamp 函数

    clamp 函数 返回范围内的一个数值 可以使用 clamp 函数将不断增加 减小或随机变化的数值限制在一系列的值中 float clamp float minnumber float maxnumber float parameter 最
  • 简单用用flex和bison

    简单用用flex和bison 参考博文 词法 语法分析器简介 定义 flex bison 文件间关系 具体例子 例1 输入name age时触发 输出name is age years old 例2 输入带有括号的满足乘法加法的表达式 输出
  • 有关ajax 不走回调函数的问题解析

    ajax是设置的返回值明明是json格式 但是返回值是json格式却接收不了 非要设置成text格式才可以接收的到 这是我的jQuery代码 function addSku id var m m id val var p p id val
  • JDBC(Java DataBase Connectivity)

    JDBC 目录 JDBC 简介 JDBC结构步骤 API接口 DriverManager Conection Statement ResultSet PreparedStatement 简介 JDBC是使用Java语言操作关系数据库的一套A