import com.aliasi.medline.Abstract; import com.aliasi.medline.MedlineCitation; import com.aliasi.medline.MedlineHandler; import com.aliasi.medline.MedlineParser; import com.aliasi.util.Files; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Types; import java.util.Properties; import org.xml.sax.InputSource; import org.xml.sax.SAXException; public class LoadMedlineDb { static MedlineParser PARSER = new MedlineParser(false); public static void main(String[] args) throws IOException, SAXException, ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException { MedlineDbLoader dbLoader = new MedlineDbLoader(args[0]); dbLoader.openDb(); for (int i = 1; i < args.length; ++i) { System.out.println("Indexing file=" + args[i]); if (args[i].endsWith(".xml")) loadXML(dbLoader, new File(args[i])); } dbLoader.closeDb(); } static void loadXML(MedlineDbLoader dbLoader, File file) throws IOException, SAXException { String url = file.toURI().toURL().toString(); InputSource inSource = new InputSource(url); PARSER.setHandler(dbLoader); PARSER.parse(inSource); } static class MedlineDbLoader implements MedlineHandler { static final String INSERT_CITATION_SQL = "INSERT INTO citation (pubmed_id, title, abstract) VALUES (?,?,?)"; private final Properties mDbProperties; private Connection mCon; MedlineDbLoader(String filename) throws IOException { mCon = null; mDbProperties = new Properties(); InputStream in = new FileInputStream(filename); mDbProperties.load(in); } public void handle(MedlineCitation citation) { System.out.println("Handling PMID=" + citation.pmid()); PreparedStatement pstmt = null; try { pstmt = mCon.prepareStatement(INSERT_CITATION_SQL); pstmt.setString(1,citation.pmid()); pstmt.setString(2,citation.article().articleTitleText()); Abstract abstr = citation.article().abstrct(); if (abstr != null) pstmt.setString(3,abstr.text()); else pstmt.setNull(3,Types.VARCHAR); pstmt.executeUpdate(); } catch (SQLException se) { System.err.println("EXCEPTION HANDLING CITATION="+citation.pmid()+" "+ se); } finally { try { pstmt.close(); } catch (SQLException se) {} } } // trivial implementation of method delete, (see interface MedlineHandler) public void delete(String s) { }; /* open database connection */ protected void openDb() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException { // compose database url: jdbc:mysql://:/ String dbUrl = "jdbc:mysql://" + mDbProperties.getProperty("hostname") + ":" + mDbProperties.getProperty("port") + "/medline"; String username = mDbProperties.getProperty("username"); String password = mDbProperties.getProperty("password"); // instantiate mysql driver manager, get database connection Class.forName("com.mysql.jdbc.Driver").newInstance(); mCon = DriverManager.getConnection(dbUrl,username,password); } /* close database connection */ protected void closeDb() { try { mCon.close(); } catch (SQLException se) { } } } }