JAVA连接数据库的两种方式
QueryRunner类中的方法
1、query():查
2、update():增、删、改
createStatement类中的方法
1、executeQuery():只能执行查询语句
2、executeUpdate():只能增、删、改, 不能执行查询语句
3、execute():增、删、改、查的语句都能够执行。只是查询时返回的结果是告诉成功与否,如果要获取查询结果,得另外用" st.getResultSet()"获取
4、executeBatch()
通过QueryRunner()
// 用于获得表格中保存的全部单词并保存到List中
public static List<Word> retrieveAllWords() {
// 增加日志信息用于调试
logger.config("进入DBHelper类的retrieveAllWords方法!");
List<Word> words = new ArrayList<Word>();// 用于保存查询到单词
QueryRunner runner = new QueryRunner();// 获得QueryRunner类对象
Connection conn = getConnection();// 获得数据库连接
String sql = "select * from tb_dictionary;";// 定义SQL语句
ResultSetHandler<List<Object[]>> rsh = new ArrayListHandler();
try {
List<Object[]> results = runner.query(conn, sql, rsh);// 获取全部单词
for (Object[] result : results) {
Word word = new Word();// 创建Word对象
word.setId((Integer) result[0]);
word.setSpelling((String) result[1]);
word.setPhoneticSymbols((String) result[2]);
word.setPronunciation((String) result[3]);
word.setPartOfSpeech((String) result[4]);
word.setImage(new SerialBlob((byte[]) result[5]));
word.setMeaning((String) result[6]);
word.setFrequency((Integer) result[7]);
words.add(word);// 向列表中保存word对象
}
} catch (SQLException e) {
logger.log(Level.WARNING, "从数据表中获取全部单词发生异常!", e);
} finally {
DbUtils.closeQuietly(conn);// 关闭连接
}
Collections.sort(words, new Comparator<Word>() {// 根据单词拼写排序
@Override
public int compare(Word word1, Word word2) {
String spelling1 = word1.getSpelling();
String spelling2 = word2.getSpelling();
return spelling1.compareTo(spelling2);
}
});
return words;
}
通过createStatement()
// 用于根据用户输入的拼写查询单词,其副作用是使单词查询频率增加一
public static Word retrieveWordBySpellingForUser(String spelling) {
// 增加日志信息用于调试
logger.config("进入DBHelper类的retrieveWordBySpellingForUser方法!");
Connection conn = getConnection();// 获得数据库连接
Statement stmt = null;
ResultSet rs = null;
String sql = "select * from tb_dictionary where spelling ='" + spelling + "';";
try {
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql);
if (rs.next()) {// 如果存在需要查询的单词
Word word = new Word();
word.setId(rs.getInt("id"));
word.setSpelling(rs.getString("spelling"));
word.setPhoneticSymbols(rs.getString("phoneticsymbols"));
word.setPronunciation(rs.getString("pronunciation"));
word.setPartOfSpeech(rs.getString("partofspeech"));
word.setImage(rs.getBlob("image"));
word.setMeaning(rs.getString("meaning"));
word.setFrequency(rs.getInt("frequency"));
rs.updateInt("frequency", word.getFrequency() + 1);// 将查询频率加一
rs.updateRow();// 更新数据库中的查询频率
return word;
} else {
return null;// 如果没有查询到单词则返回null
}
} catch (SQLException e) {
logger.log(Level.WARNING, "用户查询单词发生异常!", e);
} finally {
DbUtils.closeQuietly(conn, stmt, rs);
}
return null;// 如果发生异常则返回null
}