package ee.esutoniagodesu.repository.project; import ee.esutoniagodesu.domain.kanjidic2.table.Kanji; import ee.esutoniagodesu.util.persistence.JDBCUtil; import org.springframework.stereotype.Repository; import javax.persistence.Query; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; @Repository public class Heisig4DB extends AbstractProjectRepository { public Character findKanjiByFrame(int frameNo) { StringBuilder msg = new StringBuilder("findKanjiByFrame: frameNo=" + frameNo); Connection con = null; PreparedStatement s = null; ResultSet rs = null; Character result = null; try { long ms = System.currentTimeMillis(); con = dao.getConnection(); s = con.prepareCall("select kanji from heisig.heisig4 where id=?"); s.setInt(1, frameNo); rs = s.executeQuery(); if (rs.next()) { result = rs.getString(1).charAt(0); } log.debug(msg.append(", result=").append(result) .append(", time=").append(System.currentTimeMillis() - ms).toString()); } catch (SQLException e) { log.error(msg.append(", msg=").append(e.getMessage()).toString(), e); throw new RuntimeException(e); } finally { JDBCUtil.close(rs, s, con); } return result; } public List<Character> findKanjisByKeyword(String keyword) { StringBuilder msg = new StringBuilder("findKanjisByKeyword: keyword=" + keyword); Connection con = null; PreparedStatement s = null; ResultSet rs = null; List<Character> result = new ArrayList<>(); try { long ms = System.currentTimeMillis(); con = dao.getConnection(); s = con.prepareCall("select kanji from heisig.heisig4 where keyword_en=?"); s.setString(1, keyword); rs = s.executeQuery(); while (rs.next()) { result.add(rs.getString(1).charAt(0)); } log.debug(msg.append(", result=").append(result) .append(", time=").append(System.currentTimeMillis() - ms).toString()); } catch (SQLException e) { log.error(msg.append(", msg=").append(e.getMessage()).toString(), e); throw new RuntimeException(e); } finally { JDBCUtil.close(rs, s, con); } return result; } public List<Kanji> getKanjisBetween(int frameFrom, int frameTo) { StringBuilder msg = new StringBuilder("getKanjisBetween: frameFrom=" + frameFrom + ", frameTo=" + frameTo); if (frameFrom < 1 || frameFrom > frameTo) throw new IllegalArgumentException(msg.toString()); try { String sql = "SELECT a.* FROM kanjidic2.kanji a LEFT JOIN heisig.heisig4 b" + " ON a.literal = b.kanji " + " WHERE b.id BETWEEN ?1 AND ?2 ORDER BY b.id"; Query q = em.createNativeQuery(sql, Kanji.class); q.setParameter(1, frameFrom); q.setParameter(2, frameTo); List<Kanji> result = q.getResultList(); log.debug(msg.append(", result.size=").append(result.size()).toString()); return result; } catch (Exception e) { log.error(msg.append(", msg=").append(e.getMessage()).toString(), e); throw e; } } }