实验三 嵌入式SQL与数据库连接

实验三 嵌入式SQL与数据库连接
20201331 黄文刚

一、实验要求
掌握嵌入式SQL的使用方法,通过数据库连接技术连接DBMS,访问数据库并实现存储过程调用,完成简易数据库应用系统的模拟实现。

二、实验目的
·理解嵌入式SQL;
·理解数据库连接技术;
·掌握基于特定宿主语言的数据库连接与访问;
·设计并实现通过嵌入式方式进行的数据库应用系统的增删改查询操作;
·设计存储过程并实现调用。

三、实验步骤
本实验在Java程序中采用JDBC连接Gauss DB(for MySQL)或者openGauss,实现特定的对数据库的增删改查询操作。
1.配置连接环境;
2.连接数据库;
3.实现嵌入式SQL的数据库访问功能。

四、实验报告内容

1.数据库连接技术简介
本次实验所采用的数据库连接技术是JDBC,使用应用开发工具IDEA,宿主语言为java,数据库采用本地虚机服务(openGauss)。
JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库。
JDBC API 库包含下面提到的每个任务,都是与数据库相关的常用用法。
1.制作到数据库的连接。
2.创建 SQL 或 MySQL 语句。
3.执行 SQL 或 MySQL 查询数据库。
4.查看和修改所产生的记录。
从根本上来说,JDBC 是一种规范,它提供了一套完整的接口,允许便携式访问到底层数据库,因此可以用 Java 编写不同类型的可执行文件,
所以一些使用数据库的应用系统就可以使用 JDBC 驱动程序来访问数据库,这样可以方便的访问数据。

2.数据库连接环境配置
老师上课所提供参考博客:
https://blog.csdn.net/qq_45955628/article/details/118513760
https://blog.csdn.net/qq_38029916/article/details/120143147
一、eclipse使用JDBC连接opengauss数据库
1.virtualbox中配置了OpenEuler系统,并且在该系统上成功部署了OpenGauss数据库。
2.完成远程连接部署(通过Data Studio工具能成功连接到本地opengauss数据库)
3.配置java环境为jdk1.8版本,具体请参考jdk配置。
4.下载opengauss2.0.0-openEuler系统x86_64版本的JDBC驱动安装包,下载完成后解压,找到postgresql.jar文件,将该文件放置到java项目文件夹下。
Jdbc.tar包下载路径:

连接步骤

一.Opengauss数据库中的配置:
(1)设置数据库的监听地址和端口

gs_guc set -I all -c "listen_addresses='10.0.3.15'"

这里listen_addresses就是监听地址了,前三段应该是要跟主机的ip地址前三段一样的,如果虚拟机有两个网卡(我这里是这样)一个用来外部链接(用putty连接)另一个就可以用在这里,比如我的en0s3用来连接putty en0s8就用来连接数据库即把listen_addresses设为en0s8的IP地址10.0.3.15

这里把命令里面listen_addresses改为port可用来修改端口,如果连接过程中报了端口的错可以试着改一下端口,应该是可以随意改,只要能通过就行。比如我设24000会报错,随意改成5432可以了。
具体参照官方文档配置服务端远程连接:

(2)配置客户端接入认证

配置客户端认证方式,允许客户端以“superadmin”用户连接到本机,此处远程连接禁止使用“omm”用户(即数据库初始化用户)。
我的是gs_guc set -I all -c "listen addresses='localhost,*’”
配置允许IP地址为任意本机地址

这样变,将listen_addresses即远程客户端连接使用的数据库主节点ip或者主机名设置为全部监听。
具体参照官方文档配置客户端接入认证

二.eclipse中的配置:

1.在eclipse中新建一个java项目

填写项目名称(这里我写的是OpenGauss),直接点击完成即可。提示是否需要创建模块名称,点击创建。

创建成功,左侧菜单栏已经出现项目OpenGauss

2.新建一个包org.opengauss。

3.在src中新建一个类。

填写类名(ConnectionOpengauss),选择创建主方法,点击完成。

4.首先在module的类中添加requires java.sql。

5.该类中的内容如下:需要根据实际情况修改包名、类名、数据库ip地址、数据库名、用户名、用户密码。

相关代码:

package org.opengauss;
import java.sql.*;
public class ConnectOpengauss {
	//以下代码将获取数据库连接操作封装为一个接口,可通过给定用户名和密码来连接数据库。
		public  static Connection getConnect(String username, String passwd)
		    {
		        //驱动类。
		        String driver = "org.postgresql.Driver";
		        //数据库连接描述符。
		        String sourceURL = "jdbc:postgresql://192.168.159.129:26000/postgres";
		        Connection conn = null;
		        try
		        {
		            //加载驱动。
		            Class.forName(driver);
		        }
		        catch( Exception e )
		        {
		            e.printStackTrace();
		            return null;
		        }
		        try
		        {
		             //创建连接。
		            conn = DriverManager.getConnection(sourceURL, username, passwd);
		            System.out.println("Connection succeed!");
		        }
		        catch(Exception e)
		        {
		            e.printStackTrace();
		            return null;
		        }
		        return conn;
		    };
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		new ConnectOpengauss();
		ConnectOpengauss.getConnect("superadmin","fxyloveh14!");
	}
}

3.嵌入式SQL的实现过程
给出宿主语言中连接数据库实现过程,及嵌入式SQL的实现过程,包括数据库的增删查改操作,和存储过程的设计实现与调用。
本次实验实现了之前实验二做过的人事管理系统,在原来的基础上,用java语言连接之前创好的数据库。
一、连接数据库
在这里,我设置的是输入用户名和密码进行连接。如果在后面的操作中该用户没有所需的权限或没有该用户或者用户名密码输错了之类的,会直接报错,就当做是灾备情况了(其实是懒得写出错的情况了,太多了。。。)

二、使用条件判断,当用户输入值匹配时执行对应的功能,以达到交互式的目的。
(1)增(Insert)操作

这里我分为了四种情况,因为每个表的插入值是不一样的(属性数、完整性约束等),所以需要分开讨论(因为我设计的sql语句无法智能分类,只能我这边手动分好类)

当flag2 == 1时,执行插入员工表这一操作,随后System.out.println()会读取命令行所输入的内容并存入sc.next中,再用sql = sql + sc.next() + "','";这句话来拼成一个完整的sql语句,最后通过statement.executeUpdate(sql);来执行这段语句,实现更新数据的功能。Try函数的功能执行完后,若未出错,便直接结束;若出错,便会执行catch中的语句,无返回值,暂停程序并报错。通过在命令行输入的方式,实现与用户的交互和程序出错时的应对(直接停止,不返回值并报错)。
需要注意的是

这里用的是Update,增删改都是更新(修改)数据,而查数据需要用别的,这里后面会说,所以随后的删、改操作也大致如此。

flag2 == 2时的操作也大致和员工表类似,只是sql语句只需五个sc.next组成,因为我的部门表只有五个属性,只需要用户输入五次即可,这也是他与员工表插入代码的唯一区别。
别的表的插入操作也大致类似,此处不再赘述

(2)改(Update)删(Delete)操作
改(Update)操作大致也是类似,方法是通过预先配置好的语句和用户在命令行中键入的语句拼成一个完整的sql语句,放到数据库中执行并返回值,出错时直接停止。

与增操作的区别在于两点:一是如上面所示,这里的分类是判断是否对整个表做操作,也就是最后拼成的sql更新语句有没有where及后面的条件判断。这里的嵌套判断也是随后下一个区别点的原因:

如图所示,这里加上了对where语句的判断。用户若选择2(即对其中的个别属性进行操作)必须加上条件判断,否则程序无法运行完整。
接下来的删操作(Delete)和改操作差不多

用户在进行这两个操作时必须先选择好是对整个表操作还是对其中的某个属性或多个操作,这也是比较冗余的一部分。
(3)查(Select)操作
查(Select)操作大意也是拼成一个sql语句并执行,但这里需要注意的是查操作是一定要有返回值的!增删改操作都可以返回“运行完成!”这种,并不用告诉用户具体库中的内容,也可以不返回值,但查操作必须要返回值。

首先,在原来拼语句的基础上,这里是双层嵌套,分别查询员工四表和查询时需要分两类讨论,因为每个表中内容不同,查询时是否有条件判断,均会使最后拼成的sql语句有根本的区别(前者是属性数的不同,后者是是否需要where语句)。
其次,增加了一个string a,b,c,d,e,f,用来读取返回值rs中的数据并打印到屏幕上。依所查询的表不同,每个表的string也不同
最后,需要注意

此时的statement值返回的是Query也就是查询值,而不是之前的Update更新值。 这里一定要注意!之前我就是因为这里没注意,一直没搞懂为什么没有返回值。
*其他表的增删改查功能与上面的几乎一致,改一下表名和属性名即可(删、改操作不需要改)。
*后来发现功能还是不够完善,又加了一个

以实现查询某个员工的所有信息,其余查询表同理。
(4)存储过程
存储过程的设计实现如下:当前用户可以将员工表中的年龄项改成2023-所有员工的出生年月,从而得到员工们的年龄。据此设置了一个存储过程birth_staff,用以将员工的生日更新成年龄。

在eclipse中调用这个存储过程:

(5)代码测试
1.使用superadmin用户,创建一个叫liuniu的员工

2.使用superadmin用户,将刚才创建的liuniu的password改成20032003

3.使用superadmin用户,查询liuniu的所有信息

4.使用superadmin用户,删除liuniu这个员工的所有信息

5.使用liuba用户,登录数据库并试图进行操作(刘巴没有任何权限)

6.调用存储过程:

功能全部实现!

4.问题分析

1.在这次实验中,我对数据库的持久性连接没有很好的掌握。我只是单纯的实现一个功能后就结束程序,没有让一个用户持续地实现这个功能,也没有实现功能的完善,比如查询功能,不能实现同时查询两个值,这些都是我应该注意的,需要多加练习。
2.数据操作的嵌入有两种方法,一种是将所有的数据操作封装成类,集中统一管理,另一种是将数据操作融入到应用功能之中,我使用的是第一种方法,将数据操作封装成类(我直接都塞到主函数里了)。当中,这是我的编程习惯导致的,不过这样做也有SQL语句和系统功能对照清晰的好处。这两种方法各有各的优势,各有各的劣势,我目前不知道那种方法是更优解,只有在不断实践和运用当中探索。
3.不同DBMS支持的SQL语句的语法是有区别的,所以我最开始直接上手修改一个之前的Mysql数据库项目遇到的大量的问题,另外面向应用时,数据库表设计的不好,参照关系的混乱会导致编写应用程序时遇到非常大的阻力,这就又回到了需求分析和概念模型涉及的范畴,所以一个好的数据库应用系统在最初的设计阶段至关重要,不能不分析需求想到一个功能实现一个功能,这样只会极大的增加自己的工作量。数据库应用系统的实现是一个系统性的工程,一定要按照需求分析,概念结构设计,逻辑结构设计,数据库内模式设计,数据库部署实施,数据库的运行和维护这六个阶段来进行。

5.实验感想
本次实验我的收获很大,真正体验了数据库应用系统设计的全部流程。这期间我经历了诸如数据库崩溃、java语言不熟练、程序接口调试困难的重重考验,最终完成了一个看起来好像还可以,但功能和逻辑经不起仔细推敲的数据库应用系统。这个过程也暴露出我编程水平严重不足的问题,我们平时往往大部分停留在纸面,真正动手实践的次数太少。设计数据库必须从需求分析,概念结构设计,逻辑结构设计,数据库内模式设计,数据库部署实施,数据库的运行和维护这六个阶段入手,它们中间每一步都很重要,尤其是设计阶段,如果实现了一个好的设计方案,实现起来其实很快,因为数据操作部分很多代码都可以重用,系统功能可以迅速的组织起来。
此次实验过程我们用到了存储过程这一功能,这一功能可以将数据操作封装在DBMS内,扩展应用功能并且进一步分离应用和数据库耦合以提高系统安全性。我所实现的存储过程非常简单,需要多学习存储过程的语法和使用方法来加深这一功能的掌握。
数据库应用这门课程也临近结束,不得不说,通过这门课程,我学会了数据库的设计方法、数据库的sql语言,以及处理数据的应有的严谨态度。今后的生活,我也将多加练习数据库,这种重要的系统其实存在于我们日常生活的方方面面,需要多加留意。
也非常感谢刘老师这半年的倾心教学,收获甚多,感激之情难以言表。谢谢刘老师的教导!

最后,附上我所有实现功能的完整代码:
ConnectionOpengauss.java:

  package org.opengauss;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.*;

public class ConnectionOpengauss {
	int n;

	public static void main(String[] args) {
		// TODO 自动生成的方法存根

		Scanner sc = new Scanner(System.in);
		// 驱动类。
		String driver = "org.postgresql.Driver";
		// 数据库连接描述符。
		String sourceURL = "jdbc:postgresql://192.168.56.103:26000/db_demo";
		Connection conn = null;
		Statement statement = null;
		try {
			// 加载驱动。
			Class.forName(driver);
		} catch (Exception e) {
			e.printStackTrace();
		}
		try {
			// 创建连接。
			String username;
			System.out.println("请输入要连接的用户名:");
			username = sc.nextLine();
			String passwd;
			System.out.println("请输入密码:");
			passwd = sc.nextLine();
			conn = DriverManager.getConnection(sourceURL, username, passwd);
			System.out.println("连接成功!!");
			statement = conn.createStatement();
			System.out.println("请选择你要进行的操作: 1.增加数据 2.修改数据 3.删除数据 4.查询数据 5.更新员工年龄");
			int flag = sc.nextInt();
			if (flag == 1) {
				// 插入操作
				System.out.println("请选择你要对哪个表进行操作: 1.员工表 2.部门表 3.职务表 4.职级表 ");
				int flag2 = sc.nextInt();
				if (flag2 == 1) {
					// 对员工表
					try {
						String sql = "INSERT INTO staff  VALUES (' ";// ('liulei','1989.2','11223','004','man','6888');";
						System.out.println("请输入姓名:");
						sql = sql + sc.next() + "','";
						System.out.println("请输入出生日期:");
						sql = sql + sc.next() + "','";
						System.out.println("请输入员工编号:");
						sql = sql + sc.next() + "','";
						System.out.println("请输入部门编号:");
						sql = sql + sc.next() + "','";
						System.out.println("请输入性别:");
						sql = sql + sc.next() + "','";
						System.out.println("请输入密码:");
						sql = sql + sc.next() + "')";
						System.out.println("生成的sql语句为:" + sql);
						statement.executeUpdate(sql);
						System.out.println("新增数据成功!");
					} catch (Exception e) {
						e.printStackTrace();
						System.err.println(e.getClass().getName() + ": " + e.getMessage());
						System.exit(0);
					}
				} else if (flag2 == 2) {
					try {
						// 对部门表
						String sql = "INSERT INTO department  VALUES (' ";
						System.out.println("请输入部门编号:");
						sql = sql + sc.next() + "','";
						System.out.println("请输入部门的部门编号:");
						sql = sql + sc.next() + "','";
						System.out.println("请输入部门名称:");
						sql = sql + sc.next() + "','";
						System.out.println("请输入编制人数:");
						sql = sql + sc.next() + "','";
						System.out.println("请输入部门类型:");
						sql = sql + sc.next() + "')";
						System.out.println("生成的sql语句为:" + sql);
						statement.executeUpdate(sql);
						System.out.println("新增数据成功!");
					} catch (Exception e) {
						e.printStackTrace();
						System.err.println(e.getClass().getName() + ": " + e.getMessage());
						System.exit(0);
					}
				} else if (flag2 == 3) {
					try {
						// 对职务表
						String sql = "INSERT INTO duty  VALUES (' ";
						System.out.println("请输入职务编号:");
						sql = sql + sc.next() + "','";
						System.out.println("请输入职务名称:");
						sql = sql + sc.next() + "')";
						System.out.println("生成的sql语句为:" + sql);
						statement.executeUpdate(sql);
						System.out.println("新增数据成功!");
					} catch (Exception e) {
						e.printStackTrace();
						System.err.println(e.getClass().getName() + ": " + e.getMessage());
						System.exit(0);
					}
				} else if (flag2 == 4) {
					try {
						// 对职级表
						String sql = "INSERT INTO rank  VALUES (' ";
						System.out.println("请输入职级编号:");
						sql = sql + sc.next() + "','";
						System.out.println("请输入职级名称:");
						sql = sql + sc.next() + "')";
						System.out.println("生成的sql语句为:" + sql);
						statement.executeUpdate(sql);
						System.out.println("新增数据成功!");
					} catch (Exception e) {
						e.printStackTrace();
						System.err.println(e.getClass().getName() + ": " + e.getMessage());
						System.exit(0);
					}
				}
			} // 结束flag=1,插入操作完成
			else if (flag == 2) {
				// 数据更新操作
				System.out.println("请选择你要对:1.整个表进行操作  2.其中的个别属性进行操作 ");
				int flag3 = sc.nextInt();
				if (flag3 == 1) {
					// 对整个表操作
					try {
						String sql = "UPDATE ";
						System.out.println("请输入表名:");
						sql = sql + sc.next();
						sql = sql + " SET ";
						System.out.println("请输入要更新的属性:");
						sql = sql + sc.next();
						sql = sql + " = ";
						System.out.println("请输入要更新的值:");
						sql = sql + "'" + sc.next() + "'";
						System.out.println("生成的sql语句为:" + sql);
						statement.executeUpdate(sql);
						System.out.println("更新数据成功!!");
					} catch (Exception e) {
						e.printStackTrace();
						System.err.println(e.getClass().getName() + ": " + e.getMessage());
						System.exit(0);
					}
				} else if (flag3 == 2) {
					try {
						// 对个别属性操作
						String sql = "UPDATE ";
						System.out.println("请输入表名:");
						sql = sql + sc.next();
						sql = sql + " SET ";
						System.out.println("请输入要更新的属性:");
						sql = sql + sc.next();
						sql = sql + " = ";
						System.out.println("请输入要更新的值:");
						sql = sql + "'" + sc.next() + "'";
						sql = sql + " WHERE ";
						System.out.println("请输入判断条件的属性名:");
						sql = sql + sc.next();
						sql = sql + " = ";
						System.out.println("请输入判断条件的属性的值:");
						sql = sql + "'" + sc.next() + "'";
						System.out.println("生成的sql语句为:" + sql);
						statement.executeUpdate(sql);
						System.out.println("更新数据成功!!");
					} catch (Exception e) {
						e.printStackTrace();
						System.err.println(e.getClass().getName() + ": " + e.getMessage());
						System.exit(0);
					}
				}
			} // 结束flag=2,数据更新操作完成
			else if (flag == 3) {
				// 删除操作
				System.out.println("请选择你要对:1.整个表进行操作  2.其中的个别属性进行操作 ");
				int flag4 = sc.nextInt();
				if (flag4 == 1) {
					try {
						// 对整个表操作
						String sql = "DELETE FROM ";
						System.out.println("请输入要操作的表名:");
						sql = sql + sc.next();
						System.out.println("生成的sql语句为:" + sql);
						statement.executeUpdate(sql);
						System.out.println("删除数据成功!!");
					} catch (Exception e) {
						e.printStackTrace();
						System.err.println(e.getClass().getName() + ": " + e.getMessage());
						System.exit(0);
					}
				} else if (flag4 == 2) {
					try {
						// 对个别属性操作
						String sql = "DELETE FROM ";
						System.out.println("请输入要操作的表名:");
						sql = sql + sc.next();
						sql = sql + " WHERE ";
						System.out.println("请输入要删除的属性名:");
						sql = sql + sc.next();
						sql = sql + " = ";
						System.out.println("请输入要删除的属性的值:");
						sql = sql + "'" + sc.next() + "'";
						System.out.println("生成的sql语句为:" + sql);
						statement.executeUpdate(sql);
						System.out.println("删除数据成功!!");
					} catch (Exception e) {
						e.printStackTrace();
						System.err.println(e.getClass().getName() + ": " + e.getMessage());
						System.exit(0);
					}
				}
			} // 结束flag=3,删除操作完成
			else if (flag == 4) {
				// 查询操作
				System.out.println("请选择你要查询:1.员工表 2.部门表 3.职务表 4.职级表 ");
				int flag5 = sc.nextInt();
				if (flag5 == 1) {
					//查询员工表
					System.out.println("请选择你要对:1.整个表进行查询  2.其中的某个条件下的所有值进行查询 3.其中的某个条件下的某个值进行查询");
					int flag55 = sc.nextInt();
					if (flag55 == 1) {
						try {
							// 对整个表查询
							String sql = "SELECT * FROM staff";
							System.out.println("生成的sql语句为:" + sql);
							statement.executeQuery(sql);
							ResultSet rs = statement.executeQuery(sql);
							String a = null, b = null, c = null, d = null, e = null, f = null;
							System.out.println("查询结果为:");
							while (rs.next()) {
								// 获得name
								a = rs.getString(1);
								// 获得birth
								b = rs.getString(2);
								// 获得num
								c = rs.getString(3);
								// 获得gender
								d = rs.getString(4);
								// 获得department_num
								e = rs.getString(5);
								// 获取password
								f = rs.getString(6);
								System.out.println(a + "\t" + b + "\t" + c + "\t" + d + "\t" + e + "\t" + f + "\t");
							}
							System.out.println("查询数据成功!!");
						} catch (Exception e) {
							e.printStackTrace();
							System.err.println(e.getClass().getName() + ": " + e.getMessage());
							System.exit(0);
						}
					} else if (flag55 == 2) {
						try {
							// 对个别属性的所有值查询
							String sql = "SELECT * FROM staff WHERE ";
							System.out.println("请输入判断条件:");
							sql = sql + sc.next();
							System.out.println("生成的sql语句为:" + sql);
							ResultSet rs = statement.executeQuery(sql);
							String a = null, b = null, c = null, d = null, e = null, f = null;
							System.out.println("查询结果为:");
							while (rs.next()) {
								// 获得name
								a = rs.getString(1);
								// 获得birth
								b = rs.getString(2);
								// 获得num
								c = rs.getString(3);
								// 获得gender
								d = rs.getString(4);
								// 获得department_num
								e = rs.getString(5);
								// 获取password
								f = rs.getString(6);
								System.out.println(a + "\t" + b + "\t" + c + "\t" + d + "\t" + e + "\t" + f + "\t");
							}
							System.out.println("查询数据成功!!");
						} catch (Exception e) {
							e.printStackTrace();
							System.err.println(e.getClass().getName() + ": " + e.getMessage());
							System.exit(0);
						}
					} else if (flag55 == 3) {
						try {
							// 对个别属性的个别值查询
							String sql = "SELECT ";
							System.out.println("请输入要查询的属性名:");
							sql = sql + sc.next();
							sql = sql + " FROM staff WHERE ";
							System.out.println("请输入判断条件:");
							sql = sql + sc.next();
							System.out.println("生成的sql语句为:" + sql);
							ResultSet rs = statement.executeQuery(sql);
							String a = null;
							System.out.println("查询结果为:");
							while (rs.next()) {
								// 获得第一个值
								a = rs.getString(1);
								System.out.println(a);
							}
							System.out.println("查询数据成功!!");
						} catch (Exception e) {
							e.printStackTrace();
							System.err.println(e.getClass().getName() + ": " + e.getMessage());
							System.exit(0);
						}
					}
				}
				else if(flag5 == 2) {
					//查询部门表
					System.out.println("请选择你要对:1.整个表进行查询  2.其中的某个条件下的所有值进行查询 3.其中的某个条件下的某个值进行查询");
					int flag55 = sc.nextInt();
					if (flag55 == 1) {
						try {
							// 对整个表查询
							String sql = "SELECT * FROM department";
							System.out.println("生成的sql语句为:" + sql);
							statement.executeQuery(sql);
							ResultSet rs = statement.executeQuery(sql);
							String a = null, b = null, c = null, d = null, e = null;
							System.out.println("查询结果为:");
							while (rs.next()) {
								// 获得departmentnum
								a = rs.getString(1);
								// 获得department_departmentnum
								b = rs.getString(2);
								// 获得departmentname
								c = rs.getString(3);
								// 获得number
								d = rs.getString(4);
								// 获得departmenttype
								e = rs.getString(5);
								System.out.println(a + "\t" + b + "\t" + c + "\t" + d + "\t" + e + "\t");
							}
							System.out.println("查询数据成功!!");
						} catch (Exception e) {
							e.printStackTrace();
							System.err.println(e.getClass().getName() + ": " + e.getMessage());
							System.exit(0);
						}
					} else if (flag55 == 2) {
						try {
							// 对个别属性的所有值查询
							String sql = "SELECT * FROM department WHERE ";
							System.out.println("请输入判断条件:");
							sql = sql + sc.next();
							System.out.println("生成的sql语句为:" + sql);
							ResultSet rs = statement.executeQuery(sql);
							String a = null, b = null, c = null, d = null, e = null;
							System.out.println("查询结果为:");
							while (rs.next()) {
								// 获得departmentnum
								a = rs.getString(1);
								// 获得department_departmentnum
								b = rs.getString(2);
								// 获得departmentname
								c = rs.getString(3);
								// 获得number
								d = rs.getString(4);
								// 获得departmenttype
								e = rs.getString(5);
								System.out.println(a + "\t" + b + "\t" + c + "\t" + d + "\t" + e + "\t");
							}
							System.out.println("查询数据成功!!");
						} catch (Exception e) {
							e.printStackTrace();
							System.err.println(e.getClass().getName() + ": " + e.getMessage());
							System.exit(0);
						}
					} else if (flag55 == 3) {
						try {
							// 对个别属性的个别值查询
							String sql = "SELECT ";
							System.out.println("请输入要查询的属性名:");
							sql = sql + sc.next();
							sql = sql + " FROM department WHERE ";
							System.out.println("请输入判断条件:");
							sql = sql + sc.next();
							System.out.println("生成的sql语句为:" + sql);
							ResultSet rs = statement.executeQuery(sql);
							String a = null;
							System.out.println("查询结果为:");
							while (rs.next()) {
								// 获得第一个值
								a = rs.getString(1);
								System.out.println(a);
							}
							System.out.println("查询数据成功!!");
						} catch (Exception e) {
							e.printStackTrace();
							System.err.println(e.getClass().getName() + ": " + e.getMessage());
							System.exit(0);
						}
					}
				}
				else if(flag5 == 3) {
					//查询职务表
					System.out.println("请选择你要对:1.整个表进行查询  2.其中的某个条件下的所有值进行查询 3.其中的某个条件下的某个值进行查询");
					int flag55 = sc.nextInt();
					if (flag55 == 1) {
						try {
							// 对整个表查询
							String sql = "SELECT * FROM duty";
							System.out.println("生成的sql语句为:" + sql);
							statement.executeQuery(sql);
							ResultSet rs = statement.executeQuery(sql);
							String a = null, b = null;
							System.out.println("查询结果为:");
							while (rs.next()) {
								// 获得dutynum
								a = rs.getString(1);
								// 获得dutyname
								b = rs.getString(2);
								System.out.println(a + "\t" + b + "\t");
							}
							System.out.println("查询数据成功!!");
						} catch (Exception e) {
							e.printStackTrace();
							System.err.println(e.getClass().getName() + ": " + e.getMessage());
							System.exit(0);
						}
					} else if (flag55 == 2) {
						try {
							// 对个别属性的所有值查询
							String sql = "SELECT * FROM duty WHERE";
							System.out.println("请输入判断条件:");
							sql = sql + sc.next();
							System.out.println("生成的sql语句为:" + sql);
							ResultSet rs = statement.executeQuery(sql);
							String a = null, b = null;
							System.out.println("查询结果为:");
							while (rs.next()) {
								// 获得dutynum
								a = rs.getString(1);
								// 获得dutyname
								b = rs.getString(2);
								System.out.println(a + "\t" + b + "\t");
							}
							System.out.println("查询数据成功!!");
						} catch (Exception e) {
							e.printStackTrace();
							System.err.println(e.getClass().getName() + ": " + e.getMessage());
							System.exit(0);
						}
					} else if (flag55 == 3) {
						try {
							// 对个别属性的个别值查询
							String sql = "SELECT ";
							System.out.println("请输入要查询的属性名:");
							sql = sql + sc.next();
							sql = sql + " FROM duty WHERE ";
							System.out.println("请输入判断条件:");
							sql = sql + sc.next();
							System.out.println("生成的sql语句为:" + sql);
							ResultSet rs = statement.executeQuery(sql);
							String a = null;
							System.out.println("查询结果为:");
							while (rs.next()) {
								// 获得第一个值
								a = rs.getString(1);
								System.out.println(a);
							}
							System.out.println("查询数据成功!!");
						} catch (Exception e) {
							e.printStackTrace();
							System.err.println(e.getClass().getName() + ": " + e.getMessage());
							System.exit(0);
						}
					}
				}
				else if(flag5 == 4) {
					//查询职级表
					System.out.println("请选择你要对:1.整个表进行查询  2.其中的某个条件下的所有值进行查询 3.其中的某个条件下的某个值进行查询");
					int flag55 = sc.nextInt();
					if (flag55 == 1) {
						try {
							// 对整个表查询
							String sql = "SELECT * FROM rank";
							System.out.println("生成的sql语句为:" + sql);
							statement.executeQuery(sql);
							ResultSet rs = statement.executeQuery(sql);
							String a = null, b = null;
							System.out.println("查询结果为:");
							while (rs.next()) {
								// 获得ranknum
								a = rs.getString(1);
								// 获得rankname
								b = rs.getString(2);
								System.out.println(a + "\t" + b + "\t");
							}
							System.out.println("查询数据成功!!");
						} catch (Exception e) {
							e.printStackTrace();
							System.err.println(e.getClass().getName() + ": " + e.getMessage());
							System.exit(0);
						}
					} else if (flag55 == 2) {
						try {
							// 对个别属性的得所有值查询
							String sql = "SELECT * FROM rank WHERE";
							System.out.println("请输入判断条件:");
							sql = sql + sc.next();
							System.out.println("生成的sql语句为:" + sql);
							ResultSet rs = statement.executeQuery(sql);
							String a = null, b = null;
							System.out.println("查询结果为:");
							while (rs.next()) {
								// 获得ranknum
								a = rs.getString(1);
								// 获得rankname
								b = rs.getString(2);
								System.out.println(a + "\t" + b + "\t");
							}
							System.out.println("查询数据成功!!");
						} catch (Exception e) {
							e.printStackTrace();
							System.err.println(e.getClass().getName() + ": " + e.getMessage());
							System.exit(0);
						}
					} else if (flag55 == 3) {
						try {
							// 对个别属性的个别值查询
							String sql = "SELECT ";
							System.out.println("请输入要查询的属性名:");
							sql = sql + sc.next();
							sql = sql + " FROM rank WHERE ";
							System.out.println("请输入判断条件:");
							sql = sql + sc.next();
							System.out.println("生成的sql语句为:" + sql);
							ResultSet rs = statement.executeQuery(sql);
							String a = null;
							System.out.println("查询结果为:");
							while (rs.next()) {
								// 获得第一个值
								a = rs.getString(1);
								System.out.println(a);
							}
							System.out.println("查询数据成功!!");
						} catch (Exception e) {
							e.printStackTrace();
							System.err.println(e.getClass().getName() + ": " + e.getMessage());
							System.exit(0);
						}
					}
				}
			} // 结束flag=4,查询操作完成
			else if (flag == 5) {
				//存储过程为2023-员工的出生年份
				CallableStatement callstmt = conn.prepareCall("{call birth_staff}");
				System.out.print("更新员工年龄中······"+ "\n\n\n");
				//执行存储过程callstmt .execute();
				callstmt.execute();
				//不需要返回结果,释放资源callstmt.close();
				callstmt.close();
			}
			System.out.println("功能已全部实现!程序退出中~~~");
		} catch (Exception e) {
			e.printStackTrace();

		}

	}

}

module-info.java

module OpenGuass {
	requires java.sql;
}
posted @ 2023-06-16 15:19  常仁  阅读(253)  评论(0编辑  收藏  举报