SQLite数据库基础(三)

基于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语句就可以轻松管理,功能也比较强大。

猜你喜欢

转载自blog.csdn.net/yangchenju/article/details/80640221
今日推荐