[JDBC初入门1] 实现英汉词典导入/查询
用之前jdbc的知识实现一个简单的基于本地数据库的词典查询类。
总体流程是先在本地数据库创建一个dictionary表单,再通过jdbc读取词典文件读入到此表单中,再提供查询方法。
词典文件可以在网上随便找个mdx格式的词典(https://freemdict.com/),再转成txt格式做一些处理(做法可参考https://blog.csdn.net/whbtomt/article/details/82151477)。
我自己找了个《四级英语重点词汇》来测试,将转好的txt各个词条内容用分隔符分开后导入数据库的代码如下:
private void init() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("英语4级词汇汇总.txt")),
"UTF-8"));
String lineText = null;
while((lineText = br.readLine()) != null) {
String[] element = lineText.split("\t");
if(element.length == 4) {
insert(element[0], element[1], element[2], element[3]);
}else insert(element[0], element[1], null, null);
}
br.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
每个词条有名称、释义(包含词性)、例题、解答,而例题和解答有的词条有,有的没有。
导入成功后就开始写查询方法了。对于jdbc查询,可以参考:https://www.yiibai.com/jdbc/jdbc-statements.html。
jdbc提供了3种statement:Statement、PreparedStatement、CallableStatement,这三个对象依次继承自前者,添加了一些独有的功能。Statement支持普通的不带参的查询SQL,PreparedStatement支持可变参数的SQL,CallableStatement支持调用存储过程,提供了对输出和输入/输出参数(INOUT)的支持;
我们的查询不需要调用储存过程,而PreparedStatement在安全性和性能上都优于Statement,具体可以参见这篇博客:https://www.cnblogs.com/liang-chen/p/11969788.html,写得很棒。
现在可以写出查询方法:
private String resultSql = "SELECT * FROM dictionary WHERE name = ?";
public Paraphrase search(String primaryWord) {
String word = primaryWord.toLowerCase();
try {
stmt = conn.prepareStatement(resultSql);
stmt.setString(1, word);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
return new Paraphrase(rs.getString("name"), rs.getString("meaning"),
rs.getString("question"), rs.getString("answer"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally { try { if(stmt != null) { stmt.close(); } } catch (SQLException e) {
e.printStackTrace(); } }
return null;
}
我们来运行测试一下:
public static void main(String[] args) {
Base persons = new Base();
persons.openDatabase();
String[] strings = {"aaaaaa", "abstract", "AbStRaCt", "wofjsf", "abuse", "32133", "(*)*)()(*}"};
for(String s : strings) {
persons.print(s);
System.out.print("\n");
}
persons.closeDatabase();
}
结果为:
找不到单词
abstract
v.抽取;n.摘要
abstract
v.抽取;n.摘要
找不到单词
abuse
v.& n.滥用;滥用,谩骂〖同〗insult;虐待〖同〗mistreat
〖题〗He has ___ my confidence in him. A.abused B.chilled C.drafted D.dragged
〖解〗 答案A。句意为“他辜负了我对他的信任。”chill v.(使)寒冷;draft v.起草;drag v.拖拉。用在本句中都不合题意。
找不到单词
找不到单词
上一篇: 几道php基础面试题
下一篇: 有关定义元素的文章推荐9篇