/** * @param String keywords * @return Term term 根据查询关键词查找相关的查询扩展信息 * 返回形式:term:{keyWords:"",eventId:{1,2,3,……},newsId:{1,2,3,……},expansionTerm:{"","","",……}} */ public Expansion getExpansionByKeywords(String keywords) { Expansion expansion = new Expansion(); init(); Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = dataSource.getConnection(); pstmt = conn.prepareStatement(SQL_SELECT_EXPANSION_BY_KEYWORDS); pstmt.setString(1, keywords); if (pstmt.execute()) { rs = pstmt.getResultSet(); if (rs.next()) { expansion.setTerm(keywords); if (rs.getString("eventsId") != null) { String eventsIdString[] = rs.getString("eventsId").split(","); int[] eventsId = new int[eventsIdString.length]; for (int i = 0; i < eventsIdString.length; i++) { eventsId[i] = Integer.parseInt(eventsIdString[i]); expansion.addEventId(eventsId[i]); } // for } // 获得所有的news String newsIdString[] = rs.getString("newsId").split(","); int[] newsId = new int[newsIdString.length]; for (int i = 0; i < newsIdString.length; i++) { newsId[i] = Integer.parseInt(newsIdString[i]); expansion.addNewsId(newsId[i]); } // for // 获得所有的扩展词 String[] expansionTerms = rs.getString("expansionTerms").split(","); for (String expansionTerm : expansionTerms) { expansion.addExpansionTerms(expansionTerm); } } // if else { expansion = null; } // 如果数据库中不存在该扩展,则返回空 } // try } catch (SQLException e) { e.printStackTrace(); } finally { try { if (rs != null) rs.close(); if (pstmt != null) pstmt.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } return expansion; }
/** @param Term 将单个的扩展存入数据库 */ public void insertExpansion(Expansion expansion) { init(); if (expansion == null) return; // 如果数据库中已存在,则只进行更新操作 if (getExpansionByKeywords(expansion.getTerm()) != null) updateExpansion(expansion); // 若不存在,则进行插入操作 else { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = dataSource.getConnection(); pstmt = conn.prepareStatement(SQL_INSERT_EXPANSION, Statement.RETURN_GENERATED_KEYS); pstmt.setString(1, expansion.getTerm()); /*将与查询词相关的事件id以字符串的形式存储,中间用‘,’隔开,以防止过度冗余,存储形式如"1,2,3",说明与该词相关的事件是事件1、事件2和事件3, * 并且对于事件只存id号,如果需要其他详细信息,可以根据id号进行进一步的查询 */ String EventsIdString = intArrayToString(expansion.getEventId()); pstmt.setString(2, EventsIdString); /*对于新闻的存储方法同事件的存储方式*/ String NewsIdString = intArrayToString(expansion.getNewsId()); pstmt.setString(3, NewsIdString); String ExpansionTermString = stringArrayToString(expansion.getExpansionTerms()); pstmt.setString(4, ExpansionTermString); pstmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (rs != null) rs.close(); if (pstmt != null) pstmt.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } // finally } // else }
/** * @param Term term * 此方法实现对数据库原有的扩展进行更新,即如果数据库中已经存在关于某个查询关键词的扩展,并且要插入的expansion的关键词与该词相同,则将插入操作改为更新操作 */ public void updateExpansion(Expansion expansion) { init(); Expansion existExpansion = getExpansionByKeywords(expansion.getTerm()); // 将数据库中已有的扩展和该扩展合并 if (existExpansion.getEventId() == null || existExpansion.getEventId().isEmpty()) { existExpansion.addEventId(expansion.getEventId()); } else { for (int eid : expansion.getEventId()) { if (!existExpansion.getEventId().contains(eid)) existExpansion.addEventId(eid); } } for (int nid : expansion.getNewsId()) { if (!existExpansion.getNewsId().contains(nid)) existExpansion.addNewsId(nid); } for (String expansionTerm : expansion.getExpansionTerms()) { if (!existExpansion.getExpansionTerms().contains(expansionTerm)) existExpansion.addExpansionTerms(expansionTerm); } Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = dataSource.getConnection(); pstmt = conn.prepareStatement(SQL_UPDATE_EXPANSION); pstmt.setString(1, intArrayToString(existExpansion.getEventId())); pstmt.setString(2, intArrayToString(existExpansion.getNewsId())); pstmt.setString(3, stringArrayToString(existExpansion.getExpansionTerms())); pstmt.setString(4, existExpansion.getTerm()); pstmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (rs != null) rs.close(); if (pstmt != null) pstmt.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } // finally }