JDBC连接数据库案例

2023-11-11

基于:

MySQL   8.0.3

JDK       1.8

数据库的创建

-- 创建学生数据库
CREATE DATABASE Student

-- 创建学生表
CREATE TABLE STU(
	ID INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
	NAME VARCHAR(200) NOT NULL,
	SEX CHAR(2) DEFAULT('男'),
	AGE INT NOT NULL,
	SCORE DOUBLE
);

-- 插入五条学生
INSERT INTO STU(NAME,SEX,AGE,SCORE) VALUES
	("张三",'男',20,100),
	("李四",'女',17,99),
	("王五",'女',24,50),
	("赵六",'女',28,60),
	("张一",'男',14,61),
	("张二",'男',22,77);

  jdbc.properties配置文件

driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/student
user = root
password = 123456
package hw1;

public class Student {
    private int id;
    private String name;
    private String sex;
    private int age;
    private double score;

    public Student() {
        super();
    }

    public Student(int id, String name, String sex, int age, double score) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.score = score;
    }

    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 getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getScore() {
        return score;
    }

    public void setScore(float score) {
        this.score = score;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex=" + sex +
                ", age=" + age +
                ", score=" + score +
                '}';
    }
}
package hw1;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class JDBCUtil {
    private static String DRIVER;
    private static String URL;
    private static String USER;
    private static String PASSWORD;

    static{
        try {
            //获取配置文件的字符流
            FileInputStream fis = new FileInputStream(new File("src/hw1/jdbc.properties"));
            //创建操作配置文件的工具对象
            Properties properties = new Properties();
            //将字节流加载进工具对像中
            properties.load(fis);
            //通过文件中的key获取对应的value
            DRIVER = properties.getProperty("driver");
            URL = properties.getProperty("url");
            USER = properties.getProperty("user");
            PASSWORD = properties.getProperty("password");
            fis.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //数据库连接操作类
    public static Connection getCoun(){
        Connection connection = null;
        try {
            //注册驱动
            Class.forName(DRIVER);
            //获取连接
            connection = DriverManager.getConnection(URL,USER,PASSWORD);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
}
package hw1;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class StudentManger {
    private Connection connection;
    private PreparedStatement ps;

    //添加方法
    public int add(Student student){
        int res = 0;
        //获取数据库连接
        connection = JDBCUtil.getCoun();
        //添加语句
        String sql = "INSERT INTO stu (NAME,SEX,AGE,SCORE) VALUES (?,?,?,?)";
        try {
            ps = connection.prepareStatement(sql);
            ps.setString(1,student.getName());
            ps.setString(2,student.getSex());
            ps.setInt(3,student.getAge());
            ps.setDouble(4,student.getScore());
            res = ps.executeUpdate();
            ps.close();
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return res;
    }

    public ArrayList<Student> selectAll(){
        ArrayList<Student> arrayList = new ArrayList<>();
        connection = JDBCUtil.getCoun();
        String sql = "SELECT ID,NAME,SEX,AGE,SCORE FROM stu";
        try {
            ps = connection.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            while (rs.next()){
                int id = rs.getInt("ID");
                String name = rs.getString("NAME");
                String sex = rs.getString("SEX");
                int age = rs.getInt("AGE");
                double score = rs.getDouble("SCORE");
                Student student = new Student(id,name,sex,age,score);
                arrayList.add(student);
            }
            ps.close();
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return arrayList;
    }

    public boolean removeByID(int id){
        int res = 0;
        connection = JDBCUtil.getCoun();
        String sql = "DELETE FROM stu WHERE ID = ?";
        try {
            ps = connection.prepareStatement(sql);
            ps.setInt(1,id);
            ps.executeUpdate();
            ps.close();
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return res == 0 ? false : true;
    }

    public boolean updateByName(String name,int age){
        int res = 0;
        connection = JDBCUtil.getCoun();
        String sql = "UPDATE stu SET AGE = ? WHERE NAME = ?";
        try {
            ps = connection.prepareStatement(sql);
            ps.setInt(1,age);
            ps.setString(2,name);
            ps.executeUpdate();
            ps.close();
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return res == 0 ? false : true;
    }
}
package hw1;

import java.util.ArrayList;
import java.util.Scanner;

public class Menu {
    private StudentManger studentManger = new StudentManger();
    private Scanner scanner = new Scanner(System.in);
    private String choose;
    public void mainMenu(){
        do {
            System.out.println("请输入您的选择");
            System.out.println("1、录入学生信息");
            System.out.println("2、查询学生信息");
            System.out.println("3、删除学生信息");
            System.out.println("4、修改学生信息");
            System.out.println("5、退出");
            choose = scanner.next();
            switch (choose){
                case "1":
                    addMenu();
                    break;
                case "2":
                    select();
                    break;
                case "3":
                    removeById();
                    break;
                case "4":
                    updateByName();
                    break;
                case "5":
                    break;
                default:
                    System.out.println("请输入重新输入!!!");
            }
        }while (!choose.equals("5"));
    }
    private void addMenu(){
        do {
            System.out.println("请输入姓名:");
            String name = scanner.next();
            System.out.println("请输入性别:");
            String sex = scanner.next();
            System.out.println("请输入年龄:");
            int age = scanner.nextInt();
            System.out.println("请输入成绩:");
            double score = scanner.nextDouble();
            Student student = new Student(0,name,sex,age,score);
            int res = studentManger.add(student);
            if (res == 0){
                System.out.println("录入失败");
            }else{
                System.out.println("录入成功"+res+"条数据");
            }
            System.out.println("是否继续");
            choose = scanner.next();
        }while(!choose.equals("n"));
    }
    private void select(){
        ArrayList<Student> arrayList = studentManger.selectAll();
        for (Student student : arrayList) {
            System.out.println(student);
        }
    }
    private void removeById(){
        do{
            System.out.println("请输入要删除的id");
            int id = scanner.nextInt();
            boolean res = studentManger.removeByID(id);
            if (res == true) {
                System.out.println("删除失败");
            }else{
                System.out.println("删除成功");
            }
            System.out.println("是否继续");
            choose = scanner.next();
        }while(!choose.equals("n"));
    }
    private void updateByName(){
        System.out.println("请输入要修改的姓名");
        String name = scanner.next();;
        System.out.println("请输入要修改的年龄");
        int age = scanner.nextInt();
        boolean res = studentManger.updateByName(name,age);
        if (res == false){
            System.out.println("修改成功");
        }else{
            System.out.println("修改失败");
        }
    }
}
package hw1;

public class Test {
    public static void main(String[] args) {
        Menu menu = new Menu();
        menu.mainMenu();
    }
}

 链接:https://pan.baidu.com/s/1SNiu9L7EfWEqJb8GPj55yg?pwd=1234 
提取码:1234

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDBC连接数据库案例 的相关文章

  • java中如何围绕另一个移动对象旋转一个对象?

    我对 Java 很陌生 想要编写一个简单的太阳系统 其中月球绕地球旋转 地球绕太阳旋转 一切正常 除了月亮不想正确移动 由于地球偏离月球的初始位置 月球的自转半径会根据该距离而增大 同样 当地球接近月球惯性位置时 自转半径会减小 如果初始位
  • 如何通过keytool命令删除已经导入的证书/别名?

    我正在尝试通过 keytool 命令删除已导入的证书 keytool delete noprompt alias initcert keystore keycloak jks 但低于异常 keytool 错误 java lang Excep
  • 选择 MYSQL 行,但将行转换为列,将列转换为行

    我想选择数据库中的所有行 但我希望它们按相反的顺序排列 意思是 我想使用第一列数据作为新实体 并将实体作为第一列 我想你明白我的意思 这是一个例子 id name marks 1 Ram 45 2 Shyam 87 to id 1 2 Na
  • 用户“root”@“localhost”的访问被拒绝

    我正在尝试从数据库中获取记录 但我面临这个访问被拒绝的问题 我尝试了 Stack Overflow 上提到的其他解决方案 例如向用户授予权限 但没有任何效果 访问数据库的代码 public void service HttpServletR
  • Android - Java - 发送 facebook 聊天消息的意图(facebook 禁用 xmpp)

    Facebook 已弃用 xmpp API 有没有办法打开意图 或将数据传递到fb 以在Android设备上发送聊天消息 设备上安装的 Facebook 和 Messenger 应用 谢谢 您需要将 uri 传递给意图 这里10000572
  • java.sql.SQLException: - ORA-01000: 超出最大打开游标数

    我收到 ORA 01000 SQL 异常 所以我有一些与之相关的疑问 最大打开游标是否与 JDBC 连接数完全相关 或者它们也与我们为单个连接创建的语句和结果集对象相关吗 我们正在使用连接池 有没有办法配置数据库中语句 结果集对象的数量 如
  • sql自连接表删除重复行

    我有下表 USERID LANGUAGEID 1 2 1 7 1 8 2 10 2 3 现在我想为每个用户创建所有可能的语言对 这意味着我希望结果集是 对于用户 1 2 7 7 8 2 8 对于用户 2 10 3 为此 我做了以下查询 SE
  • 如何对JConsole的密码文件的密码进行加密

    我正在使用 JConsole 访问我的应用程序 MBean 并使用 password properties 文件 但根据 Sun 的规范 该文件仅包含明文格式的密码 com sun management jmxremote password
  • Java反序列化中避免重复对象

    我有两个列表 list1 和 list2 其中包含对某些对象的引用 其中某些列表条目可能指向同一对象 然后 由于各种原因 我将这些列表序列化为两个单独的文件 最后 当我反序列化列表时 我想确保我不会重新创建超出需要的对象 换句话说 List
  • 如何迭代SparseArray?

    有没有办法迭代 Java SparseArray 适用于 Android 我用了sparsearray通过索引轻松获取值 我找不到 看来我找到了解决方案 我没有正确注意到keyAt index 功能 所以我会这样做 for int i 0
  • 更改 MySQL 中的列名称 [重复]

    这个问题在这里已经有答案了 搜索后我不知道我需要在 ALTER TABLE 中做什么genres更改列id to genre id有任何想法吗 alter table genres change id genre id int 10 aut
  • (mysql, php) 如何在插入数据之前获取auto_increment字段值?

    我正在将图像文件上传到存储服务器 在上传之前 我应该编写文件名 其中包含自动增量值 例如 12345 filename jpg 在插入数据库之前如何获取自动增量值 我只看到一种解决方案 插入空行 获取其自增值 删除这一行 使用 p 1 中的
  • 如何将我的自定义相机应用程序设置为默认应用程序?

    如果我使用以下代码 Intent takePictureIntent new Intent MediaStore ACTION IMAGE CAPTURE startActivityForResult takePictureIntent 1
  • 如何在MySql中将bool转换为int

    我是 MySql 的新手 所以我不知道很多东西 比如数据类型的转换 如何在 MySql 中将 bool 转换为 int 还有如何在 MySql 中将十进制转换为 Int 将布尔值类型转换为整数 SELECT CAST 1 1 AS SIGN
  • 将 1 添加到字段

    如何将以下 2 个查询变成 1 个查询 sql SELECT level FROM skills WHERE id id LIMIT 1 result db gt sql query sql level int db gt sql fetc
  • Android:如何以编程方式仅圆化位图的顶角?

    我目前正在使用这段代码 Override public Bitmap transform Bitmap source Bitmap result Bitmap createBitmap source getWidth source getH
  • 在调试模式下,哪些代码更改会自动反映在 Eclipse 中?

    我使用 eclipse 用于编写 调试 作为 IDE 在调试模式下 当我进行一些更改 例如初始化局部变量 时 它们会自动反映 但其他更改例如更改静态变量的值 有时我会收到一条消息 说我需要重新启动虚拟机 有时则不需要 现在的问题是哪些类型的
  • 用于将字符串与通配符模式进行匹配的递归函数

    所以我一整天都在试图解决这个作业 只是无法完成 以下函数接受 2 个字符串 第二个 不是第一个 可能包含 的 星号 An 是字符串的替换 空 1个字符或更多 它可以出现 仅在s2中 一次 两次 更多或根本不出现 它不能与另一个相邻 ab c
  • Spring Boot 健康执行器 - 什么时候上线?

    我找不到任何有关 Springs Health Actuator 何时返回 UP 状态的文档 你能依靠一切吗 Components正在初始化 会不会 Controller准备好满足请求了吗 为了测试应用程序上下文是否已加载 您可以执行此自定
  • 如何使用自定义转换器访问 jOOQ 生成的例程字段作为值?

    我在访问生成例程的字段时遇到问题PL pgSQL 用户定义函数 返回JSON 数据类型结果 已经提到this https stackoverflow com q 62535195 6805866问题 这是我的结果get all orders

随机推荐

  • Python 装饰器详解

    1 为什么需要装饰器 Leader让小A写两个数字相加和相减的函数 小A很快就写完了 def add x y return x y def sub x y return x y if name main result add 1 2 pri
  • SpringBoot多数据源nacos配置

    1 背景 因新项目对旧系统业务的重构 原有业务也只有单一数据源 项目开发到后期 现场存在历史数据迁移问题 在讨论后希望系统支持多数源的方式解决对历史数据同步调用的问题 项目的配置文件为nacos配置 涉及多个现场的升级部署 因此希望改动影响
  • Python爬虫:保姆级教你完成数据存储

    数据存储 在前面的几篇文章中 我分别总结了 什么是爬虫 requests模块总结 正则表达式提取数据 XPath解析数据 Beautiful Soup解析数据 pyquery解析数据 jsonpath提取json数据 在上面的几篇文章当中都
  • 微云网页版服务器繁忙,腾讯微云传输速度慢的几种原因及解决方法

    大家经常使用腾讯微云吧 不过大家知道腾讯微云传输速度慢怎么办吗 下面小编就给大家分享腾讯微云传输速度慢的几种原因及解决方法 希望会对你有所帮助 腾讯微云传输速度慢的几种原因及解决方法 1 网络宽带本身速度慢 解决办法 当处于网络使用高峰期的
  • JMeter 实时监控仪表板配置 (Grafana + InfluxDB)

    在服务器上跑 JMeter 做压测的话 给工具本身也配上实时监控是必须的 命令行输出能提供的信息太少 JMeter的 Backend Listener 支持 Graphite 和 InfluxDB 这里选择 InfluxDB 做时序数据库
  • 【Qt】贴图实现方向控制盘

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net iriczhao article details 122052059 一 效果走一波
  • 【Java基础】Windows快捷键

    Windows常用快捷键以及操作 注 本文内容均来自B站up 遇见狂神说 仅做学习使用 如有侵权删 1 与Ctrl有关的快捷键 Ctrl C 复制 Ctrl V 粘贴 Ctrl X 剪切 Ctrl Z 撤销 Ctrl A 全选 Ctrl S
  • 【吴恩达机器学习笔记】代价函数(一)

    目录 前言 一 单变量线性回归问题 二 建模误差 三 代价函数 平方和误差函数 平均平方和误差 代价函数 四 直观理解代价函数一 五 直观理解代价函数二 三维图像 等高线图 总结 前言 本栏目主要记录吴恩达老师的 机器学习 课程的学习笔记
  • node+axios实现服务端文件上传

    最近调研企业wx集成H5应用 其中有一个发送图文消息 需要上传图片到临时素材库 之前做过文件上传到阿里云 七牛云都是服务端提供封装好的文件上传接口 在客户端使用ajax的方式上传 所以就来踩踩坑 使用node axios实现服务端文件上传
  • Unity3D+Vuforia实现AR效果的案例

    实验步骤 1 打开Unity3D 新建一个项目 下载链接 参考我另一篇文章 Unity3D Vuforia配置 2 导入 import Vuforia包 我这个版本自带Vuforia 如果导入下载的会有冲突 出错 直接按照下图导入 Game
  • QT随机生成验证码 四位数字并 禁止编辑的方法

    随机生成数字 int Widget generateRandomNumber qsrand QTime 0 0 0 secsTo QTime currentTime for int i 0 i lt 4 i int test qrand r
  • 转 C#中的override

    https zhidao baidu com question 446422940 html 要扩展或修改继承的方法 属性 索引器或事件的抽象实现或虚实现 必须使用 override 修饰符 override 方法提供从基类继承的成员的新实
  • Qt跨线程信号和槽的连接

    Qt支持三种类型的信号 槽连接 1 直接连接 当signal发射时 slot立即调用 此slot在发射signal的那个线程中被执行 不一定是接收对象生存的那个线程 2 队列连接 当控制权回到对象属于的那个线程的事件循环时 slot被调用
  • 压测以及python的自省

    经过两个季度的开发 数据库收敛的项目一期终于到了最后阶段 这周完成最后的功能测试之后即将部署到测试环境进行压测 并进行运维文档的完善 下午小组会上 heng哥分享了python类和自省机制的相关内容 他用了苏格拉底那句经典的 The une
  • Java多线程,Android多线程

    目录 一 线程的概念 二 线程创建的方式及特点 三 线程创建方式 1 继承Thread类 2 实现Runnable接口 3 实现Callable接口 我觉得了解即可 4 AsyncTask异步任务 被弃用 5 AsyncTask替代方案 四
  • 最全的计算机网络思维导图

    计算机网络思维导图 概述 应用层 传输层 网络层 链路层 物理层 概述 应用层 传输层 网络层 链路层 物理层
  • ASP.NET 2.0数据操作(一)

    创建数据访问层的过程 第一步 在网站中添加新项 数据集 Visual Studio会问我们是否将DataSet添加到App Code文件夹中 选择 Yes 第二步 向数据集中添加TableAdapter控件 完成上步后 Visual Stu
  • PPT添加页码

    点击 插入 点击 幻灯片编号 点击 幻灯片编号 点击 全部应用 右下角出现编号
  • ue测试php,用户体验测试(UE测试)

    GO语言练习 channel 缓冲机制 1 代码 2 运行 3 解析 1 代码 buffer go package main import fmt time func readThre Web调试工具 Fiddler介绍 Fiddler 教
  • JDBC连接数据库案例

    基于 MySQL 8 0 3 JDK 1 8 数据库的创建 创建学生数据库 CREATE DATABASE Student 创建学生表 CREATE TABLE STU ID INT PRIMARY KEY AUTO INCREMENT N