2.20jdbc

news2024/12/23 0:45:40

一.数据库编程的必备条件

  • 编程语言:java c c++ Python

  • 数据库 Oracle,MySQL,SQL Server

  • 数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包:MySQL提供了Java的驱动包

mysql=connector-java,需要就Java操作MySQL需要该驱动包

二.Java的数据库编程

JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是

Java中的数据库连接规范。这个API由 java.sql.,javax.sql. 包中的一些类和接口组成,它为Java

开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。

三.jdbc工作原理

JDBC 为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包

含一些通用的接口类。

JDBC优势:

  • Java语言访问数据库操作完全面向抽象接口编程

  • 开发数据库应用不用限定在特定数据库厂商的API

  • 程序的可移植性大大增强

MySQL是一个-服务器结构的程序

四.JDBC编程

1.创建项目

2.引入依赖

JDBC编程需要用到MySQL的驱动包

驱动包就是将mysql本身的API给转化成jdbc风格的

1)下载驱动包

去maven中央仓库去下载

https://mvnrepository.com/

2)导入到项目中

a)创建个目录,随便取名字

b)把刚才下载的jar文件拷贝到刚才的目录

c)右键刚刚的目录,有一个选项,佳作add as library

3)编写代码

1.创建DataSource对象,这个对象就描述了数据库服务器在哪里

父类引用指向子类实例

URL:Uniform Resource Locator

唯一资源定位符

2.建立连接

3操作数据库(插入)-构造语句

4.执行sql

5.释放资源

释放资源的时候先释放statement,再释放connection

先创建的后释放

4)总结

(42条消息) 如何查看MySQL的端口号?_安西宁的博客-CSDN博客_mysql8 查看端口

五.灵活处理插入删除数据

0.以前的方法

1.使用户输入

2.将id和name替换到insert语句对应的位置上

方法1,用字符串的拼接

方法2:替代写法

3.进行替换操作

4.打印拼接好的sql

六.注意事项

1.无法用idea连接

2.连接池

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class JDBC {
    public static void main(String[] args) throws SQLException {
        Scanner scanner = new Scanner(System.in);

        // 1. 创建好数据源
        DataSource dataSource = new MysqlDataSource();
        // 设置数据库所在的地址
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java102?characterEncoding=utf8&useSSL=false");
        // 设置登录数据库的用户名
        ((MysqlDataSource) dataSource).setUser("root");
        // 这个是设置登录数据库的密码
        ((MysqlDataSource) dataSource).setPassword("2222");

        // 2. 让代码和数据库服务器建立连接~~ 相当于到达了菜鸟驿站
        Connection connection = dataSource.getConnection();

        // 2.5 让用户通过控制台输入一下待插入的数据.
        System.out.println("请输入学号: ");
        int id = scanner.nextInt();
        System.out.println("请输入姓名: ");
        String name = scanner.next();

        // 3. 操作数据库. 以插入数据为例.
        //    关键所在就是构造一个 SQL 语句~
        //    在 JDBC 中构造的 SQL, 不必带上 ;
        //    ; 只是在命令行中用来区分不同的语句. 现在是直接在代码中操作~~
        String sql = "insert into student values(?, ?)";
        // 此处光是一个 String 类型的 sql 还不行, 需要把这个 String 包装成一个 "语句对象"
        PreparedStatement statement = connection.prepareStatement(sql);
        // 进行替换操作.
        statement.setInt(1, id);
        statement.setString(2, name);
        System.out.println("statement: " + statement);

        // 4. 执行 SQL , 相当于扫码取件
        //    SQL 里面如果是 insert, update, delete, 都使用 executeUpdate 方法.
        //    SQL 里面如果是 select, 则使用 executeQuery 方法.
        //    返回值就表示这个操作, 影响到了 几行. 就相当于在控制台里输入 sql 之后, 得到的数字~
        int ret = statement.executeUpdate();
        System.out.println(ret);

        // 5. 此时 SQL 已经执行完毕. 然后还需要释放资源.
        statement.close();
        connection.close();
    }
}

七 .查找操作

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBCSelect {
    public static void main(String[] args) throws SQLException {
        // 查找数据库中的记录
        // 这个查找和前面的操作就不太一样了~~ 多了一个步骤, 要遍历结果集合~

        // 1. 创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java104?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("2222");

        // 2. 和数据库服务器建立连接
        Connection connection = dataSource.getConnection();

        // 3. (此处不输入条件了, 直接查找所有记录)

        // 4. 构造 SQL
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);

        // 5. 执行 SQL.
        //    此处要使用的是 executeQuery.
        //    executeUpdate 只能返回一个 int.
        //    executeQuery 返回的是一个 ResultSet 对象. 可以把这个对象视为是一个 "临时表"
        ResultSet resultSet = statement.executeQuery();

        // 6. 遍历临时表, 拿到里面的数据.
        //    resultSet 简单的当成一个类似于 "迭代器" 这样的东西来看待~
        //    next 如果没有到达末尾, 就是返回 true, 要继续循环.
        //    next 如果到达末尾, 就返回 false, 结束循环.
        while (resultSet.next()) {
            // 在这里就可以取这一行的数据了.
            // 通过 ResultSet 里面的 getXXX 方法, 来获取到这里指定的列.

            // 取 id, id 是整数, getInt
            int id = resultSet.getInt("id");
            // 取 name, name 是 String, getString
            String name = resultSet.getString("name");
            System.out.println(id + ": " + name);
        }

        // 7. 关闭连接, 释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}

八.workbench

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

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

相关文章

UG NX二次开发(C#)-导出-导出Parasolid文件(.x_t文件)

文章目录 1、前言2、在UG NX中的操作2、采用NXOpen二次开发实现1、前言 UG NX提供了多种文件的导入与导出功能,本文采用NXOpen.net来实现Parasolid文件(.x_t文件)的导出功能。 2、在UG NX中的操作 打开UG NX的一个三维模型,如下图所示。 点击“文件”->“导出”->“…

约束优化:约束优化的三种序列无约束优化方法

文章目录约束优化:约束优化的三种序列无约束优化方法外点罚函数法L2-罚函数法:非精确算法对于等式约束对于不等式约束L1-罚函数法:精确算法内点罚函数法:障碍函数法等式约束优化问题的拉格朗日函数法:Uzawas Method fo…

Win10 环境 安卓ollvm编译与配置 ndk代码混淆加密

确定你正在使用的ndk版本 查看build.gradle ndkVersion 21.4.7075529 确定你使用的ndk的ollvm版本 C:\Users\Administrator\AppData\Local\Android\Sdk\ndk\21.4.7075529\toolchains\llvm\prebuilt\windows-x86_64\bin\llvm-config.exe --version 9.0.9svn 确定了ollvm版本后…

Java序列化机制

Java序列化机制 概述 java中的序列化可能都停留在实现Serializable接口上,对于它里面的一些核心机制没有深入了解过。直到最近在项目中踩了一个坑,就是序列化对象添加一个字段以后,使用方系统报了反序列化失败,原因是我们双方的…

【ArcGIS Pro二次开发】(6):工程(Project)的基本操作

在ArcGIS Pro中我们对工程的基本操作一般包括打开、新建、保存等。下面演示在二次开发中如何用代码进行以上操作。 新建一个项目,命名为【ProjectManager】,添加8个按钮,命名为【CreateEmptyProject、CreateProjectByDefault、OpenExProjest…

易基因|MeRIP-seq揭示m6A RNA甲基化通过调控组蛋白泛素化来促进癌症生长和进展:Cancer Res

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。2022年05月16日,《Cancer Res》杂志发表了题为“M6A RNA Methylation Regulates Histone Ubiquitination to Support Cancer Growth and Progression”的研究论文,该…

Python解题 - CSDN周赛第30期 - 天然气订单

本期比赛的在线测试系统好像出了点问题,导致很多选手最后提交的分数是0,而问哥也遇到好几次提交后一直显示“运行中”而没有结果的情况。鉴于之前遇到过类似情况,不停地刷新页面才得以继续。但是此问题已经存在并持续了好几期,极大…

三、NetworkX工具包实战2——可视化【CS224W】(Datawhale组队学习)

开源内容:https://github.com/TommyZihao/zihao_course/tree/main/CS224W 子豪兄B 站视频:https://space.bilibili.com/1900783/channel/collectiondetail?sid915098 斯坦福官方课程主页:https://web.stanford.edu/class/cs224w NetworkX…

【Python--XML文件读写】XML文件读写详解

【Python–XML文件读写】XML文件读写详解 文章目录【Python--XML文件读写】XML文件读写详解1. 前言1.1 介绍1.2 用法2. xml文件内容形式3. xml文件读写3.1 项目框架3.1 写入操作(创建)(create_xml.py)3.2 读取操作(解析…

虚拟 DOM 详解

什么是虚拟 dom? 虚拟 dom 本质上就是一个普通的 JS 对象,用于描述视图的界面结构 在vue中,每个组件都有一个render函数,每个render函数都会返回一个虚拟 dom 树,这也就意味着每个组件都对应一棵虚拟 DOM 树 查看虚拟…

Linux docker(03)可使用GPU渲染的x11docker实战总结

该系列文章的目的旨在之前的章节基础上,使用x11docker构建一个可以使用GPU的docker容器。该容器可以用于3D图形渲染/XR 等使用GPU渲染的程序调试和运行。 0 why docker 为什么非要用x11docker,而不是其他的docker呢? 因为一般的docker是不…

这么好的政策和创新基地,年轻人有梦想你就来

周末有空去参观了下一个朋友办的公司。位置和环境真不错,且租金低的离谱,半年租金才2000元,且提供4个工位。这个创新基地真不赖啊,国家鼓励创新创业,助力年轻人实现梦想。场地有办公区,休息区应有尽有&…

linux集群技术(一)--LVS(负载均衡)(一)

集群功能分类负载均衡LVS概述LVS工作模式轮训算法 1.集群功能分类 1.1 LB (一)简介 LB:Load Balancing,负载均衡(增加处理能力),有一定高可用能力,但不是高可用集群,是以提高服务的…

CData Drivers for Avro v22

CData Drivers for Avro v22 从报告工具或数据库加入ApacheAvro。您还可以根据标准通过驱动程序连接到自定义应用程序。 与BI分析、报告、ETL工具和定制解决方案集成。 用于Avro的CData驱动程序功能强大: BI和分析 我们的驱动程序提供了将实时Avro数据连接到分析、B…

QT 设计一个串口调试工具,用一个工程就能轻松解决,外加虚拟串口工具模拟调试,在日常工作中可类比模块间通信,非常详细建议收藏

QT 串口调试工具第一节 虚拟串口工具安装第二节 QT创建一个基于QWidget的项目第三节 UI界面设计第三节 项目头文件widget.h第四节 项目实现文件widget.cpp第五节 main函数第六节 编译结果重点第七节 使用QT打包程序,不安装QT的电脑可使用第一节 虚拟串口工具安装 -…

【C++】模拟map和set以及改造红黑树

文章目录1、set和map的基础用法1.1 set的基本使用1.2 map的基本使用2、set和map的模拟实现2.1 建立map和set类2.1 红黑树的完善1、set和map的基础用法 stl中,像vector、list、deque等这样的容器,称之为序列式容器,其底层是线性序列的数据结构…

RabbitMQ学习(九):延迟队列

一、延迟队列概念延时队列中,队列内部是有序的,最重要的特性就体现在它的延时属性上,延时队列中的元素是希望 在指定时间到了以后或之前取出和处理。简单来说,延时队列就是用来存放需要在指定时间内被处理的 元素的队列。其实延迟…

005 利用fidder抓取app的api,获得股票数据

一、下载安装fidder 百度搜索fidder直接下载,按提示安装即可。 二、配置fidder 1. 打开fidder,选择tools——options。 2. 选择HTTPS选项卡,勾选前三项,然后点击右侧【actions】,选择【trust root certificate】&a…

七大排序经典排序算法

吾日三省吾身:高否?富否?帅否?答曰:否。滚去学习!!!(看完这篇文章先)目前只有C和C的功底,暂时还未开启新语言的学习,但是大同小异,语法都差不多。目录:一.排序定义二.排序…

fuzz测试之libfuzzer使用小结

fuzz测试之libfuzzer使用小结背景基本原理使用方法主调DEMO参考资料背景 项目中,为测试算法的鲁棒性,经常会用到fuzz测试进行压力测试。fuzz测试是一种模糊测试方法,本质是通过灌入各种变异的随机数据,去遍历不同函数分支&#xf…