基于JAVA实现查询功能的两种方法以及比较(分别用.txt和.db文件存储数据)
编程实现一个命令窗程序,使得输入“a”则在屏上回显“一再”,使得能进行郑码查询,如输入“aacm”,则输出“无可奉告”。以如下两种方法:
1)将码表放在一个文本文件中,如zmb.txt中,实现以上功能。
2)将码表放在SQLite文件中,如zmdb. sqlite, 再次以上功能。
.txt文件格式:
< a ><一再>
< aa ><一下>
……
1) 将码表放在一个文本文件中实现郑码查询功能
import java.io.*; //导入java.io包中的所有类,这是通配符导入法,嘿嘿
import java.util.Scanner; //明确导入java.util包中的Scanner类
class ZhengCodeQuery
{
public static void main(String[] args) throws IOException//声明内部抛出的异常
{
System.out.println("#ZHENG CODE QUERY#");
System.out.println(); //转行
Scanner input = new Scanner(System.in);//创建一个Scanner对象
while(true) {
System.out.println("Enter a code:"); //控制台输出
String string1= input.nextLine(); //获取输入的编码
//创建一个新的 FileReader,“.txt”文件和此“.java”文件保存在同一个地方。
FileReader dictionary = new FileReader("D:\\EditPlus\\MyProjects\\zmb.txt");
BufferedReader word = new BufferedReader(dictionary);//读取流文本
String a = "";//定义一个空字符串
boolean b = false;//判断dictionary.txt中是否含有输入的编码内容
while((a = word.readLine()) != null) {
//while循环,readLine()读一行文本,循环继续条件为读取的文本不为空
/*读取编码
* 这里可以把.txt文件里的内容看成数组,
* 返回数组下标从indexOf("<")+1到indexOf(">")的内容,也就是尖括号“<>”里面的内容*/
String chinese = a.substring((int)a.indexOf("<")+1,(int) a.indexOf(">"));
//读取对应的汉字,方法和上一条语句一样
String english = a.substring(a.lastIndexOf("<")+1,a.lastIndexOf(">"));
if(string1.equals(chinese)) {//输入编码存在且和文本的相同则执行
System.out.println(english);//输出对应的汉字
b=true;
}
}
/*这是if选择语句,条件是判断a的内容是否为byebye,
当且仅当条件为true时执行if以下的语句,不是则跳出**/
if(string1.equals("byebye")) {
System.out.println("Exit the program!");
System.exit(0);/*是在System类中定义的,调用这个方法可以终止程序,
参数0表明程序正常结束。*/
}
else if(!b)
System.out.println("Can't find the code,Please try another one!");
}
}
}
运行结果:
其中的文本文档:zmb.txt
提取码:uv87
2) 将码表放在一个SQLite中实现郑码查询功能
在SQLite中建立数据库:
方法不再赘述,完成后如下
用JAVA连接读取数据库
代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class Db {
//main
public static void main(String[] args) {
while(true) {
System.out.print("Enter a code:");
Scanner sc=new Scanner(System.in);
String a=sc.next();
if("byebye".equalsIgnoreCase(a)) {
System.out.println("Exit the program!");
System.exit(0);
}
String sql = "SELECT * FROM zmb";
try {
Connection conn = sqliteCon();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
boolean flag=false;
while (rs.next()) {
String zm=rs.getString("code");
String chinese=rs.getString("chinese");
if(zm.equalsIgnoreCase(a)) {
System.out.println(chinese);
flag=true;
}
}
if(flag==false) {
System.out.println("Can't find the code,Please try another one!");
}
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
}
public static Connection sqliteCon() {
Connection con=null;
try {
Class.forName("org.sqlite.JDBC");
con=DriverManager.getConnection("jdbc:sqlite:test.db");
}catch(Exception e){
e.printStackTrace();
}
return con;
}
}
运行结果:
3)两种方法的比较
.txt文件编辑添加数据比较繁琐,而用SQLite数据库添加数据比较快,而且管理起来比较方便,例如添加、删减,修改数据等等,只需要用SQL语句就可以轻松管理,功能也比较强大。