/* TLabelMeaning.java - SQL operations with the table 'label_meaning' in Wiktionary * parsed database. * * Copyright (c) 2013 Andrew Krizhanovsky <andrew.krizhanovsky at gmail.com> * Distributed under EPL/LGPL/GPL/AL/BSD multi-license. */ package wikokit.base.wikt.sql.label; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import wikokit.base.wikipedia.sql.Connect; import wikokit.base.wikt.constant.Label; import wikokit.base.wikt.sql.TMeaning; /** An operations with the table 'label_meaning' in MySQL Wiktionary_parsed database. * label_meaning - binds together context labels and meaning number. */ public class TLabelMeaning { /** Context label (label_id). */ private TLabel label; /** One sense of a word (meaning_id). */ private TMeaning meaning; private final static Label[] NULL_LABEL_ARRAY = new Label[0]; /** Inserts record into the table 'label_meaning'.<br><br> * INSERT INTO label_meaning (label_id,meaning_id) VALUES (1,2); * @param name category label name * @param parent_category_id ID of parent category, id=0 corresponds to NULL in the database */ public static void insert (Connect connect, String page_title, int label_id, int meaning_id) { if(0 == label_id || 0 == meaning_id) return; StringBuilder str_sql = new StringBuilder(); try { Statement s = connect.conn.createStatement (); try { str_sql.append("INSERT INTO label_meaning (label_id,meaning_id) VALUES ("); str_sql.append(label_id); str_sql.append(","); str_sql.append(meaning_id); str_sql.append(")"); s.executeUpdate (str_sql.toString()); } finally { s.close(); } }catch(SQLException ex) { System.out.println("SQLException (wikt_parsed TLabelMeaning.insert):: page_title='" + page_title + "'; sql='" + str_sql.toString() + "' " + ex.getMessage()); } } /** Selects labels from tables `label` and `label_meaning` by * label_meaning.meaning_id value.<br><br>. * SELECT label_id FROM label_meaning WHERE meaning_id=11; * @return empty array if data is absent */ public static Label[] get (Connect connect,TMeaning meaning) { if(null == meaning) { System.out.println("Error (wikt_parsed TLabelMeaning.get()):: null argument: meaning."); return NULL_LABEL_ARRAY; } StringBuilder str_sql = new StringBuilder(); List<Label> list_label = null; try { Statement s = connect.conn.createStatement (); try { str_sql.append("SELECT label_id FROM label_meaning WHERE meaning_id="); str_sql.append(meaning.getID()); ResultSet rs = s.executeQuery (str_sql.toString()); try { while (rs.next ()) { int label_id = rs.getInt("label_id"); Label label = TLabel.getLabelFast( label_id ); if(null != label) { if(null == list_label) list_label = new ArrayList(); list_label.add(label); } } } finally { rs.close(); } } finally { s.close(); } } catch(SQLException ex) { System.out.println("SQLException (wikt_parsed TLabelMeaning.get()):: sql='" + str_sql.toString() + "' " + ex.getMessage()); } if(null == list_label) return NULL_LABEL_ARRAY; return (Label[])list_label.toArray(NULL_LABEL_ARRAY); } /** Counts number of records in the table 'label_meaning' with given label ID.<br> * SELECT COUNT(*) FROM label_meaning WHERE label_id = 3; * * @return 0 means error */ public static int countRecordsWithLabelID(Connect connect, int label_id) { Statement s = null; ResultSet rs= null; int size = 0; String str_sql = null; if(null==connect || null==connect.conn) return 0; try { s = connect.conn.createStatement (); str_sql = "SELECT COUNT(*) AS size FROM label_meaning WHERE label_id="+label_id; rs = s.executeQuery (str_sql); if (rs.next ()) size = rs.getInt("size"); } catch(SQLException ex) { System.out.println("SQLException (TLabelMeaning.countRecordsWithLabelID()): sql='" + str_sql + "' " + ex.getMessage()); } finally { if (rs != null) { try { rs.close(); } catch (SQLException sqlEx) { } } if (s != null) { try { s.close(); } catch (SQLException sqlEx) { } } } return size; } }