SiteDAOImpl.java
上传用户:qing5858
上传日期:2015-10-27
资源大小:6056k
文件大小:7k
源码类别:

搜索引擎

开发平台:

Java

  1. package net.javacoding.jspider.core.storage.jdbc;
  2. import net.javacoding.jspider.core.model.SiteInternal;
  3. import net.javacoding.jspider.core.storage.spi.SiteDAOSPI;
  4. import net.javacoding.jspider.core.storage.spi.StorageSPI;
  5. import net.javacoding.jspider.core.logging.LogFactory;
  6. import net.javacoding.jspider.core.logging.Log;
  7. import java.net.MalformedURLException;
  8. import java.net.URL;
  9. import java.sql.*;
  10. import java.util.ArrayList;
  11. /**
  12.  * $Id: SiteDAOImpl.java,v 1.8 2003/04/11 16:37:06 vanrogu Exp $
  13.  */
  14. class SiteDAOImpl implements SiteDAOSPI {
  15.     public static final String ATTRIBUTE_ID = "id";
  16.     public static final String ATTRIBUTE_HOST = "host";
  17.     public static final String ATTRIBUTE_PORT = "port";
  18.     public static final String ATTRIBUTE_STATE = "state";
  19.     public static final String ATTRIBUTE_OBEYROBOTSTXT = "obeyrobotstxt";
  20.     public static final String ATTRIBUTE_USEPROXY = "useproxy";
  21.     public static final String ATTRIBUTE_USECOOKIES = "usecookies";
  22.     public static final String ATTRIBUTE_HASROBOTSTXT = "hasrobotstxt";
  23.     public static final String ATTRIBUTE_USERAGENT = "useragent";
  24.     public static final String ATTRIBUTE_BASESITE = "basesite";
  25.     public static final String ATTRIBUTE_HANDLE = "handle";
  26.     protected DBUtil dbUtil;
  27.     protected StorageSPI storage;
  28.     protected Log log;
  29.     public SiteDAOImpl(StorageSPI storage, DBUtil dbUtil) {
  30.         this.storage = storage;
  31.         this.dbUtil = dbUtil;
  32.         this.log = LogFactory.getLog(SiteDAOImpl.class);
  33.     }
  34.     public SiteInternal find(URL siteURL) {
  35.         SiteInternal site = null;
  36.         Statement st = null;
  37.         ResultSet rs = null;
  38.         try {
  39.             Connection c = dbUtil.getConnection();
  40.             st = c.createStatement();
  41.             rs = st.executeQuery("select * from jspider_site where host = '" + siteURL.getHost() + "' and port = " + siteURL.getPort());
  42.             if (rs.next()) {
  43.                 site = createSiteFromRecord(rs);
  44.             } else {
  45.                 return null;
  46.             }
  47.         } catch (SQLException e) {
  48.             log.error("SQLException", e);
  49.         } finally {
  50.             dbUtil.safeClose(rs, log);
  51.             dbUtil.safeClose(st, log);
  52.         }
  53.         return site;
  54.     }
  55.     public SiteInternal find(int id) {
  56.         SiteInternal site = null;
  57.         Statement st = null;
  58.         ResultSet rs = null;
  59.         try {
  60.             Connection c = dbUtil.getConnection();
  61.             st = c.createStatement();
  62.             rs = st.executeQuery("select * from jspider_site id=" + id);
  63.             if (rs.next()) {
  64.                 site = createSiteFromRecord(rs);
  65.             } else {
  66.                 return null;
  67.             }
  68.         } catch (SQLException e) {
  69.             log.error("SQLException", e);
  70.         } finally {
  71.             dbUtil.safeClose(rs, log);
  72.             dbUtil.safeClose(st, log);
  73.         }
  74.         return site;
  75.     }
  76.     public void create(int id, SiteInternal site) {
  77.         Connection connection = dbUtil.getConnection();
  78.         Statement st = null;
  79.         StringBuffer sb = new StringBuffer();
  80.         sb.append("insert into jspider_site (");
  81.         sb.append("id,");
  82.         sb.append("host,");
  83.         sb.append("port,");
  84.         sb.append("handle,");
  85.         sb.append("robotstxthandled,");
  86.         sb.append("usecookies,");
  87.         sb.append("useproxy,");
  88.         sb.append("state,");
  89.         sb.append("obeyrobotstxt,");
  90.         sb.append("basesite,");
  91.         sb.append("useragent");
  92.         sb.append(") values (");
  93.         sb.append(DBUtil.format(id));
  94.         sb.append(",");
  95.         sb.append(DBUtil.format(site.getHost()));
  96.         sb.append(",");
  97.         sb.append(DBUtil.format(site.getPort()));
  98.         sb.append(",");
  99.         sb.append(DBUtil.format(site.mustHandle()));
  100.         sb.append(",");
  101.         sb.append(DBUtil.format(site.isRobotsTXTHandled()));
  102.         sb.append(",");
  103.         sb.append(DBUtil.format(site.getUseCookies()));
  104.         sb.append(",");
  105.         sb.append(DBUtil.format(site.getUseProxy()));
  106.         sb.append(",");
  107.         sb.append(DBUtil.format(site.getState()));
  108.         sb.append(",");
  109.         sb.append(DBUtil.format(site.getObeyRobotsTXT()));
  110.         sb.append(",");
  111.         sb.append(DBUtil.format(site.isBaseSite()));
  112.         sb.append(",");
  113.         sb.append(DBUtil.format(site.getUserAgent()));
  114.         sb.append(")");
  115.         try {
  116.             st = connection.createStatement();
  117.             st.executeUpdate(sb.toString());
  118.         } catch (SQLException e) {
  119.             log.error("SQLException", e);
  120.         } finally {
  121.             dbUtil.safeClose(st, log);
  122.         }
  123.     }
  124.     public void save(int id, SiteInternal site) {
  125.         StringBuffer sb = new StringBuffer();
  126.         Connection connection = dbUtil.getConnection();
  127.         Statement st = null;
  128.         sb.append("update jspider_site set ");
  129.         sb.append("handle=");
  130.         sb.append(DBUtil.format(site.mustHandle()));
  131.         sb.append(",robotstxthandled=");
  132.         sb.append(DBUtil.format(site.isRobotsTXTHandled()));
  133.         sb.append(",usecookies=");
  134.         sb.append(DBUtil.format(site.getUseCookies()));
  135.         sb.append(",useproxy=");
  136.         sb.append(DBUtil.format(site.getUseProxy()));
  137.         sb.append(",state=");
  138.         sb.append(DBUtil.format(site.getState()));
  139.         sb.append(",obeyrobotstxt=");
  140.         sb.append(DBUtil.format(site.getObeyRobotsTXT()));
  141.         sb.append(",basesite=");
  142.         sb.append(DBUtil.format(site.isBaseSite()));
  143.         sb.append(",useragent=");
  144.         sb.append(DBUtil.format(site.getUserAgent()));
  145.         sb.append(" where id = ");
  146.         sb.append(DBUtil.format(id));
  147.         try {
  148.             st = connection.createStatement();
  149.             st.executeUpdate(sb.toString());
  150.         } catch (SQLException e) {
  151.             log.error("SQLException", e);
  152.         } finally {
  153.             dbUtil.safeClose(st, log);
  154.         }
  155.     }
  156.     public SiteInternal[] findAll() {
  157.         ArrayList al = new ArrayList();
  158.         Statement st = null;
  159.         ResultSet rs = null;
  160.         try {
  161.             Connection c = dbUtil.getConnection();
  162.             st = c.createStatement();
  163.             rs = st.executeQuery("select * from jspider_site");
  164.             while (rs.next()) {
  165.                 al.add(createSiteFromRecord(rs));
  166.             }
  167.         } catch (SQLException e) {
  168.             log.error("SQLException", e);
  169.         } finally {
  170.             dbUtil.safeClose(rs, log);
  171.             dbUtil.safeClose(st, log);
  172.         }
  173.         return (SiteInternal[]) al.toArray(new SiteInternal[al.size()]);
  174.     }
  175.     protected SiteInternal createSiteFromRecord(ResultSet rs) throws SQLException {
  176.         String host = rs.getString(ATTRIBUTE_HOST);
  177.         int id = rs.getInt(ATTRIBUTE_ID);
  178.         int port = rs.getInt(ATTRIBUTE_PORT);
  179.         int state = rs.getInt(ATTRIBUTE_STATE);
  180.         boolean obeyRobotsTXT = rs.getInt(ATTRIBUTE_OBEYROBOTSTXT) != 0;
  181.         boolean useProxy = rs.getInt(ATTRIBUTE_USEPROXY) != 0;
  182.         boolean useCookies = rs.getInt(ATTRIBUTE_USECOOKIES) != 0;
  183.         String userAgent = rs.getString(ATTRIBUTE_USERAGENT);
  184.         boolean baseSite = rs.getInt(ATTRIBUTE_BASESITE) != 0;
  185.         boolean handle = rs.getInt(ATTRIBUTE_HANDLE) != 0;
  186.         URL url = null;
  187.         try {
  188.             url = new URL("http", host, port, "");
  189.         } catch (MalformedURLException e) {
  190.             e.printStackTrace();
  191.         }
  192.         return new SiteInternal(storage, id, handle, url, state, obeyRobotsTXT, useProxy, useCookies, userAgent, baseSite);
  193.     }
  194. }