jdbc简单使用

两个数据单元类

student和grade

public class student {String name;String phoneNumber;String gender;String studentId;public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPhoneNumber() {return phoneNumber;}public void setPhoneNumber(String phoneNumber) {this.phoneNumber = phoneNumber;}public String getStudentId() {return studentId;}public void setStudentId(String studentId) {this.studentId = studentId;}@Overridepublic String toString() {return "student{" +"gender='" + gender + '\'' +", name='" + name + '\'' +", phoneNumber='" + phoneNumber + '\'' +", studentId='" + studentId + '\'' +'}';}public student(String studentId, String name, String gender,String phoneNumber ) {this.gender = gender;this.name = name;this.phoneNumber = phoneNumber;this.studentId = studentId;}public student(){}
}
public class grade{String studentId;String name;double chinese;double math;double english;public grade(String studentId,String name,double chinese,double math, double english) {this.chinese = chinese;this.english = english;this.math = math;this.name = name;this.studentId = studentId;}public grade(){}public double getChinese() {return chinese;}public void setChinese(double chinese) {this.chinese = chinese;}public double getEnglish() {return english;}public void setEnglish(double english) {this.english = english;}public double getMath() {return math;}public void setMath(double math) {this.math = math;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getStudentId() {return studentId;}public void setStudentId(String studentId) {this.studentId = studentId;}}

一个表接口类

tableOperate<E>,E为数据单元类

import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;public interface tableOperate<E> {void add(Connection conn);void delete(Connection conn);ArrayList<E> outDatabase(Connection conn,String tableName) throws SQLException;void modify(Connection conn);
}
/*这个接口是每个表里面的操作方法
* 所有的表都应该继承这个接口*/

两个表类

students表和grades表

import java.sql.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;public class students implements tableOperate<student>{@Overridepublic void add(Connection conn) {Scanner scanner =new Scanner(System.in);student stu = new student();System.out.println("输入学号");stu.setStudentId(scanner.next());System.out.println("输入姓名");stu.setName(scanner.next());System.out.println("输入性别");stu.setGender(scanner.next());System.out.println("输入手机号码");stu.setPhoneNumber(scanner.next());String insert_sql = "insert into students(studentId,name,gender,phoneNumber)values(?,?,?,?)";try {PreparedStatement pstmt = conn.prepareStatement(insert_sql);pstmt.setString(1, stu.getStudentId());pstmt.setString(2, stu.getName());pstmt.setString(3, stu.getGender());pstmt.setString(4, stu.getPhoneNumber());pstmt.executeUpdate();pstmt.close();} catch (Exception e) {e.printStackTrace();} finally {}}@Overridepublic void delete(Connection conn) {Scanner scanner =new Scanner(System.in);System.out.println("输入要删除的学生学号");String studentId = scanner.next();int flag = 0;String delete_sql = "DELETE FROM students WHERE studentId = ?;";int count = 0;try {PreparedStatement pstmt = conn.prepareStatement(delete_sql);pstmt.setString(1, studentId);count = pstmt.executeUpdate();} catch (SQLException e) {throw new RuntimeException(e);}if (count > 0) {System.out.println("删除成功");} else {System.out.println("删除失败");}}@Overridepublic ArrayList<student> outDatabase(Connection conn, String tableName) throws SQLException {ArrayList<student> list=new ArrayList<>();String sql= "select* from "+tableName;Statement stmt= conn.createStatement();ResultSet infos=stmt.executeQuery(sql);while(infos.next()){String studentId = infos.getString("studentId");String name = infos.getString("name");String gender = infos.getString("gender");String phoneNumber = infos.getString("phoneNumber");student stu = new student(studentId, name, gender, phoneNumber);list.add(stu);}return list;}@Overridepublic void modify(Connection conn) {System.out.println("请输入要修改的学生的学号");Scanner scanner =new Scanner(System.in);String studentID=scanner.next();System.out.println("请输入要修改的字段信息");System.out.println("有四个可修改的字段,分别为gender,name,phoneNumber");String field=scanner.next();System.out.println("输入修改后的信息");String newInfos=scanner.next();String sql="UPDATE students SET "+field+" = ? where studentId = ?";try {PreparedStatement pstmt= conn.prepareStatement(sql);pstmt.setString(1,newInfos);pstmt.setString(2,studentID);int count=pstmt.executeUpdate();if(count>0){System.out.println("修改成功");}else{System.out.println("修改失败");}} catch (SQLException e) {System.out.println("出现错误");throw new RuntimeException(e);}}}
import java.sql.*;
import java.util.ArrayList;
import java.util.Scanner;public class grades implements tableOperate<grade>{@Overridepublic void add(Connection conn) {Scanner scanner =new Scanner(System.in);System.out.println("请输入学号");String studentId=scanner.next();System.out.println("请输入姓名");String name=scanner.next();System.out.println("请输入语文成绩");double chinese=scanner.nextDouble();System.out.println("请输入数学成绩");double math=scanner.nextDouble();System.out.println("请输入英语成绩");double english=scanner.nextDouble();String sql="insert into grades(studentId,name,chinese,math,english)values(?,?,?,?,?)";try {PreparedStatement pstmt=conn.prepareStatement(sql);pstmt.setString(1,studentId);pstmt.setString(2,name);pstmt.setDouble(3,chinese);pstmt.setDouble(4,math);pstmt.setDouble(5,english);pstmt.executeUpdate();} catch (SQLException e) {throw new RuntimeException(e);}}@Overridepublic void delete(Connection conn) {Scanner scanner =new Scanner(System.in);System.out.println("输入要删除的学生学号");String studentId = scanner.next();int flag = 0;String delete_sql = "DELETE FROM grades WHERE studentId = ?;";int count = 0;try {PreparedStatement pstmt = conn.prepareStatement(delete_sql);pstmt.setString(1, studentId);count = pstmt.executeUpdate();} catch (SQLException e) {throw new RuntimeException(e);}if (count > 0) {System.out.println("删除成功");} else {System.out.println("删除失败");}}@Overridepublic ArrayList<grade> outDatabase(Connection conn, String tableName) throws SQLException {ArrayList<grade> list=new ArrayList<>();String sql= "select* from "+tableName;Statement stmt= conn.createStatement();ResultSet infos=stmt.executeQuery(sql);while(infos.next()){String studentId = infos.getString("studentId");String name = infos.getString("name");double chinese = infos.getDouble("chinese");double math = infos.getDouble("math");double english = infos.getDouble("english");grade stucg = new grade(studentId, name, chinese, math,english);list.add(stucg);}return list;}@Overridepublic void modify(Connection conn) {System.out.println("请输入要修改的学生的学号");Scanner scanner =new Scanner(System.in);String studentID=scanner.next();System.out.println("请输入要修改的字段信息");System.out.println("有四个可修改的字段,分别为name,chinese,math,english");String field=scanner.next();System.out.println("输入修改后的信息");if(field.equals(("name"))){String newInfos=scanner.next();String sql="UPDATE grades SET "+field+" = ? where studentId = ?";try {PreparedStatement pstmt=conn.prepareStatement(sql);pstmt.setString(1,newInfos);pstmt.setString(2,studentID);int count=pstmt.executeUpdate();if(count>0){System.out.println("修改成功");}else{System.out.println("修改失败");}} catch (SQLException e) {throw new RuntimeException(e);}}else{double newInfos=scanner.nextDouble();String sql="UPDATE grades SET "+field+" = ? where studentId = ?";try {PreparedStatement pstmt=conn.prepareStatement(sql);pstmt.setDouble(1,newInfos);pstmt.setString(2,studentID);int count=pstmt.executeUpdate();if(count>0){System.out.println("修改成功");}else{System.out.println("修改失败");}} catch (SQLException e) {throw new RuntimeException(e);}}}
}

一个表的操作类

operateInterFace,

<E> void operate(Connection conn, tableOperate<E> table) throws SQLException

接受一个接口实现类来实现对不同表的操作

import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Scanner;public class operateInterFace {public static <E> void operate(Connection conn, tableOperate<E> table) throws SQLException {int choice=-1;while(choice!=0){System.out.println("1.往表内添加信息");System.out.println("2.往表内删除信息");System.out.println("3.将表内信息导入到一个容器内");System.out.println("4.修改表中字段下的信息");System.out.println("0.退出");Scanner scanner=new Scanner(System.in);choice= scanner.nextInt();if(choice==1){table.add(conn);}else if(choice==2){table.delete(conn);}else if(choice==3){ArrayList<E> list=table.outDatabase(conn,table.getClass().getName());}else if(choice==4){table.modify(conn);}else if(choice==0){break;}else {System.out.println("无效操作,请重试");}}}
}
/*这个类是实现每一个表的操作交互的,可以将表传入参数当中*/

数据库操作类

里面包含对数据库表的操作

主方法在这个类里面

import java.lang.reflect.Constructor;
import java.sql.*;
import java.util.Scanner;public class dataBases {String databasesName;String user;String password;public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getDatabasesName() {return databasesName;}public void setDatabasesName(String databasesName) {this.databasesName = databasesName;}public String getUser() {return user;}public void setUser(String user) {this.user = user;}public dataBases(String databasesName,String user,String password)   {this.password = password;this.databasesName = databasesName;this.user = user;}//获取一个名字为databasesName的数据库信息,包含账户名称和密码public static Connection connectionUser(dataBases db) throws Exception {Class.forName("com.mysql.cj.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/"+db.getDatabasesName(),db.getUser(),db.getPassword());if (conn != null) {System.out.println("连接成功");}else{System.out.println("连接失败");}return conn;}//连接到db数据库public static void showTables(Connection conn,String dbName) throws SQLException {String sql="show tables";Statement stmt= conn.createStatement();ResultSet res=stmt.executeQuery(sql);while(res.next()){String table_name=res.getString("Tables_in_"+dbName);System.out.println(table_name);}}//展示db数据库的表public static void creteTables(Connection coon, String tableName) throws SQLException {Scanner scanner =new Scanner(System.in);System.out.println("输入创建的字段名称和类型,中间用逗号隔开,并且最后没有逗号");String dataType_Name=scanner.nextLine();String sql= "CREATE TABLE "+tableName+"("+dataType_Name+")";Statement stmt= coon.createStatement();stmt.execute(sql);}//创建一个表public static void deleteTables(Connection conn,String tableName){String sql="drop table "+tableName;try {Statement stmt= conn.createStatement();stmt.execute(sql);} catch (SQLException e) {System.out.println("删除失败");throw new RuntimeException(e);}}//删除一个表public static void selectTables(Connection conn,String tableName){String sql="select* from "+tableName;try {Statement stmt = conn.createStatement();ResultSet res=stmt.executeQuery(sql);ResultSetMetaData metaData =res.getMetaData();//获取结果集的元数据int columnCount=metaData.getColumnCount();//获取结果集中的列数// 打印列名for (int i = 1; i <= columnCount; i++) {System.out.print(metaData.getColumnName(i) + "\t");}System.out.println();while (res.next()) {// 打印每一列的值for (int i = 1; i <= columnCount; i++) {System.out.print(res.getString(i) + "\t");}System.out.println(); // 换行}System.out.println();while(res.next()){}} catch (SQLException e) {throw new RuntimeException(e);}}//查询表中的内容public static void changeTableName(Connection conn) throws Exception{Scanner scanner=new Scanner(System.in);System.out.println("请输入原来的表名");String oldTableName= scanner.next();System.out.println("请输入修改后的表名");String newTableName=scanner.next();String sql="RENAME TABLE "+oldTableName+" TO "+newTableName;Statement stmt= conn.createStatement();stmt.execute(sql);}//更改表名public static void userInterFace(Connection conn,dataBases db) throws Exception {String choice;Scanner scanner=new Scanner(System.in);while(true){System.out.println("1.创建表");System.out.println("2.展示所有表");System.out.println("3.删除表");System.out.println("4.操作表");System.out.println("5.修改表名");System.out.println("6.展示表的内容");System.out.println("0.退出");System.out.println("请输入你的选项");choice= scanner.next();if(choice.equals("1")){System.out.println("按0返回到上一步");System.out.println("请输入要创建的表的名称");String tableName=scanner.next();if(tableName.equals("0")){continue;}try {creteTables(conn,tableName);} catch (SQLException e) {throw new RuntimeException(e);}}else if(choice.equals("2")){System.out.println("展示已连接到的数据库的所有表");showTables(conn,db.getDatabasesName());}else if(choice.equals("3")){System.out.println("按0返回到上一步");System.out.println("请输入要删除的表的名称");String tableName=scanner.next();if(tableName.equals("0")){continue;}deleteTables(conn,tableName);}else if(choice.equals("4")) {System.out.println("以下是数据库中所有的表");showTables(conn,db.getDatabasesName());System.out.println("按0返回到上一步");System.out.println("请输入要操作的表的名称");String tableName = scanner.next();if(tableName.equals("0")){continue;}Class<?> tableClass = Class.forName(tableName);Constructor<?> constructor = tableClass.getDeclaredConstructor();//获取无参构造器Object tableObject=constructor.newInstance();//获取一个object实例tableOperate tableInstance=(tableOperate)tableObject;//转化为继承接口类类型operateInterFace.operate(conn,tableInstance);/*                tableOperate instance= (tableOperate) tableClass.newInstance();if(instance==null){System.out.println("没有该表");break;}operateInterFace.operate(conn,instance);*//*                if (tableName.equals("students")) {students students = new students();operateInterFace.operate(conn, students);} else if (tableName.equals("t1")) {System.out.println("无法操作");} else if (tableName.equals("phone_table")) {System.out.println("无法操作");} else {System.out.println("没有该表");break;}*/}else if(choice.equals("5")){changeTableName(conn);}else if(choice.equals("6")){System.out.println("请输入要查询的表的内容");String tableName=scanner.next();selectTables(conn,tableName);}else if(choice.equals("0")){break;} else{System.out.println("无效操作,请重试");}}}//数据库操作交互界面public static void showdataBases(Connection conn) throws Exception {String sql="show databases";Statement stmt =conn.createStatement();ResultSet res=stmt.executeQuery(sql);while(res.next()){System.out.println(res.getString("Database"));}}public static Connection driverConnection() throws Exception {Scanner scanner=new Scanner(System.in);Class.forName("com.mysql.cj.jdbc.Driver");System.out.println("请输入用户名");String user=scanner.next();System.out.println("请输入密码");String password=scanner.next();Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/",user,password);if(conn!=null){System.out.println("连接成功!");}return conn;}//驱动连接public static void main(String[] args) throws Exception {Scanner scanner=new Scanner(System.in);while(true){String choice;System.out.println("1.连接到数据库");System.out.println("2.创建数据库");System.out.println("3.删除数据库");System.out.println("4.展示所有数据库");System.out.println("0.退出");System.out.println("请输入你的选项");choice=scanner.next();if(choice.equals("1")){System.out.println("输入要连接的数据库的名称");String databaseName=scanner.next();System.out.println("输入用户名称");String user=scanner.next();System.out.println("输入密码");String password=scanner.next();dataBases db=new dataBases(databaseName,user,password);//初始化数据库和连接信息Connection conn=connectionUser(db);//与初始化过后的数据库db进行连接userInterFace(conn,db);}else if(choice.equals("2")){Connection conn=driverConnection();System.out.println("请输入要创建的数据库的名称");String databaseName=scanner.next();String sql="CREATE DATABASE " +databaseName+" CHARACTER SET=utf8";Statement stmt=conn.createStatement();stmt.execute(sql);}else if(choice.equals("3")){Connection conn = driverConnection();System.out.println("请输入要删除的数据库的名称");String databaseName=scanner.next();String sql="drop database "+databaseName;Statement stmt=conn.createStatement();stmt.executeUpdate(sql);}else if(choice.equals("0")){break;}else if (choice.equals("4")){Connection conn=driverConnection();showdataBases(conn);}}}
}

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

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

相关文章

【小白学机器学习28】 统计学脉络+ 总体+ 随机抽样方法

目录 参考书&#xff0c;学习书 0 统计学知识大致脉络 1 个体---抽样---整体 1.1 关于个体---抽样---整体&#xff0c;这个三段式关系 1.2 要明白&#xff0c;自然界的整体/母体是不可能被全部认识的 1.2.1 不要较真&#xff0c;如果是人为定义的一个整体&#xff0c;是可…

《Python游戏编程入门》注-第4章5

2.3 实现开始游戏的功能 当显示图1所示的游戏启动界面后&#xff0c;根据提示点击“确定”按键&#xff0c;则可以开始游戏。也就是要完成键盘监听的功能&#xff0c;当游戏程序监听到玩家点击了“确定”按键后&#xff0c;开始游戏。 在《Python游戏编程入门注-第4章2》中介…

mysql中的锁理解

1.共享锁&#xff0c;排他锁&#xff0c;也叫读锁和写锁 共享锁(S锁)(读锁)&#xff1a;事务在读取记录的时候获取共享锁&#xff0c;允许其它事务同时获取共享锁。 排他锁(X锁)(写锁)&#xff1a;事务在修改记录的时候获取排他锁&#xff0c;只允许一个事务获取排他锁&#x…

【C++】位图详解(一文彻底搞懂位图的使用方法与底层原理)

目录 1.位图的概念 2.位图的使用方法 定义与创建 设置和清除 位访问和检查 转换为其他格式 3.位图的使用场景 1.快速的查找某个数据是否在一个集合中 2.排序去重 3.求两个集合的交集和并集 4.位图的底层实现 私有成员定义与初始化 set和reset的实现 前面的博客我们…

补齐:相交链表:扣160

梦重新开始的地方 – 相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。图示两个链表在节点 c1 开始相交&#xff1a; 示例&#xff1a; 何解&#xff1f; 暴力&…

Python:入门基础

目录 常量和表达式 变量 变量的语法 变量的类型 动态类型特性 注释的使用 输入和输出 通过控制台输出 通过控制台输入 运算符 算术运算符 关系运算符 逻辑运算符 赋值运算符 常量和表达式 print是Python中的一个内置函数&#xff0c;使用print函数可以将数据打印…

手动搭建koa+ts项目框架(node开发配置环境变量)

文章目录 一、安装所需依赖二、设置package.json三、定义ts &#xff08;可选&#xff09;四、配置环境变量文件五、引入变量文件总结如有启发&#xff0c;可点赞收藏哟~ 一、安装所需依赖 pnpm add dotenv二、设置package.json 先配置脚本设置对应环境变量NODE_ENV {"…

吞吐量最高飙升20倍!破解强化学习训练部署难题

**强化学习&#xff08;RL&#xff09;对大模型复杂推理能力提升有关键作用&#xff0c;然而&#xff0c;RL 复杂的计算流程以及现有系统局限性&#xff0c;也给训练和部署带来了挑战。近日&#xff0c;字节跳动豆包大模型团队与香港大学联合提出 HybridFlow&#xff08;开源项…

Unity 插件编译版本.net 4.0

项目中用到了Google.ProtocolBuffersLite.dll 这个动态链接库&#xff0c;在升级完Unity版本后出现了 ”Unity targets .NET 4.x and is marked as compatible with editor, Editor can only use assemblies targeting .NET 3.5 or lower“ 的问题。 解决方法&#xff1a; 1、…

Cpp二叉搜索树的讲解与实现(21)

文章目录 前言一、二叉搜索树的概念定义特点 二、二叉树的实现基本框架查找插入删除当只有0 ~ 1个孩子的时候当有2个孩子的时候 三、二叉树的应用K模型KV模型 四、二叉树的性能分析总结 前言 这是全新的一个篇章呢&#xff0c;二叉搜索树是我们接下来学习set、map的前提 迈过它…

Elasticsearch —— ES 环境搭建、概念、基本操作、文档操作、SpringBoot继承ES

文章中会用到的文件&#xff0c;如果官网下不了可以在这下 链接: https://pan.baidu.com/s/1SeRdqLo0E0CmaVJdoZs_nQ?pwdxr76 提取码: xr76 一、 ES 环境搭建 注&#xff1a;环境搭建过程中的命令窗口不能关闭&#xff0c;关闭了服务就会关闭&#xff08;除了修改设置后重启的…

第八届御网杯线下赛Pwn方向题解

由于最近比赛有点多&#xff0c;而且赶上招新&#xff0c;导致原本应该及时总结的比赛搁置了&#xff0c;总结来说还是得多练&#xff0c;因为时间很短像这种线下赛&#xff0c;一般只有几个小时&#xff0c;所以思路一定要清晰&#xff0c;我还是经验太少了&#xff0c;导致比…

Ethernet 系列(6)-- 基础学习::OSI Model

&#xff08;写在前面&#xff1a;最近在学习车载以太网的知识&#xff0c;顺便记录一下知识点。&#xff09; OSI&#xff08;Open System Interconnect &#xff09;模型是一种网络通信框架&#xff0c;由国际标准化组织&#xff08;‌ISO&#xff09;在1985年提出&#xff0…

Java 字符流详解

在 Java 的 I/O 体系中&#xff0c;字符流&#xff08;Reader 和 Writer&#xff09;是专门用于处理文本数据的输入输出流。与字节流不同&#xff0c;字符流以字符为单位进行读取和写入&#xff0c;能够更好地处理文本信息&#xff0c;尤其是包含多字节字符&#xff08;如中文&…

Linux 多线程编程

韦东山的例程所谓线程&#xff0c;就是操作系统所能调度的最小单位。普通的进程&#xff0c;只有一个线程在执行对应的逻辑。我们可以通过多线程编程&#xff0c;使一个进程可以去执行多个不同的任务。相比多进程编程而言&#xff0c;线程享有共享资源&#xff0c;即在进程中出…

后端:Spring-1

文章目录 1. 了解 spring(Spring Framework)2. 基于maven搭建Spring框架2.1 纯xml配置方式来实现Spring2.2 注解方式来实现Spring3. Java Config类来实现Spring 2.4 总结 1. 了解 spring(Spring Framework) 传统方式构建spring(指的是Spring Framework)项目&#xff0c;导入依…

【C++动态规划 01背包】2787. 将一个数字表示成幂的和的方案数

本文涉及知识点 C动态规划 C背包问题 LeetCode2787. 将一个数字表示成幂的和的方案数 给你两个 正 整数 n 和 x 。 请你返回将 n 表示成一些 互不相同 正整数的 x 次幂之和的方案数。换句话说&#xff0c;你需要返回互不相同整数 [n1, n2, …, nk] 的集合数目&#xff0c;满…

Python爬虫的京东大冒险:如何高效获取商品详情的秘籍

在这个由代码编织的电商世界里&#xff0c;京东商品详情就像是被锁在高塔中的公主&#xff0c;等待着勇敢的Python爬虫骑士去解救。今天&#xff0c;我们要讲述的是如何成为一名Python爬虫骑士&#xff0c;携带你的代码长矛&#xff0c;穿梭在API的数据森林中&#xff0c;高效获…

SpringBoot【实用篇】- 测试

文章目录 目标&#xff1a;1.加载测试专用属性3.Web环境模拟测试2.加载测试专用配置4.数据层测试回滚5.测试用例数据设定 目标&#xff1a; 加载测试专用属性加载测试专用配置Web环境模拟测试数据层测试回滚测试用例数据设定 1.加载测试专用属性 我们在前面讲配置高级的时候…

vfx特效有多烧钱?云渲染农场减少vfx特效成本

特效制作一直是电影制作中的烧钱大户&#xff0c;尤其是视觉特效&#xff08;VFX&#xff09;的高昂成本让许多项目望而却步。但随着云渲染农场技术的发展&#xff0c;VFX特效的成本得到了有效控制&#xff0c;为电影工业带来了革命性的变化。 在电影工业中&#xff0c;VFX特效…