[MySql]JDBC编程

news2024/10/6 18:21:41

  JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问

目录

JDBC的使用:

1.下载驱动包,并添加到项目当中  

2.编程语句

2.1创建数据源

2.2与数据库建立连接

2.3构造sql语句

2.4执行sql语句

2.5释放资源

3.完整代码


JDBC的使用:

1.下载驱动包,并添加到项目当中  

驱动包下载地址:Maven Repository: mysql » mysql-connector-java (mvnrepository.com)

下载jar包 

  

按照MySql版本下载成功后,添加到对应要使用的项目当中.

对项目进行右键,创建一个新的文件夹(文件名随意)

下载完成的mysql驱动包右键选择复制,再对刚刚创建完成的文件夹Ctrl  + v.

 点击OK即可

右键添加驱动包的文件夹,选择Add as Library(让IDEA知道,这个文件夹作为存放库文件)

 

 现在就正式的完成了对驱动包的添加

2.编程语句

2.1创建数据源

DataSource是一个接口,为我们指明了数据库服务的位置

这一步我们要做的,主要是创建一个MysqlDataSource对象,并用DataSource类型来接收

MysqlDataSource是DataSource的一个子类,我们使用了向上转型主要是为了减少其耦合性,方便日后更换其他驱动包.

setURL/setUrl()方法:

        URL是唯一资源定位符,用来在网络上描述资源的位置.

 jdbc:mysql://127.0.0.1:3306/test1?characterEncoding=utf8&useSSL=false

URL的类型/用途,此处为Mysql进行服务

这个位置要存放的是数据库所在的设备的IP,而127.0.0.1为环回地址,指代自己的主机,即数据库与JAVA代码在用一台设备

端口号,用来区分主机上的进程

访问的数据库的名称,即打开Mysql后use table_name,的那个table_name

统一字符集为utf8

数据库与客户端之间的通信与否

 setUser()方法:

        用来放置要登录的数据库账户的用户名

setPassword()方法:

        放置登录账号的密码

DataSource dataSource = new MysqlDataSource();//创建一个datasource对象
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test1?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("111111");

2.2与数据库建立连接

Connection connection = dataSource.getConnection();

要选择java.sql的Connection接口,并在类上抛出相应的异常

 

public static void main(String[] args) throws SQLException{}

2.3构造sql语句

String sql = ""; // 写出一个mysql语句

PreparedStatement statement = connection.prepareStatement(sql);
//对mysql语句进行预处理,验证mysql语句是否符合语法要求,能减轻mysql服务器的负担

也可以使用

Statement statement = connection.createStatement();//不进行处理,传输到mysql服务器上

方法一:

String sql = "insert into employee values('xiaoming','111','male')";
PreparedStatement statement = connection.prepareStatement(sql);

方法二:

Scanner scanner = new Scanner(System.in);
        String name = scanner.next();
        String id = scanner.next();
        String sex = scanner.next();

String sql = "insert into employee values(" + name + ", " + id + ", " + sex + ", " + ")";
PreparedStatement statement = connection.prepareStatement(sql);

方法三:(推荐)

使用占位符来替换,能够有效的避免出现SQL的注入攻击,也会更严格的进行校验语句是否正确

Scanner scanner = new Scanner(System.in);
        String name = scanner.next();
        String id = scanner.next();
        String sex = scanner.next();

String sql = "insert into employee values(?,?,?)";

        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1,name);//替换第一个占位符
        statement.setString(2,id);//替换第二个占位符
        statement.setString(3,sex);//替换第三个占位符

2.4执行sql语句

int n = statement.executeUpdate();//对于数据库的增,删,改可以使用此语句
//使用一个整数来接受返回值,含义为对于数据库所影响的数据行数
ResultSet resultSet = preparedStatement.executeQuery();//对于查询sql语句使用
//并使用ResultSet来接收返回值,含义为select得到的所有数据行

while(resultSet.next()){//每一次while循环以一行数据为单位,直到所有都打印完
    String name = resultSet.getString("name");
    String id = resultSet.getString("id");
    String sex = resultSet.getString("sex");
    System.out.println(name + " " + id + " " + " " + sex);
}

2.5释放资源

使用了什么就释放什么,并按照相反的使用顺序

resultSet.close();//只有查询语句并使用了ResultSet来接收executeQuery()才需要释放
preparedStatement.close();//释放预处理
connection.close();//释放连接

3.完整代码

增添,删除和更新数据的语句格式很类似,只有sql语句的区别
public static void main(String[] args) throws SQLException {
        Scanner scanner = new Scanner(System.in);
        String name = scanner.next();
        String id = scanner.next();
        String sex = scanner.next();
        //创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test1?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("021228");
        //和数据库建立连接
        Connection connection = dataSource.getConnection();
        //构造sql语句
        String sql = "insert into employee values(?,?,?)";

        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1,name);
        statement.setString(2,id);
        statement.setString(3,sex);
        System.out.println(statement);
        //执行sql语句
        int n = statement.executeUpdate();
        //释放资源,关闭连接
        statement.close();
        connection.close();
    }
查询数据
public static void main(String[] args) throws SQLException {
        //创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test1?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("021228");
        //建立连接
        Connection connection = dataSource.getConnection();
        //构造sql语句
        String sql = "select * from employee";
        //预处理sql语句
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        System.out.println(sql);
        //执行sql语句
        ResultSet resultSet = preparedStatement.executeQuery();
        while(resultSet.next()){//每一次while循环以一行数据为单位
            String name = resultSet.getString("name");
            String id = resultSet.getString("id");
            String sex = resultSet.getString("sex");
            System.out.println(name + " " + id + " " + " " + sex);
        }
        //释放资源
        resultSet.close();
        preparedStatement.close();
        connection.close();
    }

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

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

相关文章

全域Serverless化,华为云引领下一代云计算新范式

近日,华为开发者大会2023(Cloud)在东莞成功举办,期间“全域Serverless化,引领下一代云计算新范式”专题论坛人气满满。华为云首席产品官方国伟携手业界专家、客户、伙伴,面向广大开发者,分享了在…

Authing 身份云上线数据对象管理(元数据),助力企业构建唯一身份源

在身份管理领域,元数据具有重要的作用和价值。元数据有助于理解数据的结构和意义,提升数据处理效率;促进跨部门、跨组织的数据共享和协作;以及支持数据分析,为业务决策提供支持等。当前,Authing 身份云已经…

在ICC/ICC2/FC中运行Calibre

1. which calibre找到calibre的安装目录 > which calibre > /eda/mentor/ixl_cal_version/bin/calibre 2. 在 /eda/mentor/ixl_cal_version目录下使用find ./* -name "icc_calibre.tcl",找到icc_calibre.tcl 3. 打开icc_calibre.tcl里面有不同工具(ICC2/FC/…

《Linux0.11源码解读》理解(五) head之开启分页

先回顾一下地址长度以及组合的演变:16位cpu意味着其数据总线/寄存器也是16位,但是地址总线(寻址能力)与此无关,可能是20位。可以参考:cpu的位宽、操作系统的位宽和寻址能力的关系_cpu位宽_brahmsjiang的博客…

C++——map和set(multimap和multiset)

目录 1.关联式容器 2.键值对 3.树形结构的关联式容器 3.1 set 3.1.1 set的介绍 3.1.2 set的使用 3.2 multiset 3.2.1 multiset的介绍 3.2.2 multiset的使用 3.3 map 3.3.1 map的介绍 3.3.2 map的使用 3.4 multimap 3.4.1 multimap的介绍 3.4.2 multimap的使用 …

抖音小店选品攻略:10个技巧助你选择助轻松学会选品技巧

抖音小店是目前非常火爆的电商平台之一,许多商家都希望能在抖音上开设自己的小店。而在开设抖音小店之前,选品是一个非常重要的环节。下面是不若与众总结的一些抖音小店选品技巧,希望能帮助到你。 1. 确定目标受众:在选品之前&…

数据库应用:MySQL高级语句

目录 一、理论 1.常用查询 2.函数 3.进阶查询 二、实验 1.普通查询 2.函数 3.进阶查询 三、问题 1.MySQL || 运算符不生效 四、总结 一、理论 1.常用查询 常用查询包括:增、删、改、查; 对 MySQL 数据库的查询,除了基本的查询外…

(学习笔记-TCP连接断开)建立了连接,但是客户端或服务端出现问题,会怎么样?

客户端突然出现故障 客户端出现故障指的是客户端的主机发生了宕机或者断电的场景。发生这种情况的时候,如果服务端一直不会发送数据给客户端,那么服务端是永远无法感知到客户端宕机这件事的,也就是服务端的TCP连接将一直处于ESTABLISH 状态&…

两巨头强强联手!美国EB-5投资移民新项目侨外出国首发

7月15日,在侨外出国“见证辉煌历史 重启明日新章”的主题活动中,一个全新乡村EB-5投资移民项目——峰堡长岭天然气开发项目正式扬帆起航。 这一项目,由两大行业巨头——侨外出国和CanAm基金强强联手。众所周知,侨外出国是EB-5投资…

并发编程中常见的锁策略

本文介绍一些常见的锁策略。 锁策略是多线程编程中相对进阶的内容,它不仅仅局限于Java,任何和“锁”相关的话题,都可能会涉及到这些内容;即使是别的语言,只要涉及到“锁”,也都会涉及到锁策略。 锁策略的…

px4上传数据waiting for bootloader

输入make px4_fmu-v6c_default upload,出现waiting for bootloader 原因,可能是启动了QGC占用了端口,把QGC关掉,重新上电,就OK了。

C++ 继承与多态的基本用法

目录 1.继承 1.1访问等级 1.2函数遮蔽 2.多态 2.1虚函数 1.继承 有父类,有子类,这种层次关系就叫继承,也就说说子类能从父类哪里继承很多东西,继承这种概念或性质是面向对象程序设计的核心思想之一。 这种继承需要先定义一个父…

TS类型断言、函数重载踩过的坑

任意属性 interface Person {name: string;age?: number;[propName: string]: string;//报错 } let tom: Person {name: Tom,age: 25,gender: male }; 任意属性需要包含确定属性和可选属性的类型:[propName: string]: string|number; 类型断言 👉在…

zabbix企业级监控(监控第二台linux服务器安装部署)接上篇单台监控文章操作

zabbix企业级监控监控linux主机 目录 【agent端配置】(监控第二台linux服务器) 1、源码安装zabbix(解包、编译、配置、安装) 2、改agent配置文件 3、启动服务 图形操作: 【agent端配置】(监控第二台l…

批处理判断目录是否存并且删除非空目录

这个功能很常用,但是偶尔总是忘记写法,这里贴一个亲测通过的例子吧。 ECHO OFF CLS if exist DirName ( rmdir /q /s DirName ) ELSE ( echo dir NOT exist!)这个例子的功能非常简单,判断目录DirName是否存在,存在就删除&#x…

【Linux】多线程(上)

本文详细介绍了多线程的常见概念 生产者消费者模型将在多线程(下)继续讲解 欢迎大家指正 提起讨论进步啊 目录 多线程的理解 线程的优点 线程的缺点: 线程的用途 线程VS进程 用户级线程库 POSIX线程库 线程创建: 线程…

【管理设计篇】聊聊系统部署生产有哪些方式

背景 对于互联网应用来说,除了在服务端开发和服务治理之外,还需要保证的有高可用运维。所以很多时候我们不能仅仅局限于,实现需求这个层面,比如软件设计,工程质量,性能,运维、可测试、可观测性…

基于深度学习的高精度交通标志检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于CCTSDB数据集的高精度交通标志(指示、禁止和警告)检测系统可用于日常生活中来检测与定位交通标志目标,利用深度学习算法可实现图片、视频、摄像头等方式的交通标志目标检测识别,另外支持结果可视化与图片或视…

【react + antd】antd如何自定义请求使用antd的upload组件实现图片上传且可预览可删除

文章目录 1. 效果展示2. customRequest如何使用?特别注意: 3. 控制上传时什么时候使用customRequest,什么时候选择beforeUpload方法? 1. 效果展示 官网给出的案例无法使用封装好的请求方式上传图片,以及无法满足上传图…

使用模板创建【vite+vue3+ts】项目出现 “找不到模块‘vue‘或其相应的类型声明” 的解决方案

问题描述 项目前台需要使用Vue3Ts来写一个H5应用,然后我用模板创建 npm create vitelatest vue3-vant-mobile -- --template vue-ts创建完后进入HelloWorld.vue,两眼一黑 解决办法一 npm i --save-dev types/node然后在tsconfig.json的"compi…