JDBC学习

DriverManager(驱动管理类)

Drivermanager的作用有:

1.注册驱动;

2.获取数据库连接

Class.forName("com.mysql.cj.jdbc.Driver");

这一行的作用就是注册Mysql驱动(把我们下载的jar包加载到内存里去)

常用的方法

这个方法用于与数据库建立链接,参数分别是数据库的地址,用户名,用户的密码;

public static void getConnection() {
    try {
        // 注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 获取连接
        connection = DriverManager.getConnection(url, user, password);
    } catch (ClassNotFoundException e) {
        System.out.println("找不到MySQL驱动程序类!");
        e.printStackTrace();
    } catch (SQLException e) {
        System.out.println("获取数据库连接时出现错误!");
        e.printStackTrace();
    }
}

Connection(数据库连接对象)

Connection的作用:

1.获取执行SQL的对象

2.管理事务

常用的方法

Statement

Statement唯一的作用就是用来执行SQL语句,在使用是还有被恶意SQL注入的风险。

常用的方法

executeUpdate(sql):用来执行增、删和修改的操作;

executeQuery(sql):用来执行查询的操作,查询的结果借助ResultSet对象来访问;

import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.util.Scanner;

public class DataBase {
    static final String url = "jdbc:mysql://localhost:3306/chat";
    static final String user = "root";
    static final String password = "123456";
    static Connection connection = null;

    // 获取数据库连接
    public static void getConnection() {
        try {
            // 注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");//增删查改  jdbc er图
            // 获取连接
            connection = DriverManager.getConnection(url, user, password);
        } catch (ClassNotFoundException e) {
            System.out.println("找不到MySQL驱动程序类!");
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("获取数据库连接时出现错误!");
            e.printStackTrace();
        }
    }


    public static void main(String[] args) throws SQLException {
        getConnection();
        //add();
        //print();
        //change();
        //delete();
        connection.close();
    }

    public static void change() throws SQLException {
        Statement st = connection.createStatement();
        st.executeUpdate("UPDATE users SET username=7,password=8,nickname=9");
        st.close();
    }

    public static void print() throws SQLException {
        Statement st = connection.createStatement();
        ResultSet s = st.executeQuery("SELECT ID,USERNAME,PASSWORD,NICKNAME FROM USERS");
        while (s.next()) {
            int id = s.getInt("id");
            String username = s.getString("username");
            String password = s.getString("password");
            String nickname = s.getString("nickname");
            System.out.println("id:" + id + "\t" + "username:" + username + "\t" + "password:" + password + "\t" + "nickname:" + nickname);
        }
        st.close();
        s.close();
    }

    public static void add() throws SQLException {
        Statement st = connection.createStatement();
        st.executeUpdate("INSERT INTO users(id,username,password,nickname) VALUES(5,5,5,5)");
        st.close();
    }

    public static void delete() throws SQLException {
        Statement st = connection.createStatement();
        st.executeUpdate("DELETE FROM users WHERE ID=5");
        st.close();
    }
}

ResultSet(结果对象集)

ResultSet封装了查询语句的结果。

getXxx(参数):参数是你需要的数据表的字段

注意:要获取数据的时候要先调用next移动光标才能获取数据

PreparedStatement(预编译)

PreparedStatement是Statement的升级版作用是预编译SQL语句并执行,防止恶意的SQL注入;

使用方法:

1.获取PreparedStatement对象

2.设置参数值

3.执行SQL语句

public int Add(Connection connection) throws SQLException {
    if(Find(connection)==1){
        return 0;
    }
    PreparedStatement preparedStatement =
            connection.prepareStatement("INSERT INTO STUDENTS(ID,PASSWORD,MAIL,NICKNAME,NAME,IDENTITY) " +
                    "VALUES (?,?,?,?,?,?)");
    preparedStatement.setString(1,getId());
    preparedStatement.setString(2,getPassword());
    preparedStatement.setString(3,getMail());
    preparedStatement.setString(4,getNickname());
    preparedStatement.setString(5,getName());
    preparedStatement.setInt(6,getIdentity());
    preparedStatement.executeUpdate();
    preparedStatement.close();
    return 1;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用easyexcel将csv转为excel

一.背景 供应商系统下载的csv文件不支持域控(主要是第三方wps服务不能对csv文件加密,但是可以对office系列产品进行权限访问的加密控制)。因此思路就改为现将csv文件转为excel文件,然后对excel文件进行加域控制。本文主要介绍如何…

基于IIoT的设备预测性维护设计

基于IIoT的设备预测性维护设计 一、引言 在工业物联网(IIoT)的背景下,设备预测性维护成为了一种关键的战略,能够帮助企业提前发现并解决设备故障,从而提高生产效率、减少停机时间,并降低总体维护成本。为了…

理解JMM

JMM 对volatile的理解 volatile 是java虚拟机提供轻量级的同步机制 1、保证可见性 2、不保证原子性 3、禁止指令重排 那么可见性与JMM相关 什么是JMM Java内存模型,不存在的东西,是一个概念,是一个约定 线程加锁前,必须读取…

【002_音频开发_基础篇_Linux音频架构简介】

002_音频开发_基础篇_Linux音频架构简介 文章目录 002_音频开发_基础篇_Linux音频架构简介创作背景Linux 音频架构ALSA 简介ASoC 驱动硬件架构软件架构MachinePlatformCodec ASoC 驱动 PCMALSA设备文件结构 ALSA 使用常用概念alsa-libALSA Open 流程ALSA Write 流程2种写入方法…

基础SQL DDL语句

MySQL的DDL(Data Definition Language)语句用于定义或修改数据库结构。 DDL数据库操作 查看所有的数据库 show databases; 红色圈起来的是系统数据库,是系统自带的 mysql:包含存储MySQL服务器运行时所需信息的表。这包括数据字典…

如何利用pg_dump和pg_restore迁移从一个PostgreSQL服务器到另一个服务器,同时保持一致性与高效性?

文章目录 解决方案1. 使用pg_dump导出数据2. 将导出的数据复制到目标服务器3. 使用pg_restore导入数据保持一致性与高效性的策略一致性高效性 示例代码导出数据复制数据到目标服务器在目标服务器上解压并导入数据 PostgreSQL数据库的迁移是一个常见的任务,特别是在升…

用Vue全家桶手工搓了一个高仿抖音源码 全开源

用Vue全家桶手工搓了一个高仿抖音,全开源 PC浏览器请用手机模式访问。先按F12调出控制台,再按CtrlShiftM切换到手机模式,手机请用Via浏览器或者Chrome浏览器预览。其他浏览器会强制将视频全屏,导致样式都失效。 运行项目&#x…

【C++】STL:vector常用接口的使用和模拟实现

Hello everybody!这篇文章主要给大家讲讲vector常用接口的模拟实现,STL库中的实现一层套着一层,十分复杂,目前阶段还不适合看源代码。而模拟实现可以让我们从底层上了解这些接口的原理从而更好的使用这些接口。另外我还会讲一些在vector使用过…

【第34天】SQL进阶-SQL高级技巧-Window Funtion(SQL 小虚竹)

回城传送–》《100天精通MYSQL从入门到就业》 文章目录 零、前言一、练习题目二、SQL思路初始化数据什么是Window Funtion窗口函数的分类语法结构第一种写法:第二种写法: 实战体验序号函数:row_number()序号函数:rank()序号函数&…

【树莓派Linux内核开发】入门实操篇(虚拟机Ubuntu环境搭建+内核源码获取与配置+内核交叉编译+内核镜像挂载)

【树莓派Linux内核开发】入门实操篇(虚拟机Ubuntu环境搭建内核源码获取与配置内核交叉编译内核镜像挂载) 文章目录 【树莓派Linux内核开发】入门实操篇(虚拟机Ubuntu环境搭建内核源码获取与配置内核交叉编译内核镜像挂载)一、搭建…

什么是0-day漏洞,怎么防护0-day漏洞攻击

随着信息技术的快速发展,网络安全问题日益凸显,其中0day漏洞攻击作为一种高级威胁手段,给企业和个人用户带来了极大的风险。下面德迅云安全就对0day漏洞攻击进行简单讲解下,并分享相应的一些安全措施,以期提高网络安全…

网络空间地图测绘理论体系白皮书(2023年)02网络空间测绘研究背景(想法比较好,着重看)

01前言 02 网络空间测绘研究背景 2.1 网络空间的起源 2.2 传统测绘理论 2.3 网络空间测绘相关工作 03 测绘体系框架概念定义 3.1 网络空间 3.2 网络空间地图测绘 3.3 体系框架总体思路 04 测绘体系框架应用实践 4.1 网络空间地形图 4.2 网络空间地志图 4.3 网络空间战略图 05 总…

Python 全栈安全(一)

原文:annas-archive.org/md5/712ab41a4ed6036d0e8214d788514d6b 译者:飞龙 协议:CC BY-NC-SA 4.0 前言 序言 多年前,我在亚马逊搜索了一本基于 Python 的应用程序安全书。我以为会有多本书可供选择。已经有了很多其他主题的 Pyt…

【ZYNQ】Zynq 芯片介绍

Zynq 是 Xilinx 公司提出的全可编程 SoC 架构,集成了单核或多核 ARM 处理器与 Xilinx 16nm 或 28nm 可编程逻辑,包括 Zynq 7000 Soc,Zynq UltraScale MPSoC 和 Zync UltraScale RFSoC 等系列。本文主要介绍 Xilinx Zynq 7000 系列芯片架构、功…

Hadoop1X,Hadoop2X和hadoop3X有很大的区别么?

Hadoop的演进从Hadoop 1到Hadoop 3主要是为了提供更高的效率、更好的资源管理、更高的可靠性以及对更多数据处理方式的支持。下面是Hadoop 1, Hadoop 2, 和 Hadoop 3之间的主要区别和演进的原因: Hadoop 1 特点: 主要包括两大核心组件:HDFS&a…

simple-jwt快速入门(包含自定制)

simple-jwt快速入门(包含自定制) 目录 simple-jwt快速入门(包含自定制)安装路由层视图层全局配置前端传入参数配置文件定制登录返回格式定制payload格式自定制签发-认证 安装 pip install djangorestframework-simplejwt路由层 from rest_framework_simplejwt.views import T…

【 AIGC 研究最新方向(上)】面向平面、视觉、时尚设计的高可用 AIGC 研究方向总结

目前面向平面、视觉、时尚等设计领域的高可用 AIGC 方向有以下 4 种: 透明图层生成可控生成图像定制化SVG 生成 本篇(上篇)介绍 1、2,而下篇将介绍 3、4。 透明图层生成 LayerDiffuse 代表性论文:Transparent Imag…

Qt基础之四十六:Qt界面中嵌入第三方程序的一点心得

本文主要讲解QWidget和QWindow的区别,以及如何在QWidget中嵌入第三方程序,并完美解决在QWidget中嵌入某些程序(比如Qt程序)时出现的白边问题。 下面是嵌入QQ音乐的样子,这首歌还不错。 先用spy++查看QQ音乐的窗口信息,如果安装了Visual Studio,工具菜单里自带spy++ 然后…

Spring Boot | Spring Boot 默认 “缓存管理“ 、Spring Boot “缓存注解“ 介绍

目录: 一、Spring Boot 默认 "缓存" 管理 :1.1 基础环境搭建① 准备数据② 创建项目③ 编写 "数据库表" 对应的 "实体类"④ 编写 "操作数据库" 的 Repository接口文件⑤ 编写 "业务操作列" Service文件⑥ 编写 "applic…

Redis入门到通关之数据结构解析-QuickList

文章目录 ☃️前提概要☃️ 配置项相关☃️简要源码☃️总结 Redis中的 QuickList 是一种特殊的数据结构,用于存储列表类型的数据。它的设计目的是在内存中高效地存储和操作大量的列表元素,尤其是当列表长度很大时。 QuickList的内部结构是一个由多个节…