已完善英语词典词典所有功能,酌情使用
Java连接并管理Access数据库词典
酌情参考
本单元的作业,意在检测学生是否达到以下学习目标:
(1)掌握JDBC数据库访问的基本步骤;
(2)掌握利用JDBC建立数据库连接的方法;
(3)掌握利用JDBC对数据库进行查询的方法;
(4)掌握利用JDBC对数据库中的数据进行增、删、]改的方法。
依照学术诚信条款,我保证此回答为本人原创,所有回答中引用的外部材料已经做了出处标记。
( 20分 )
用Microsoft Access作为DBMS,建立数据库和数据表来实现对一个简易的英汉电子词典进行存储和管理,这个简易电子词典中的内容至少包括:英文单词名、词性、汉语释义、例句(其它信息可自行扩充)。请编写图形界面的Java Application,完成对电子词典中英文单词的查找、新词的添加、单词的修改、删除等功能。
酌情参考
一、功能列表
1.创建数据库EnglishDictionary.accdb,添加单词属性
2.使用Java连接Access数据库
--------数据库的增删改查功能--------
(1).打印全部单词列表
(2).查询单词
(3).修改单词(单词、词义、词性、例句、例句翻译)
(4).删除单词(通过单词主键,删除其所有属性)
(6).退出系统(System.exit(0);
)
包含的成员方法有:
public class main()//主方法,程序入口
public void printMenu(){}//打印功能菜单
public void ConnectionAccess(){}//连接数据库模块
public void printList(){}//格式化输出模块
public void Switch(){}//功能选择模块
public void CheckWords(){}//查询单个单词属性
public void PrintAllwords(){}//打印整个单词列表
public void addWords(){}//添加单词(单词、词义、词性、例句、例句翻译)
public void ChangeWord(){}//修改单词属性(单词、词义、词性、例句、例句翻译)
public void deleteWord(){}//删除某个单词(全部属性)
可以根据自己需求另外增加功能模块。
二、代码块
1.代码
代码如下:
import java.sql.*;
import java.util.Scanner;
public class Dictionary {
Connection con;
Statement stmt; //创建实例,要执行SQL语句,必须获取实例
ResultSet rs;
int res;
public static void main(String[] args) {//main()方法主体,尽量简洁
Dictionary dt = new Dictionary(); //创建对象
dt.Switch();//菜单嵌套在stitch开头了,调用选择语块,会自动打印菜单
}
/*打印的菜单语块*/
public void printMenu() {
System.out.println("-------------------------------");
System.out.println("请输入您要执行的功能:");
System.out.println("1.打印数据库中所有的单词。");
System.out.println("2.查到某个单词及其属性。");
System.out.println("3.增加一个单词及其属性");
System.out.println("4.修改某个单词的属性(包括修改单词、汉意、词性、例句、例句翻译)。");
System.out.println("5.删除某个单词(以及其属性)");
System.out.println("6.退出系统");
}
/*加载驱动连接数据库语块*/
public void ConnectionAccess(){
try{
//加载Access驱动包
Class.forName("com.hxtt.sql.access.AccessDriver");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
try {
//连接Access数据库,jdbc:Access:///后面跟着你的数据库路径,可以仿造我下面的路径格式
//Access的数据库连接不需要账号密码,都为"",""不用填写。
con = DriverManager.getConnection("jdbc:Access:///G:/JavaProjectFile/JavaJDBC/EnglishDictionary.accdb", "", "");
//连接并读English表
stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery("select * from English");
System.out.println("已连接到数据库的English表!");
}catch (Exception e){
e.printStackTrace();
}
}
/*格式化输出语块,减少代码重复。复用的好处*/
public void printList(){
try {
while (rs.next()) {
String Words = rs.getString(1);
String ChineseMeaning = rs.getString(2);
String partSpeech = rs.getString(3);
String Example = rs.getString(4);
String ExampleMeaning = rs.getString(5);
//格式化输出单词的5个属性。
//注意,这里不是println(),是print(输出格式,输出对象)
System.out.printf("%-10s", Words); //单词
System.out.printf("%-30s", ChineseMeaning); //单词汉意思
System.out.printf("%-12s\n", partSpeech); //单词词性
System.out.printf("%-60s\n", Example); //单词例句
System.out.printf("%-30s\n\n", ExampleMeaning); //例句翻译
//小提示,在这里一个单词的信息已经打印完成了,最后结尾那个属性使用\n换行。
}
}catch (SQLException e){
throw new RuntimeException(e);
}
}
/*选择语块*/
public void Switch(){
Scanner sc=new Scanner(System.in);
while(true)
{
printMenu();//打印进入系统时的菜单
int i=sc.nextInt();
switch (i) {
case 1 -> {
PrintAllwords();
System.out.println("按下Enter以继续!");
//这里是停顿作用,等用户按下回车再继续循坏,直到选择6
new Scanner(System.in).nextLine();
}
case 2 -> {
CheckWords();
System.out.println("按下Enter以继续!");
//这里是停顿作用,等用户按下回车再继续循坏,直到选择6
new Scanner(System.in).nextLine();
}
case 3 -> {
addWords();
System.out.println("按下Enter以继续!");
//这里是停顿作用,等用户按下回车再继续循坏,直到选择6
new Scanner(System.in).nextLine();
}
case 4 -> {
ChangeWord();
System.out.println("按下Enter以继续!");
//这里是停顿作用,等用户按下回车再继续循坏,直到选择6
new Scanner(System.in).nextLine();
}
case 5 -> {
deleteWord();
System.out.println("按下Enter以继续!");
//这里是停顿作用,等用户按下回车再继续循坏,直到选择6
new Scanner(System.in).nextLine();
}
case 6 -> {
try {
con.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
System.exit(0);
}
default -> System.out.println("请输入正确的数字选项!");
}
}
}
/*查询某个单词语块*/
public void CheckWords(){
ConnectionAccess();
System.out.println("请输入要查询的单词(如果输出为空则词库暂时没有该单词):");
Scanner sc=new Scanner(System.in);
String deptName=sc.nextLine();
try {
rs=stmt.executeQuery("select * from English where Words="+"'"+deptName+"'");
printList();
con.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
System.out.println("查询完毕!如果输出为空则列表还没有该单词qwq!");
}
//打印全部单词信息方法
public void PrintAllwords(){
ConnectionAccess();
try{
rs.last();
int rows=rs.getRow();
System.out.println("English表共有"+rows+"条记录");
//顺序打印,需要再移动到最前面来,将游标移到第一行前
rs.beforeFirst();
System.out.println("顺序输出English表中的记录:");
printList();
con.close();
}catch(
SQLException e){
e.printStackTrace();
}
}
public void addWords(){
String[] str=new String[5];str[0]="请输入单词:";str[1]="请输入汉意:";str[2]="请输入词性:";str[3]="请输入例句:";str[4]="请输入例句翻译:";
//先获取用户输入的,单词、汉意、词性、例句、例句翻译,再一次性插入数据表
String[] strings=new String[5];
for(int i=0;i<5;i++){
System.out.println(str[i]);
Scanner scanner=new Scanner(System.in);
strings[i]=scanner.nextLine();
}
ConnectionAccess();
try {
res= stmt.executeUpdate("insert into English values('"+strings[0]+"'"+","+"'"+strings[1]+"'"+","+"'"+strings[2]+"'"+","+"'"+strings[3]+"'"+","+"'"+strings[4]+"'"+")");
con.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
System.out.println("插入完毕!可通过功能2查询该单词。");
}
/*修改单词语块, 可供修改单词/汉意/词性/例句/例句翻译*/
public void ChangeWord(){
System.out.println("请输入你要修改的单词:");
Scanner scanner=new Scanner(System.in);
String word=scanner.nextLine();
System.out.println("请输入要修改该单词的什么属性(1,单词、2.汉意、3.词性、4.例句、5.例句翻译)");
int i=scanner.nextInt();
ConnectionAccess();
try{
switch (i) {
case 1 -> {
System.out.println("请输入修改成什么单词:");
Scanner scanner1=new Scanner(System.in);
String changeovers = scanner1.nextLine();
res = stmt.executeUpdate("update English set Words=" + "'" + changeovers + "'" + "where Words=" + "'" + word + "'");
if(res==1){
System.out.println("修改成功!请在功能2查看修改结果。");
}else System.out.println("删除失败,可能没有该单词!");
con.close();
}
case 2 -> {
System.out.println("请输入修改成什么汉意:");
Scanner scanner1=new Scanner(System.in);
String changeovers = scanner1.nextLine();
res = stmt.executeUpdate("update English set ChineseM=" + "'" + changeovers + "'" + "where Words=" + "'" + word + "'");
if(res==1){
System.out.println("修改成功!请在功能2查看修改结果。");
}else System.out.println("删除失败,可能没有该单词!");
con.close();
}
case 3 ->{
System.out.println("请输入修改成什么词性:");
Scanner scanner1=new Scanner(System.in);
String changeovers = scanner1.nextLine();
res = stmt.executeUpdate("update English set PartSpeech=" + "'" + changeovers + "'" + "where Words=" + "'" + word + "'");
if(res==1){
System.out.println("修改成功!请在功能2查看修改结果。");
}else System.out.println("删除失败,可能没有该单词!");
con.close();
}
case 4 ->{
System.out.println("请输入修改成什么例句:");
Scanner scanner1=new Scanner(System.in);
String changeovers = scanner1.nextLine();
res = stmt.executeUpdate("update English set Example=" + "'" + changeovers + "'" + "where Words=" + "'" + word + "'");
if(res==1){
System.out.println("修改成功!请在功能2查看修改结果。");
}else System.out.println("删除失败,可能没有该单词!");
con.close();
}
case 5 ->{
System.out.println("请输入修改成什么例句翻译:");
Scanner scanner1=new Scanner(System.in);
String changeovers = scanner1.nextLine();
res = stmt.executeUpdate("update English set ExampleM=" + "'" + changeovers + "'" + "where Words=" + "'" + word + "'");
if(res==1){
System.out.println("修改成功!请在功能2查看修改结果。");
}else System.out.println("删除失败,可能没有该单词!");
con.close();
}
default -> System.out.println("不要胡乱输入功能数字呀!!");
}
}catch(SQLException e){
throw new RuntimeException();
}
}
//删除单词语块
public void deleteWord(){
System.out.println("请输入要删除的单词(请谨慎,将不可撤销)!:");
Scanner scanner=new Scanner(System.in);
String str=scanner.nextLine();
ConnectionAccess();
try{
res=stmt.executeUpdate("delete from English where Words="+"'"+str+"'");
if(res==1){
System.out.println("删除成功!");
}else System.out.println("删除失败,可能没有该单词!");
con.close();
}catch (SQLException e){
throw new RuntimeException();
}
}
}
运行如图:(已嵌套循坏语句,可一直不停的查询,直到选择6系统性退出)
Select(2)—>abandon
功能完善,下面的就不演示了,都没问题的。
2.注意“食用”方法(不要直接粘贴就运行了)
如果你直接粘贴代码运行的话,那我可以肯定的告诉你,一定会报错的QwQ,如果只是为了提交作业倒也不用自己修改。。。
1.数据库的连接需要加载驱动包。
2.修改代码中的数据库路径为你存放EnglishDictionary的路径
1.加载驱动包
驱动包就是这个:这里推荐用JDBC30那个(有次数限制,40无限制)
我的是Java17,在C:\jdk-17.0.3.1_windows-x64_bin\jdk-17.0.3.1\lib
下
一般的Java应该是在C:\Program Files\Java\jdk-11.0.13\
下
放lib
目录或者bin
目录在中
这里以IDEA
为例:外部库这里可以看见驱动包即调用了(即一些额外的包)
如果没有识别到驱动包需要右键手动添加
2.修改EnglishDictionary文件路径成你保存的文件路径
然后把代码中的这个路径修改成你存放的路径(代码这一块有提示)
//jdbc:Access:///后面跟着你的数据库路径,可以仿造我下面的路径格式
//Access的数据库连接不需要账号密码,都为"",""不用填写。
con = DriverManager.getConnection("jdbc:Access:///G:/JavaProjectFile/JavaJDBC/EnglishDictionary.accdb", "", "");
如例///后面是文件路径G:/JavaProjectFile/JavaJDBC/EnglishDictionary.accdb
以上是我的存放位置以及书写路径格式,改成你的即可,不要落下后缀名。
如果还有什么问题欢迎在评论区留言,快速回复,精准解答!文章来源:https://www.toymoban.com/news/detail-441067.html
总结
最近时间比较紧,暂时不能更新出GUI界面了,只能在软件里面实现英语词典数据库的增删改查功能,等时间充裕再补上结合GUI界面的代码!
如果对您有帮助,希望得到一个免费的赞!!
如果还有什么问题欢迎在评论区留言,快速回复,精准解答!文章来源地址https://www.toymoban.com/news/detail-441067.html
到了这里,关于用Microsoft Access作为DBMS,建立数据库和数据表来实现对一个简易的英汉电子词典进行存储和管理,这个简易电子词典中的内容至少包括:英文单词名、词性、汉语释义的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!