java连接MySQL

news/2025/1/15 12:54:17/文章来源:https://www.cnblogs.com/njhwy/p/18404880

一. 下载驱动包

java通过JDBC(Java Database Connectivity) 包 连接数据库

<dependency>
   <groupId>com.mysql</groupId>
   <artifactId>mysql-connector-j</artifactId>
   <version>9.0.0</version>
</dependency>

二. 配置数据源(数据库的信息)

 

package zz.com;

import java.sql.*;

public class MySQLDemo {
   // MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL
   static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
   //final: 最终的
   //常量 : final修饰的变量 即值不能修改
   static final String DB_URL = "jdbc:mysql://localhost:3306/db0906?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";

   // 数据库的用户名与密码,需要根据自己的设置
   static final String USER = "root";
   static final String PASS = "root";

   public static void main(String[] args) {
       Connection conn = null;  //连接数据库对象变量
       Statement stmt = null;   //操作sql语句对象

       try{
           // 注册 JDBC 驱动
           Class.forName(JDBC_DRIVER);
           //抛出了检查性异常 1,try{}cath(){}, 2, 继续抛出 throws , 3, 伪装成运行时异常类 @SneakyThrows
           //相当于 import com.mysql.cj.jdbc.Driver, 并 new Driver, 代码中把该Driver对象注册到 DriverManager
           conn = DriverManager.getConnection(DB_URL,USER,PASS);
           stmt = conn.createStatement();

String name = "小小";
           String gender = "女";
           String sql = "insert into student(name,gender)values('name','gender')";
                  sql = "insert into student(name,gender)values('"+name+"','"+gender+"')";
                  sql = String.format("insert stuent student(name,gender)values('%s','%s')",name,gender);
           //把命令传递到mysql
           int row = stmt.executeUpdate(sql);
           System.out.println(row);

//           String sql = "update student set name = '小力一' where id = 14";
//           //把命令传递到mysql
//           int row = stmt.executeUpdate(sql);
//           System.out.println(row);

             String sql = "select * from student order by id desc ";
             ResultSet rs = stmt.executeQuery(sql);
             //ResultSet: 一个数据表格对象, 表格中有一个指针, 默认指向到第一行数据的前边
             //             指针指向到哪一行,就可以读取哪一行的数据
             //       rs.next() 方法把指针移动到下一行, 并且返回一个boolean值 true/false(该行没有数据)
             while(rs.next()){ //向下移动并且是true, 执行{}
                 int id = rs.getInt("id"); //根据字段的类型和字段名读取该行信息
                 String name = rs.getString("name");
                 System.out.println("id: " + id + " name: " + name);
            }
      }
       catch(ClassNotFoundException | SQLException e){
           System.out.println(e.getMessage());
      }
  }
}

数据库操作类

public class DB {
   // MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL
   static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
   //final: 最终的
   //常量 : final修饰的变量 即值不能修改
   static final String DB_URL = "jdbc:mysql://localhost:3306/db0906?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";

   // 数据库的用户名与密码,需要根据自己的设置
   static final String USER = "root";
   static final String PASS = "root";
   static  Connection conn = null;  //连接数据库对象变量
   static PreparedStatement ps = null;

   public static Connection getConnection() {
       if (conn == null) {
           try{
               Class.forName(JDBC_DRIVER);
               conn = DriverManager.getConnection(DB_URL,USER,PASS);
          }
           catch(Exception e){
               System.out.println(e.getMessage());
          }
      }
       return conn;
  }

   public static int executeUpdate(String sql, Object... params) {
       conn = getConnection();
       int row = 0;
       try {
           PreparedStatement ps = conn.prepareStatement(sql);
           //sql中有几个 ? 就需要有几个值替换, 即 params数组中就应该传递几个值
           for (int i = 0; i < params.length; i++) {
               ps.setObject(i + 1, params[i]);
               //分别替换sql中的 ?
          }
           row = ps.executeUpdate();
      } catch (SQLException e) {
           System.out.println(e.getMessage());
      }
       return row;
  }

   public static ResultSet executeQuery(String sql, Object... params) {
       conn = getConnection();
       ResultSet rs = null;
       try {
           PreparedStatement ps = conn.prepareStatement(sql);
           //sql中有几个 ? 就需要有几个值替换, 即 params数组中就应该传递几个值
           for (int i = 0; i < params.length; i++) {
               ps.setObject(i + 1, params[i]);
               //分别替换sql中的 ?
          }
           rs = ps.executeQuery();
      } catch (SQLException e) {
           System.out.println(e.getMessage());
      }
       return rs;
  }

   @SneakyThrows
   public static void close() {
       if(ps != null){
           ps.close();
           ps  = null;
      }
       if (conn != null) {
           conn.close();
           conn = null;
      }
  }
}

调用:

public class DBTest {
   @SneakyThrows
   public static void main(String[] args) {
       String sql = "insert into student(name,gender)values(?,?)";
       int row = DB.executeUpdate(sql,"小草","女");
       //sql中有几个 ? , params中就必须有几个值, 按照顺序替换前边的 ?
       System.out.println(row);

       String sql2 = "select * from student where id > ?";
       ResultSet rs = DB.executeQuery(sql2,"1");
       while (rs.next()){
           int id = rs.getInt("id");
           String name = rs.getString("name");
           System.out.println("id:"+id+",name:"+name);
      }

       DB.close();
  }
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gti前端代码提交

git bash中前端切换分支提交遇到的不懂的地方第一次gti前端提交 根据提示一步步看 首先 git check dev此时可能会报错: error: Your local changes to the following files would be overwritten by checkout: .env.development package.json Please commit your changes or s…

Ubuntu使用dd命令实现硬盘级复制

以前的Ubuntu系统用的机械硬盘,因为读写次数太多,已经出现问题了,速度很慢,开机提示坏道,于是买了一个固态硬盘,准备重装系统,但是重装系统,各种驱动、环境都要重装,太麻烦了,于是准备把以前的硬盘完整的复制到新硬盘,这样就不用重装各种驱动、环境了. 把新硬盘接上…

FancyVideo环境搭建推理

​引子很少关注360开源的代码,最近360AI团队开源了最新视频模型FancyVideo,据说RTX3090可跑。可以在消费级显卡 (如 GeForce RTX 3090) 上生成任意分辨率、任意宽高比、不同风格、不同运动幅度的视频,其衍生模型还能够完成视频扩展、视频回溯的功能,一种基于 UNet 架构的视…

计算机网络之TCP/IP协议简介

TCP/IP协议 简介 首先TCP/IP协议不只是表示TCP协议和IP协议两种协议,而是一个协议簇。协议簇是什么并不难理解,就是字面意思,一个由多个协议组合而成的集合体,其中最有代表性的就是TCP和IP这两个协议,除了这两个还有我们熟知的FTP、UDP等协议。当然我们下面主要介绍的还是…

博欧实习(三十四)

今日任务 1、今日继续完善系统,协助改善了汇总表,解决无法在线上数据库运行的问题。 2、修改监控实体,修改监控页面显示数据不正确问题。3、确认交付信息修改在调整,出库日期自动增加三个月

【可视化+编程】快速掌握seaborn的基础用法

https://mp.weixin.qq.com/s/gRkFrLbChEJ5kHsGokLA6A?poc_token=HNGw3majZY6E6VuU_gYN_ODo66iKNCpKzodh8_3T

密码正则表达式

String regex = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*(){}+=]).{9,}$";

centos7.9安装mysql8.0.39

1. 添加 MySQL Yum 仓库 首先,需要下载并安装 MySQL Yum 仓库 RPM 包:sudo rpm -Uvh https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm2. 更新 Yum 缓存 安装完 Yum 仓库后,更新 Yum 缓存:sudo yum clean all sudo yum makecache3. 安装 MySQL 现在可以…

在stable diffussion中完美修复AI图片

无论您的提示和模型有多好,一次性获得完美图像的情况很少见。修复小缺陷的不可或缺的方法是图像修复(inpainting)无论您的提示和模型有多好,一次性获得完美图像的情况很少见。 修复小缺陷的不可或缺的方法是图像修复(inpainting)。在这篇文章中,我将通过一些基本示例来介…

51nod 1020 逆序排列

51nod 1020 逆序排列 学习笔记 其实要预处理,但唐的我非要每次都求一遍。 设状态为 \(dp[i][j]\) 选了 i 个数逆序对数为 j 的排序种类数。 首先初始化 \(dp[i][0]=1\) 即没有逆序对,转移方程 \(dp[i][j]=dp[i-1][j]+dp[i-1][j-1]+……+dp[i-1][j-i]\) 这是显然的(放上这个数…

2181.合并零之间的节点

问题描述: 给你一个链表的头节点 head ,该链表包含由 0 分隔开的一连串整数。链表的 开端 和 末尾 的节点都满足 Node.val == 0 。 对于每两个相邻的 0 ,请你将它们之间的所有节点合并成一个节点,其值是所有已合并节点的值之和。然后将所有 0 移除,修改后的链表不应该含有…

调谐半导体吸收光谱(TDLAS)技术简介

一、调谐半导体吸收光谱(TDLAS)技术简介 TDLAS是Tunable Diode Laser Absorption Spectroscopy的简称,该技术主要是利用可调谐半导体激光器的窄线宽和波长随注入电流改变的特性,通过调制激光器的波长,使激光器的波长扫描过被测气体分子的吸收峰,从而基于比尔朗伯定律,使气…