jdbc(mysql)

news2024/9/29 23:58:39

1.概述

jdbc:java database connection(java与数据库连接)

java可以连接不同数据库,不同数据库连接细节不同,具体细节都由数据库自己实现
由java设计出一系列连接数据库的接口规范,然后由不同的数据库开发商去实现。jdbc实现了java与数据库之间的数据交互。

2.jdbc连接步骤

1.创建一个java项目,创建一个lib包和idea包同级,接着把需要连接的数据库jar包复制到lib内。

 2.右键jar文件,点击add as library,这一步完成后就可以看见jar文件可以打开了,这一步才是真正意义上的加入可以使用这个jar文件,完成这一步后才可以点开jar包。

3.加载驱动
 

//反射机制加载 两个留一个
            Class.forName("com.mysql.cj.jdbc.Driver");
            //DriverManager.registerDriver(new Driver());
            //建立与数据库的连接,获得连接对象
            String url = "jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";//serverTimezone=Asia/Shanghai是数据8才加上的,以前版本的可以不用写
            String user = "root";
            String password = "123456";
        //Connection connection = DriverManager.getConnection(url, user, password);
        Connection connection = DriverManager.getConnection(url, user, password);
        //发送sql
        Statement statement = connection.createStatement();
        statement.executeUpdate("insert into course(name) values('操作系统')");
        //关闭连接
        statement.close();
        connection.close();

3.jdbc连接两种方式

1。创建statement对象

 创建statement对象,此类方式对于sql语句主要是将sql语句与数据拼接发送到数据库进行实现

public void add(String NAME,String gender,String birthday,String phonenum,String adress,double height,int majorid) throws ClassNotFoundException, SQLException {
        //加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //建立连接
        String url="jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";
        String user="root";
        String password="123456";
        Connection connection = DriverManager.getConnection(url,user ,password );
        //发送sql
        Statement statement = connection.createStatement();
        statement.executeUpdate("INSERT INTO student(NAME,gender,birthday,phonenum,adress,height,majorid)" +
                "VALUES('"+NAME+"','"+gender+"','"+birthday+"','"+phonenum+"','"+adress+"',"+height+","+majorid+")");

        //关闭连接
        statement.close();
        connection.close();


    }

2. 创建preparedStatement对象

创建preparedStatement对象,此类方法运用?占位符,通过preparedStatement的setobject方法依次对占位符?进行赋值,有较高的安全性。

public void add(String NAME,String gender,String birthday,String phonenum,String adress,double height,int majorid) throws ClassNotFoundException, SQLException {
        //加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //建立连接
        String url="jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";
        String user="root";
        String password="123456";
        Connection connection = DriverManager.getConnection(url,user ,password );
        //发送sql
        //预先编译 ?是占位符,预先写好sql语句存入对象里面,后面通过对象方法存入数据,最后在发送完整的sql语句
        PreparedStatement preparedStatement = connection.prepareStatement("insert into student(name,gender,birthday,phonenum,adress,height,majorid)values (?,?,?,?,?,?,?)");
        preparedStatement.setObject(1,NAME);
        preparedStatement.setObject(2,gender);
        preparedStatement.setObject(3,birthday);
        preparedStatement.setObject(4,phonenum);
        preparedStatement.setObject(5,adress);
        preparedStatement.setObject(6,height);
        preparedStatement.setObject(7,majorid);
        //发送sql语句
        preparedStatement.executeUpdate();





        //关闭连接
        preparedStatement.close();
        connection.close();


    }

 4.两种jdbc连接方式的区别

preparedstatement 与 statement的区别
相同:都是向数据库发送sql的
不同:prepared statement :先预写sql语句,数据使用?占位,然后通过setobject方法对?依次赋值,由1开始,安全可靠,
在赋值时进行检测,防止被攻击
statement:直接在sql语句1拼接出来,安全性差,例如,可以在删除语句中拼接or 1=1这样每一条数据库信息都会被删除,但是prepared statement会进行检测所有比statement安全一些
 

5.查数据

jdbc主要功能就是增删改查,增删改方式差不多,知道如何连接就可以发现规律,增删改只需要对数据库数据进行操作,查的话会传回数据,与前面的略有不同。

对于查数据我们还是使用prepared statement,使用他的executeQuery()方法,此方法会返回一个set集合用来存储查找到的的数据,数据可能很多,所有我们可以使用arraylist来存储。

我们首先创建一个student类做举例 

public class student {
    private int id;
    private String name;
    private String gender;
    private Date birthday;
    private String phonenum;
    private String adress;
    private Date regTime;
    private double heught;
    private int majorid;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getPhonenum() {
        return phonenum;
    }

    public void setPhonenum(String phonenum) {
        this.phonenum = phonenum;
    }

    public String getAdress() {
        return adress;
    }

    public void setAdress(String adress) {
        this.adress = adress;
    }

    public Date getRegTime() {
        return regTime;
    }

    public void setRegTime(Date regTime) {
        this.regTime = regTime;
    }

    public double getHeught() {
        return heught;
    }

    public void setHeught(double heught) {
        this.heught = heught;
    }

    public int getMajorid() {
        return majorid;
    }

    public void setMajorid(int majorid) {
        this.majorid = majorid;
    }

    @Override
    public String toString() {
        return "student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                ", birthday=" + birthday +
                ", phonenum='" + phonenum + '\'' +
                ", adress='" + adress + '\'' +
                ", regTime=" + regTime +
                ", heught=" + heught +
                ", majorid=" + majorid +
                '}';
    }
}

这是我们数据库中学生表的属性。 

 

public ArrayList<student> select() throws ClassNotFoundException, SQLException {//多条数据
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url="jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";
        String user="root";
        String password="123456";
        Connection connection = DriverManager.getConnection(url,user ,password );
        PreparedStatement preparedStatement = connection.prepareStatement("select * from student where name = ?");
        preparedStatement.setObject(1,"刘晨");
        ResultSet set = preparedStatement.executeQuery();
       ArrayList<student> a = new ArrayList<>();
        while (set.next()){
            student st = new student();
            st.setId(set.getInt("id"));//get里面的字段必须与数据库中要查找的数据的字段相同
            st.setGender(set.getString("gender"));
            st.setBirthday(set.getDate("birthday"));
            st.setName(set.getString("NAME"));
            st.setHeught(set.getDouble("height"));
            st.setAdress(set.getString("adress"));
            st.setMajorid(set.getInt("majorid"));
            st.setPhonenum(set.getString("phonenum"));
            st.setRegTime(set.getDate("reg_time"));
            a.add(st);
        }
        set.close();
        preparedStatement.close();
        connection.close();

        return a;


    }

 


 

 

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

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

相关文章

C语言程序设计26

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 习题2.3 上机运行下面的程序&#xff0c;分析输出结果 代码 //《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 //习题2.3 上机运行下面的程序&#xff0c;分析输出结果#include <stdio.h> int …

【MYSQL】MYSQL逻辑架构

mysql逻辑架构分为3层 mysql逻辑架构分为3层 1). 连接层&#xff1a;主要完成一些类似连接处理&#xff0c;授权认证及相关的安全方案。 2). 服务层&#xff1a;在 MySQL据库系统处理底层数据之前的所有工作都是在这一层完成的&#xff0c;包括权限判断&#xff0c;SQL接口&…

GD 32 IIC通信协议

前言&#xff1a; ... 通信方式 通信方式分为串行通信和并行通信。常见的串口就是串行通信的方式 常用的串行通信接口 常用的串行通信方式有USART,IIC,USB,CAN总线 同步与异步 同步通信&#xff1a;IIC是同步通信&#xff0c;有两个线一个是时钟信号线&#xff0c;一个数数据…

rocketMq-5.2.0双主双从搭建

最近在研究rocketmq5.x的运行机制&#xff0c;研究到高可用章节&#xff0c;看到rocketMq采用了主从机制实现高可用&#xff0c;将broker分成了master和slave。为了更好的理解主从源码&#xff0c;我觉着需要先搭建一个主从的集群&#xff0c;先了解主从集群是怎么使用的。 这篇…

【practise】只出现一次的数字

现在给你一个数组&#xff0c;里面放了一些数字&#xff0c;里面都是两两成对&#xff0c;只有一个数字是单独的&#xff0c;要求找出其中只出现一次的数字。相必这道题是非常简单了&#xff0c;有很多解法比如说用暴力求解&#xff1f;比如说用位运算&#xff1f;甚至说用哈希…

使用Docker+ollama部署大模型

Docker的安装----在 Ubuntu 系统上安装 Docker 一&#xff1a;配置系统的 APT 软件包管理器 首先添加 Docker 的官方 GPG 密钥 # Add Dockers official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/ke…

使用 宝塔面板 部署 php网站

【语料库网站】宝塔面板 在线部署全过程 代码仓库&#xff1a;https://github.com/talmudmaster/RedCorpus 网站介绍 语料库提供双语文本检索和分享功能。供英语、翻译相关专业的爱好者&#xff0c;学生和老师学习使用。 该网站是对BiCorpus开源项目的二次开发。 技术栈&am…

DA14695 printf没办法打印浮点数

是因为没有打开浮点数库&#xff0c;添加了这个库也会导致堆内存的增加

基于Kahn算法|动态线程池,支持扩展点并发执行|召回|过滤

背景 在《分布式领域扩展点设计稿》一文中&#xff0c;我们提到针对业务横向扩展点和纵向扩展点的编排能力。 那有这样的一种场景&#xff1a;针对于一次会话&#xff0c;同时会调很多外部服务&#xff0c;同时这些RPC服务会有多种直接或间接的关系&#xff0c;是否有更高效的…

【Spring】Bean详细解析

1.Spring Bean的生命周期 整体上可以简单分为四步&#xff1a;实例化 —> 属性赋值 —> 初始化 —> 销毁。初始化这一步涉及到的步骤比较多&#xff0c;包含 Aware 接口的依赖注入、BeanPostProcessor 在初始化前后的处理以及 InitializingBean 和 init-method 的初始…

【Vue3】组件通信之$refs

【Vue3】组件通信之$refs 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日…

操作系统|day4.Linux、Linux内核、Linux负载、Linux文件存储

文章目录 LinuxLinux内核定义功能态 Linux负载定义 Linux文件存储链接分类区别使用场景 拷贝 Linux Linux内核 定义 内核是操作系统的核心&#xff0c;具有很多最基本功能&#xff0c;它负责管理系统的进程、内存、设备驱动程序、文件和网络系统&#xff0c;决定着系统的性能…

【大模型系列】LanguageBind(ICLR2024.01)

Paper&#xff1a;https://arxiv.org/abs/2310.01852Github&#xff1a;https://github.com/PKU-YuanGroup/LanguageBindHuggingface&#xff1a;https://huggingface.co/spaces/LanguageBind/LanguageBindAuthor&#xff1a;Bin Zhu et al. 北大袁粒团队 文章目录 1 LanguageB…

临床试验的五大意义是什么?

临床试验是临床数据科学和现代医学研究中至关重要的环节&#xff0c;它通过严格的科学方法验证新药、新疗法以及医疗器械的安全性和有效性。临床试验不仅推动了医学科学的进步&#xff0c;也为患者提供了新的治疗选择&#xff0c;提升了公共卫生水平&#xff0c;具有重大的意义…

牛客JS题(二十二)数组过滤

注释很详细&#xff0c;直接上代码 涉及知识点&#xff1a; 合理封装范围判断函数 题干&#xff1a; 我的答案 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /></head><body><select name"&q…

【C语言】C语言期末突击/考研--详解一维数组与字符数组

目录 ​一、一维数组 1.数组的定义 2.一维数组在内存中的存储 二、数组访问越界与数组的传递 1.数组的访问越界 2.数组的传递 三、字符数组与scanf读取字符串 1.字符数组的初始化及传递 2.scanf读取字符串 四、gets函数与puts函数&#xff0c;str系列字符串操作函数 …

「iOS」自定义Modal转场——抽屉视图的实现

「iOS」自定义Modal转场——抽屉视图的实现 文章目录 「iOS」自定义Modal转场——抽屉视图的实现前言错误尝试自定义Modal转场实现流程自定义动画类UIPresentationController 成果展示参考文章 前言 在仿写网易云的过程之中&#xff0c;看到学长之前仿写时实现的抽屉视图&…

Java面试题-集合类

目录 1、请简单介绍下 Java 的集合类吧。 Collection Set TreeSet和HashSet List ArrayList 和 LinkedList 数组和链表的区别 Java 的列表有哪些实现类&#xff1f; Vector Queue Map 能说下 HashMap 的实现原理吗&#xff1f; 能说下 HashMap 的扩容机制吗&#x…

达梦数据库的系统视图v$cachepln

达梦数据库的系统视图v$cachepln 达梦数据库的系统视图V$CACHEPLN的主要作用是提供缓存中SQL执行计划的信息&#xff0c;在 ini 参数 USE_PLN_POOL !0 时才统计。通过查询这个视图&#xff0c;用户可以获取到缓存中的执行计划及其相关信息&#xff0c;如SQL语句文本等。这有助…

JavaScript青少年简明教程:DOM和CSS简介

JavaScript青少年简明教程&#xff1a;DOM和CSS简介 DOM简介 DOM&#xff08;Document Object Model&#xff09;将文档表示为一个树形结构&#xff0c;其中每个节点都是一个对象&#xff0c;每个对象都有其自身的属性和方法。 通过对DOM的操作&#xff0c;开发者可以使用编…