使用JDBC连接mysql

news2024/9/25 13:26:24

JDBC:Java DataBase Connectivity,Java数据库连接。

        使用Java语言操作关系型数据库的一套API。

原理:官方(sun公司)定义出一套操作所有关系型数据库的规则,即接口;所有的数据库厂商去实现这套接口,提供数据库驱动的jar包

本质:使用jdbc接口编程,真正运行代码的是驱动jar包中的实现类

// JDBC快速入门:
// 0.创建工程,导入驱动jar包:lib目录下导入mysql-connector-8.0.jar
Class.forName("com.mysql.cj.jdbc.Driver"); // 1.注册驱动
String url = "jdbc:mysql://127.0.0.1:3306/db01";
String user = "root";
String password = "kxg";
Connection conn = DriverManager.getConnection(url, user, password); // 2.获取连接
String sql = "update account set balance = 2000 where id=1"; // 3.定义SQL语句
Statement statement = conn.createStatement(); // 4.获取执行SQL对象
int rows = statement.executeUpdate(sql); //  // 5.执行SQL,返回受影响的行数
System.out.println(rows); // 6.处理返回结果
    // 7.释放资源
statement.close();
conn.close();

DriverManager:驱动管理类

        1.注册驱动:DriverManager中的registerDriver(Driver driver)

        在DriverManager类中存在静态代码块,静态代码块中调用DriverManager的registerDriver()方法注册驱动,因此Class.forName("com.mysql.cj.jdbc.Driver")可以省略

static {
    try {
        DriverManager.registerDriver(new Driver());
    } catch (SQLException var1) {
        throw new RuntimeException("Can't register driver!");
    }
}

          2.获取数据库连接:static Connection getConnection(url. user, password)方法

                URL:连接路径。jdbc:mysql://ip地址(域名):端口号/数据库名称?参数值对&参数值对

                       jdbc:mysql://localhost:3306/db01:连接本机mysql服务器,端口3306(127.0.0.1)

                user:用户名

                password:密码

Connection:数据库连接对象

        1.获取执行SQL的对象

                普通执行SQL对象:Statement createStatement()方法

                预编译SQL的执行SQL对象:PreparedStatement PreparedStatement(sql)

                执行存储活成的对象:CallableStatement prepareCall(sql)

        2.mysql中的事务处理

                开启事务-begin、start、transaction;提交事务-commit;回滚事务-rollback(mysql默认自动提交)

Statement:执行SQL语句

        int executeUpdate(sql)方法:执行DML、DDL语句

                返回值:(1)DML语句影响的行数;(2)DDL语句成功执行后返回0

        ResultSet executeQuery(sql):执行DQL语句

                返回值:ResultSet结果集对象

PreparedStatement:预编译SQL并执行,防止SQL注入问题

        conn.prepareStatement(sql):通过传入对应的SQL语句,获取PreparedStatement对象

        setXXX(参数值1,参数值2):给SQL语句中的?赋值;

                参数1:SQL语句中?的位置(从1开始);参数2:?的值

        int executeUpdate()、ResultSet executeQuery()方法:执行SQL

// 0.创建工程,导入jar包:lib目录下导入mysql-connector.jar
// 1.注册驱动(静态代码块中直接默认调用)
// 2.获取连接
String url = "jdbc:mysql://127.0.0.1:3303/db01";
String user = "root";
String password = "kxg";
Connection conn = DriverManager.getConnection(url, user, password);

// 3.定义要执行的SQL语句
String sql1 = "update account set balance = 3000 where id = 1";// DML语句
String sql2 = "drop database db02"; // DDL语句
String sql3 = "select * from account"; // DQL语句

// 4.获取执行SQL对象:Statement
Statement statement = conn.createStatement();

// 5.执行SQL
int rows1 = statement.executeUpdate(sql1); // 返回影响的行数
int rows2 = statement.executeUpdate(sql2); // 创建数据库返回rows=1;删除数据库返回rows=0;
ResultSet set1 = statement.executeQuery(sql3); // 利用set集合存储查找结果,保存的是对象集

// 6.处理返回结果
if (rows1 > 0 && rows2 == 0) {
    Sysytm.out.println("修改成功~");
    System.out.println("删除DB02成功~");
} else {
    System.out.println("修改失败~");
}
    // 遍历结果集:判断当前行是否为有效数据,并将光标移动到下一行
while (set1.next()) {
        // 获取数据:getxxx()
    int id = set1.getInt(1); // 第一列:id
    String name = set1.getString(2); // 第二列:name
    double money = set1.getDouble(3); // 第三列:balance
    System.out.println("id = " + id + " name = " + name + " balance = " + money);
    System.out.println("---------");
}

// 3.定义要执行的SQL语句
String sql4 = "select * from user where name = ? && password = ?";

// 4.获取执行SQL的对象:preparedStatement
PreparedStatement preparedStatement = conn.prepareStatement(sql4);

// 5.设置相关值
preparedStatement.setString(1, "zhangsan");
preparedStatement.setString(2, "123456");

// 6.执行SQL语句
ResultSet set2 = preparedStatement.executeQuery();

// 7.判断结果
if (set2.next()) {
    System.out.println("登录成功~");
} else {
    System.out.println("登录失败~");
}

// 释放资源
set1.close();
set2.close()
statement.close();
preparedStatement.close();
conn.close();

    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1430084.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kubernetes k8s

Kubernetes k8s 一个开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理。 从架构设计层面,k8s能很好的解决可用性,伸缩性;从部署运维层面,服务部署,服务监控,应用扩容和故障处…

大数据信用报告查询费用一般要多少钱?

一些不少朋友在申贷的时候被拒贷之后,得到的原因就是因为大数据不良被拒,这时候很多人都反过来查询自己的大数据信用报告,而查询的价格也是不少朋友都比较关注的,那大数据信用报告查询费用一般要多少钱呢?下面本文就为你介绍一下…

C# 读取文件中的配置信息

文章目录 定义使用文件格式代码 C#读取文件并处理&#xff1b;C# 读取文件中的配置信息。 在有的程序中&#xff0c;需要从本地文件中读取配置信息&#xff0c;以进行初始化。 定义 定义一个静态函数来获取文件信息。StreamReader 类。 /// <summary> /// 读取参数文件…

获取真实 IP 地址(一):判断是否使用 CDN(附链接)

一、介绍 CDN&#xff0c;全称为内容分发网络&#xff08;Content Delivery Network&#xff09;&#xff0c;是一种网络架构&#xff0c;旨在提高用户对于网络上内容的访问速度和性能。CDN通过在全球各地部署分布式服务器节点来存储和分发静态和动态内容&#xff0c;从而减少…

MySQL全表扫描:性能杀手的隐患与优化策略

MySQL全表扫描&#xff1a;性能杀手的隐患与优化策略 MySQL数据库作为常用的关系型数据库管理系统之一&#xff0c;全表扫描问题一直困扰着开发者。本文将深入剖析MySQL全表扫描的原理、其对性能的严重影响&#xff0c;同时提供一系列优化策略&#xff0c;助您高效应对MySQL性能…

聊聊比特币----比特币地址

⽐特币地址是⼀个标识符&#xff08;帐号&#xff09;&#xff0c;包含27-34个字母数字拉丁字符&#xff08;0&#xff0c;O&#xff0c;I除外&#xff09;。地址可以以QR码形式表⽰&#xff0c;是匿名的&#xff0c;不包含关于所有者的信息。 地址⽰例&#xff1a;14qViLJfdG…

Linux|Grep 命令的 12 个实用示例

您是否曾经遇到过在文件中查找特定字符串或模式的任务&#xff0c;但不知道从哪里开始查找&#xff1f;那么&#xff0c;grep 命令可以拯救你&#xff01; grep 是一个功能强大的文件模式搜索器&#xff0c;每个 Linux 发行版都配备了它。如果出于某种原因&#xff0c;它没有安…

华为机考入门python3--(8)牛客8-合并表记录

分类&#xff1a;字典排序 知识点&#xff1a; 将输入转成int的列表 my_list list(map(int, input().strip().split( ))) 将列表转为元组 tuple(my_list) 访问元素为元组的列表 for first, second, third in my_list: 对字典进行排序 sorted(my_dict.items())…

如何计算两个指定日期相差几年几月几日

一、题目要求 假定给出两个日期&#xff0c;让你计算两个日期之间相差多少年&#xff0c;多少月&#xff0c;多少天&#xff0c;应该如何操作呢&#xff1f; 本文提供网页、ChatGPT法、VBA法和Python法等四种不同的解法。 二、解决办法 1. 网页计算法 这种方法是利用网站给…

【Vue】指令之内容绑定,事件绑定

Vue指令[1] 内容绑定&#xff0c;事件绑定v-test指令v-html指令v-on基础 内容绑定&#xff0c;事件绑定 v-test指令 作用&#xff1a;设置标签的文本值&#xff08;textContent&#xff09; 默认写法会替换全部内容&#xff0c;使用差值表达式可以替换指定内容内部支持写表达…

springboot整合Sa-Token实现登录认证和权限校验(万字长文)

目前在国内的后端开发中&#xff0c;常用的安全框架有spring security、shiro。现在&#xff0c;介绍一款由国人开发的安全框架Sa-Token。这个框架完全由国人开发&#xff0c;所提供的Api文档和一些设置都是比较符合国人的开发习惯的&#xff0c;本次就来介绍一下如何在spring …

海康威视有插件、无插件播放;webrtc直播;西瓜视频播放器;mpegts.js直播;flvjs直播

Notes 视频播放的几种方式 一、Video mp4链接直接播放 二、海康威视3.3插件版直播、云台控制&#xff0c;资源下载地址 index.html引入hk文件中的js文件双击HCWebSDKPlugin.exe安装插件前端参照文件夹hkCamera中的示例代码 三、海康威视3.2无插件版直播&#xff0c;资源下…

论文阅读-在分布式数据库环境中对哈希算法进行负载均衡基准测试

论文名称&#xff1a;Benchmarking Hashing Algorithms for Load Balancing in a Distributed Database Environment 摘要 现代高负载应用使用多个数据库实例存储数据。这样的架构需要数据一致性&#xff0c;并且确保数据在节点之间均匀分布很重要。负载均衡被用来实现这些目…

【Vue3】源码探索之旅:compiler-core之parseChildren函数(二)

简言 parseChildren函数是在baseParse函数中作为createRoot函数的子节点参数传入的&#xff0c;今天来探索下parseChildren函数。 parseChildren在 compiler-core/src/parse.ts文件内。 parseChildren 这个函数就是用来解析模板字符串内容的 &#xff0c;里面有个while循环…

Jmeter学习系列之四:测试计划元素介绍

测试计划元素 JMeter包含各种相互关联但为不同目的而设计的元素。在开始使用JMeter之前&#xff0c;最好先了解一下JMeter的一些主要元素。 注意:测试计划包含至少一个线程组。 以下是JMeter的一些主要组件: 测试计划&#xff08;Plan&#xff09;线程组(Thread Group)控制器…

调试以及发布npm组件

开发原因&#xff1a; 由于公司自己的封装到npm的组件有点问题&#xff0c;负责人由在忙其他&#xff0c;就由我去负责改改&#xff0c;中途出了不少问题&#xff0c;记录一下。 一、下载源码 第一步肯定是去git上把组件的源码下载下来&#xff0c;这一步没什么好说&#xf…

19.HarmonyOS App(JAVA)依赖布局DependentLayout使用方法

layout/ability_main.xml 显示位置不对&#xff1a;检查布局文件ohos:lef_of "id:tuzi",比如显示在兔子的左侧&#xff0c;这里就会显示不对。 需要id前没有$符号。改为&#xff1a; ohos:lef_of "$id:tuzi" <?xml version"1.0" encodi…

方法引用练习:

技巧&#xff1a; 1.现在有没有一个方法符合我当前的需求 2.如果有这样的方法&#xff0c;这个方法是否满足引用的规则 练习一&#xff1a; 思路&#xff1a;//集合中的数据还是String类型&#xff0c;要放入Student类型数组中还需要先转型成Student类型 public class MyTest…

每日一题Leetcode 1686石子游戏Ⅵ

1686. 石子游戏 VI 题目描述&#xff1a; Alice 和 Bob 轮流玩一个游戏&#xff0c;Alice 先手。 一堆石子里总共有 n 个石子&#xff0c;轮到某个玩家时&#xff0c;他可以 移出 一个石子并得到这个石子的价值。Alice 和 Bob 对石子价值有 不一样的的评判标准 。双方都知道…

linux安装二进制openjdk1.8版本【配置永久加载环境变量】

二进制jdk下载地址&#xff1a;https://www.openlogic.com/openjdk-downloads 选择64位 jdk的 java8下载,然后解压 $ cd /home/ec2-user/config/ $ tar xf openlogic-openjdk-8u382-b05-linux-x64.tar.gz $ mv openlogic-openjdk-8u382-b05-linux-x64 openjdk-8编辑环境变…