RecordManager.java
上传用户:mingda
上传日期:2017-06-20
资源大小:27691k
文件大小:19k
源码类别:

OA系统

开发平台:

Java

  1. package com.gforce.currency.database;
  2. /**
  3.  * <p>Title: 吉力科技办公自动化系统</p>
  4.  * <p>Description: 吉力科技办公自动化系统</p>
  5.  * <p>Copyright: 版权所有 2003 (c) 西安吉力科技发展有限公司  Copyright (c) 2003 GForce Sceince & Technology</p>
  6.  * <p>Company: 西安吉力科技发展有限公司 (GForce Sceince & Technology)</p>
  7.  * @author 马登军
  8.  * @version 1.0
  9.  */
  10. import com.gforce.currency.database.*;
  11. import com.gforce.currency.*;
  12. import java.sql.*;
  13. import java.util.*;
  14. public abstract class RecordManager
  15. {
  16.   /**
  17.    * 通过ID字符串删除记录
  18.    * @param strIDs ID字符串,多个ID之间使用“,”连接
  19.    * @return 错误代码,如果小于1,说明删除错误
  20.    */
  21.   public int DeleteByIDs(String strIDs)
  22.   {
  23.     return DeleteBySQLWhere(getIDFieldName() + " in (" + strIDs + ")");
  24.   }
  25.   /**
  26.    * 通过ID删除记录
  27.    * @param intID ID值
  28.    * @return 错误代码,如果小于1,说明删除错误
  29.    */
  30.   public int DeleteByID(int intID)
  31.   {
  32.     return DeleteBySQLWhere(getIDFieldName() + " = " + intID);
  33.   }
  34.   /**
  35.    * 通过WhereSQL语句删除记录
  36.    * @param strSQLWhere WhereSQL语句
  37.    * @return 错误代码,如果小于1,说明删除错误
  38.    */
  39.   public int DeleteBySQLWhere(String strSQLWhere)
  40.   {
  41.     int intReturn = -100;
  42.     int counter = 0;
  43.     Vector vc = SQLManager.GetResultSet("select count(*) as counter from " + getTableName() + " where " + strSQLWhere);
  44.     if (vc.size() == 1)
  45.     {
  46.       counter = Integer.parseInt( ( (Vector) vc.get(0)).get(0).toString());
  47.       if (counter < 0)
  48.       {
  49.         return -3; //表示要删除的记录不存在
  50.       }
  51.     }
  52.     else
  53.     {
  54.       return -3; //表示要删除的记录不存在
  55.     }
  56.     intReturn = SQLManager.ExcuteSQL("Delete from " + getTableName() + " where " + strSQLWhere);
  57.     return intReturn;
  58.   }
  59.   /**
  60.    * 插入从m_request获取的一条记录
  61.    * @param m_request Request请求
  62.    * @return 插入之后得到记录ID,如果小于1,则说明插入错误
  63.    */
  64.   public int InsertRecord(Request m_request)
  65.   {
  66.     int returnid = 0;
  67.     int counter = 0;
  68.     Vector vc = SQLManager.GetResultSet("select count(*) as counter from " +
  69.                                         getTableName() +
  70.                                         getInsertWhere(m_request) +
  71.                                         "");
  72.     if (vc.size() == 1)
  73.     {
  74.       counter = Integer.parseInt( ( (Vector) vc.get(0)).get(0).toString());
  75.     }
  76.     String strSQL = "Insert into " + getTableName() + " (" + getFieldsName() +
  77.       ")  values (" + getInsertValues(m_request) + ")";
  78.     SQLManager.ExcuteSQL(strSQL);
  79.     vc = SQLManager.GetResultSet("select top 1 " + getIDFieldName() +
  80.                                  " from " +
  81.                                  getTableName() +
  82.                                  getInsertWhere(m_request) +
  83.                                  " order by " + getIDFieldName() +
  84.                                  " desc");
  85.     if (vc.size() == 1)
  86.     {
  87.       returnid = Integer.parseInt( ( (Vector) vc.get(0)).get(0).toString());
  88.     }
  89.     else
  90.     {
  91.       returnid = -2; //表示新插入的记录不存在,新记录插入没有成功
  92.     }
  93.     return returnid;
  94.   }
  95.   /**
  96.    * 更新从m_request获取的一条记录
  97.    * @param m_request  Request请求
  98.    * @return 错误代码,小于1表示错误
  99.    */
  100.   public int UpdateRecord(Request m_request)
  101.   {
  102.     int counter = 0;
  103.     String strUpdateDatas = getUpdateDatas(m_request);
  104.     SystemOut.LogPrintLine(strUpdateDatas);
  105.     int intIDFieldValue = getIDFieldValue(m_request);
  106.     SystemOut.Log(intIDFieldValue + "");
  107.     if (strUpdateDatas.trim().length() > 1 && intIDFieldValue > 0)
  108.     {
  109.       Vector vc = SQLManager.GetResultSet(
  110.         "select count(*) as counter from " +
  111.         getTableName() + " where " + getIDFieldName() + "=" + intIDFieldValue);
  112.       if (vc.size() == 1)
  113.       {
  114.         counter = Integer.parseInt( ( (Vector) vc.get(0)).get(0).toString());
  115.         if (counter < 0)
  116.         {
  117.           return -3; //表示要修改的记录不存在
  118.         }
  119.       }
  120.       else
  121.       {
  122.         return -3; //表示要修改的记录不存在
  123.       }
  124.       String strSQL = "Update " + getTableName() + " set " + strUpdateDatas +
  125.         " where " + getIDFieldName() + "=" + intIDFieldValue;
  126.       return SQLManager.ExcuteSQL(strSQL);
  127.     }
  128.     else
  129.     {
  130.       return -106; //表示获取到的记录ID不正确或者Form字段值不正确
  131.     }
  132.   }
  133.   /**
  134.    * 从Request请求中获取更新SQL语句
  135.    * @param m_request Request请求
  136.    * @return  更新的SQL语句
  137.    */
  138.   private String getUpdateDatas(Request m_request)
  139.   {
  140.     String strReturnValue = "";
  141.     strReturnValue += getUpdateNumeric(m_request);
  142.     strReturnValue += getUpdateString(m_request);
  143.     strReturnValue += getUpdateDateTime(m_request);
  144.     strReturnValue += getUpdateText(m_request);
  145.     if (strReturnValue.trim().length() > 2)
  146.     {
  147.       return strReturnValue.trim().substring(1);
  148.     }
  149.     else
  150.     {
  151.       return "";
  152.     }
  153.   }
  154.   /**
  155.    * 从Request请求中获取更新数值型字段值的SQL语句
  156.    * @param m_request  Request请求
  157.    * @return 更新数值型字段值的SQL语句
  158.    */
  159.   private String getUpdateNumeric(Request m_request)
  160.   {
  161.     StringBuffer strbufTemp = new StringBuffer();
  162.     String[] strArray = getNumericFieldsName();
  163.     for (int i = 0; i < strArray.length; i++)
  164.     {
  165.       if (strArray[i].trim().length() > 0)
  166.       {
  167.         strbufTemp.append(", " + strArray[i] + "=" +
  168.                           m_request.GetFloat(UpdateParament(strArray[i])));
  169.       }
  170.     }
  171.     return strbufTemp.toString();
  172.   }
  173.   /**
  174.    * 从Request请求中获取更新字符串类型字段值的SQL语句
  175.    * @param m_request  Request请求
  176.    * @return 更新字符串类型字段值的SQL语句
  177.    */
  178.   private String getUpdateString(Request m_request)
  179.   {
  180.     StringBuffer strbufTemp = new StringBuffer();
  181.     String[] strArray = getStringFieldsName();
  182.     for (int i = 0; i < strArray.length; i++)
  183.     {
  184.       if (strArray[i].trim().length() > 0)
  185.       {
  186.         strbufTemp.append(", " + strArray[i] + "='" +
  187.                           m_request.GetString(UpdateParament(strArray[i])).replaceAll("'", "''") +
  188.                           "'");
  189.       }
  190.     }
  191.     return strbufTemp.toString();
  192.   }
  193.   /**
  194.    * 从Request请求中获取更新日期时间类型字段值的SQL语句
  195.    * @param m_request  Request请求
  196.    * @return 更新日期时间类型字段值的SQL语句
  197.    */
  198.   private String getUpdateDateTime(Request m_request)
  199.   {
  200.     StringBuffer strbufTemp = new StringBuffer();
  201.     String[] strArray = getDatetimeFieldsName();
  202.     for (int i = 0; i < strArray.length; i++)
  203.     {
  204.       if (strArray[i].trim().length() > 0)
  205.       {
  206.         if (m_request.GetString(UpdateParament(strArray[i])).length() > 6)
  207.         {
  208.           strbufTemp.append(", " + strArray[i] + "='" + m_request.GetString(UpdateParament(strArray[i])) +
  209.                             "'");
  210.         }
  211.         else
  212.         {
  213.           strbufTemp.append(", " + strArray[i] + "=null");
  214.         }
  215.       }
  216.     }
  217.     return strbufTemp.toString();
  218.   }
  219.   /**
  220.    * 从Request请求中获取更新大字符串类型字段值的SQL语句
  221.    * @param m_request  Request请求
  222.    * @return 更新大字符串类型字段值的SQL语句
  223.    */
  224.   private String getUpdateText(Request m_request)
  225.   {
  226.     StringBuffer strbufTemp = new StringBuffer();
  227.     String[] strArray = getTextFieldsName();
  228.     for (int i = 0; i < strArray.length; i++)
  229.     {
  230.       if (strArray[i].trim().length() > 0)
  231.       {
  232.         strbufTemp.append(", " + strArray[i] + "='" +
  233.                           m_request.GetString(UpdateParament(strArray[i])).replaceAll("'", "''") +
  234.                           "'");
  235.       }
  236.     }
  237.     return strbufTemp.toString();
  238.   }
  239.   /**
  240.    * 从Request请求中获取更新时的ID字段的值
  241.    * @param m_request Request请求
  242.    * @return ID字段值
  243.    */
  244.   private int getIDFieldValue(Request m_request)
  245.   {
  246.     return m_request.GetInt(UpdateParament(getIDFieldName()));
  247.   }
  248.   /**
  249.    * 从Request请求中获取插入记录查询的SQL语句
  250.    * @param m_request Request请求
  251.    * @return 插入记录查询的SQL语句
  252.    */
  253.   private String getInsertWhere(Request m_request)
  254.   {
  255.     String strTemp = "";
  256.     strTemp += getNumericInsertWhere(m_request);
  257.     strTemp += getStringInsertWhere(m_request);
  258.     strTemp += getDatetimeInsertWhere(m_request);
  259.     if (strTemp.trim().length() > 3)
  260.     {
  261.       strTemp = " where " + strTemp.substring(4);
  262.     }
  263.     return strTemp;
  264.   }
  265.   /**
  266.    * 从Request请求中获取更新记录查询的SQL语句
  267.    * @param m_request Request请求
  268.    * @return 更新记录查询的SQL语句
  269.    */
  270.   private String getUpdateWhere(Request m_request)
  271.   {
  272.     String strTemp = "";
  273.     strTemp += getNumericUpdateWhere(m_request);
  274.     strTemp += getStringUpdateWhere(m_request);
  275.     strTemp += getDatetimeUpdateWhere(m_request);
  276.     if (strTemp.trim().length() > 3)
  277.     {
  278.       strTemp = " where (not " + getIDFieldName() + "=" +
  279.         getIDFieldValue(m_request) + ") " + strTemp;
  280.     }
  281.     else
  282.     {
  283.       strTemp = " where 1=2 ";
  284.     }
  285.     return strTemp;
  286.   }
  287.   /**
  288.    * 从Request请求中获取插入记录中数值型字段的查询SQL语句
  289.    * @param m_request Request请求
  290.    * @return 插入记录中数值型字段的查询SQL语句
  291.    */
  292.   private String getNumericInsertWhere(Request m_request)
  293.   {
  294.     StringBuffer strbufTemp = new StringBuffer();
  295.     String[] strArray = getNumericFieldsName();
  296.     for (int i = 0; i < strArray.length; i++)
  297.     {
  298.       if (strArray[i].trim().length() > 0)
  299.       {
  300.         strbufTemp.append(" and " + strArray[i] + "=" +
  301.                           m_request.GetFloat(InsertParament(strArray[i])));
  302.       }
  303.     }
  304.     return strbufTemp.toString();
  305.   }
  306.   /**
  307.    * 从Request请求中获取插入记录中字符串类型字段的查询SQL语句
  308.    * @param m_request Request请求
  309.    * @return 插入记录中字符串类型字段的查询SQL语句
  310.    */
  311.   private String getStringInsertWhere(Request m_request)
  312.   {
  313.     StringBuffer strbufTemp = new StringBuffer();
  314.     String[] strArray = getStringFieldsName();
  315.     for (int i = 0; i < strArray.length; i++)
  316.     {
  317.       if (strArray[i].trim().length() > 0)
  318.       {
  319.         strbufTemp.append(" and " + strArray[i] + "='" +
  320.                           m_request.GetString(InsertParament(strArray[i])) +
  321.                           "'");
  322.       }
  323.     }
  324.     return strbufTemp.toString();
  325.   }
  326.   /**
  327.    * 从Request请求中获取插入记录中日期时间类型字段的查询SQL语句
  328.    * @param m_request Request请求
  329.    * @return 插入记录中日期时间类型字段的查询SQL语句
  330.    */
  331.   private String getDatetimeInsertWhere(Request m_request)
  332.   {
  333.     StringBuffer strbufTemp = new StringBuffer();
  334.     String[] strArray = getDatetimeFieldsName();
  335.     for (int i = 0; i < strArray.length; i++)
  336.     {
  337.       if (strArray[i].trim().length() > 0)
  338.       {
  339.         if (m_request.GetString(InsertParament(strArray[i])).length() > 3)
  340.         {
  341.           strbufTemp.append(" and " + strArray[i] + "='" +
  342.                             m_request.GetString(InsertParament(strArray[i])) +
  343.                             "'");
  344.         }
  345.         else
  346.         {
  347.           strbufTemp.append(" and " + strArray[i] + " is null");
  348.         }
  349.       }
  350.     }
  351.     return strbufTemp.toString();
  352.   }
  353.   /**
  354.    * 从Request请求中获取更新记录中数值型字段的查询SQL语句
  355.    * @param m_request Request请求
  356.    * @return 更新记录中数值型字段的查询SQL语句
  357.    */
  358.   private String getNumericUpdateWhere(Request m_request)
  359.   {
  360.     StringBuffer strbufTemp = new StringBuffer();
  361.     String[] strArray = getNumericFieldsName();
  362.     for (int i = 0; i < strArray.length; i++)
  363.     {
  364.       if (strArray[i].trim().length() > 0)
  365.       {
  366.         strbufTemp.append(" and " + strArray[i] + "=" +
  367.                           m_request.GetFloat(UpdateParament(strArray[i])));
  368.       }
  369.     }
  370.     return strbufTemp.toString();
  371.   }
  372.   /**
  373.    * 从Request请求中获取更新记录中字符串类型字段的查询SQL语句
  374.    * @param m_request Request请求
  375.    * @return 更新记录中字符串类型字段的查询SQL语句
  376.    */
  377.   private String getStringUpdateWhere(Request m_request)
  378.   {
  379.     StringBuffer strbufTemp = new StringBuffer();
  380.     String[] strArray = getStringFieldsName();
  381.     for (int i = 0; i < strArray.length; i++)
  382.     {
  383.       if (strArray[i].trim().length() > 0)
  384.       {
  385.         strbufTemp.append(" and " + strArray[i] + "='" +
  386.                           m_request.GetString(UpdateParament(strArray[i])) +
  387.                           "'");
  388.       }
  389.     }
  390.     return strbufTemp.toString();
  391.   }
  392.   /**
  393.    * 从Request请求中获取更新记录中日期时间类型字段的查询SQL语句
  394.    * @param m_request Request请求
  395.    * @return 更新记录中日期时间类型字段的查询SQL语句
  396.    */
  397.   private String getDatetimeUpdateWhere(Request m_request)
  398.   {
  399.     StringBuffer strbufTemp = new StringBuffer();
  400.     String[] strArray = getDatetimeFieldsName();
  401.     for (int i = 0; i < strArray.length; i++)
  402.     {
  403.       if (strArray[i].trim().length() > 0)
  404.       {
  405.         strbufTemp.append(" and " + strArray[i] + "='" +
  406.                           m_request.GetString(UpdateParament(strArray[i])) +
  407.                           "'");
  408.       }
  409.     }
  410.     return strbufTemp.toString();
  411.   }
  412.   /**
  413.    * 获取字段名称
  414.    * @return 字段名称
  415.    */
  416.   public String getFieldsName()
  417.   {
  418.     String strTemp = "";
  419.     strTemp += getStringFromStringArray(getNumericFieldsName());
  420.     strTemp += getStringFromStringArray(getStringFieldsName());
  421.     strTemp += getStringFromStringArray(getDatetimeFieldsName());
  422.     strTemp += getStringFromStringArray(getTextFieldsName());
  423.     if (strTemp.length() > 1)
  424.     {
  425.       return strTemp.substring(1);
  426.     }
  427.     else
  428.     {
  429.       return "";
  430.     }
  431.   }
  432.   /**
  433.    * 将字符串数组中的字符串用“,”连接起来,如果字符串长度小于1,则忽略,并且不去字符串头部多余“,”
  434.    * @param strArray  字符串数组
  435.    * @return  连接后得到的字符串
  436.    */
  437.   private String getStringFromStringArray(String[] strArray)
  438.   {
  439.     StringBuffer strbufTemp = new StringBuffer();
  440.     if (strArray.length > 0)
  441.     {
  442.       for (int i = 0; i < strArray.length; i++)
  443.       {
  444.         if (strArray[i].trim().length() > 0)
  445.         {
  446.           strbufTemp.append("," + strArray[i]);
  447.         }
  448.       }
  449.     }
  450.     return strbufTemp.toString();
  451.   }
  452.   /**
  453.    * 从Request请求中获取插入记录时日期类型字段的SQL语句
  454.    * @param m_request Request Request请求
  455.    * @param strTextFieldsName String[] 日期字段名称数组
  456.    * @return String 插入记录时日期类型字段的SQL语句
  457.    */
  458.   private String getInsertRequestText(Request m_request,
  459.                                       String[] strTextFieldsName)
  460.   {
  461.     StringBuffer strbufTemp = new StringBuffer();
  462.     if (strTextFieldsName.length > 0)
  463.     {
  464.       for (int i = 0; i < strTextFieldsName.length; i++)
  465.       {
  466.         if (strTextFieldsName[i].trim().length() > 0)
  467.         {
  468.           String strTempText = m_request.GetString(InsertParament(
  469.             strTextFieldsName[i])).
  470.             replaceAll("'", "''");
  471.           strbufTemp.append(",'" + strTempText + "'");
  472.         }
  473.       }
  474.     }
  475.     return strbufTemp.toString();
  476.   }
  477.   /**
  478.    * 从Request请求中获取插入记录时日期类型字段的SQL语句
  479.    * @param m_request Request请求
  480.    * @param strDateFieldsName  日期字段名称数组
  481.    * @return 插入记录时日期类型字段的SQL语句
  482.    */
  483.   private String getInsertRequestDate(Request m_request,
  484.                                       String[] strDateFieldsName)
  485.   {
  486.     StringBuffer strbufTemp = new StringBuffer();
  487.     if (strDateFieldsName.length > 0)
  488.     {
  489.       for (int i = 0; i < strDateFieldsName.length; i++)
  490.       {
  491.         if (strDateFieldsName[i].trim().length() > 0)
  492.         {
  493.           String strTempDate = m_request.GetString(InsertParament(
  494.             strDateFieldsName[i])).
  495.             replaceAll("'", "''");
  496.           if (strTempDate.length() < 6)
  497.           {
  498.             strbufTemp.append(",null");
  499.           }
  500.           else
  501.           {
  502.             strbufTemp.append(",'" + strTempDate + "'");
  503.           }
  504.         }
  505.       }
  506.     }
  507.     return strbufTemp.toString();
  508.   }
  509.   /**
  510.    * 从Request请求中获取插入记录时字符串类型字段的SQL语句
  511.    * @param m_request Request请求
  512.    * @param strStringFieldsName  字符串类型字段名称数组
  513.    * @return 插入记录时字符串类型字段的SQL语句
  514.    */
  515.   private String getInsertRequestString(Request m_request,
  516.                                         String[] strStringFieldsName)
  517.   {
  518.     StringBuffer strbufTemp = new StringBuffer();
  519.     if (strStringFieldsName.length > 0)
  520.     {
  521.       for (int i = 0; i < strStringFieldsName.length; i++)
  522.       {
  523.         if (strStringFieldsName[i].trim().length() > 0)
  524.         {
  525.           strbufTemp.append(",'" + m_request.GetString(InsertParament(
  526.             strStringFieldsName[i])).replaceAll("'", "''") + "'");
  527.         }
  528.       }
  529.     }
  530.     return strbufTemp.toString();
  531.   }
  532.   /**
  533.    * 从Request请求中获取插入记录时数值型字段的SQL语句
  534.    * @param m_request Request请求
  535.    * @param strNumericFieldsName  数值类型字段名称数组
  536.    * @return 插入记录时数值型字段的SQL语句
  537.    */
  538.   private String getInsertRequestNumeric(Request m_request,
  539.                                          String[] strNumericFieldsName)
  540.   {
  541.     StringBuffer strbufTemp = new StringBuffer();
  542.     if (strNumericFieldsName.length > 0)
  543.     {
  544.       for (int i = 0; i < strNumericFieldsName.length; i++)
  545.       {
  546.         if (strNumericFieldsName[i].trim().length() > 0)
  547.         {
  548.           strbufTemp.append("," +
  549.                             m_request.GetFloat(InsertParament(
  550.                               strNumericFieldsName[
  551.                               i])) +
  552.                             "");
  553.         }
  554.       }
  555.     }
  556.     return strbufTemp.toString();
  557.   }
  558.   /**
  559.    * 从Request请求中获取插入记录时SQL语句
  560.    * @param m_request Request请求
  561.    * @return 插入记录时的SQL语句
  562.    */
  563.   public String getInsertValues(Request m_request)
  564.   {
  565.     String strTemp = "";
  566.     strTemp += getInsertRequestNumeric(m_request, getNumericFieldsName());
  567.     strTemp += getInsertRequestString(m_request, getStringFieldsName());
  568.     strTemp += getInsertRequestDate(m_request, getDatetimeFieldsName());
  569.     strTemp += getInsertRequestText(m_request, getTextFieldsName());
  570.     if (strTemp.length() > 1)
  571.     {
  572.       return strTemp.substring(1);
  573.     }
  574.     else
  575.     {
  576.       return "";
  577.     }
  578.   }
  579.   /**
  580.    * 获取本类操作表名称
  581.    * @return String 本类操作表名称
  582.    */
  583.   protected abstract String getTableName();
  584.   /**
  585.    * 获取主键或者可以确定唯一记录的字段名称
  586.    * @return String 主键或者可以确定唯一记录的字段名称
  587.    */
  588.   protected abstract String getIDFieldName(); //
  589.   /**
  590.    * 获取数值型字段名称
  591.    * @return String[] 数值型字段名称
  592.    */
  593.   protected abstract String[] getNumericFieldsName(); //获取数值型字段名称
  594.   /**
  595.    * 获取字符型字段名称
  596.    * @return String[] 字符型字段名称
  597.    */
  598.   protected abstract String[] getStringFieldsName(); //获取字符型字段名称
  599.   /**
  600.    * 获取日期时间型字段名称
  601.    * @return String[] 日期时间型字段名称
  602.    */
  603.   protected abstract String[] getDatetimeFieldsName(); //获取日期时间型字段名称
  604.   /**
  605.    * 获取大文本型字段名称
  606.    * @return String[] 大文本型字段名称
  607.    */
  608.   protected abstract String[] getTextFieldsName(); //获取大文本型字段名称
  609.   /**
  610.    * 根据字段名称获取插入数据时表单元素名称
  611.    * @param strFieldName String 字段名称
  612.    * @return String 插入数据时表单元素名称
  613.    */
  614.   protected abstract String InsertParament(String strFieldName); //根据字段名称获取插入数据时表单元素名称
  615.   /**
  616.    * 根据字段名称获取修改数据时表单元素名称
  617.    * @param strFieldName String 字段名称
  618.    * @return String 修改数据时表单元素名称
  619.    */
  620.   protected abstract String UpdateParament(String strFieldName); //根据字段名称获取修改数据时表单元素名称
  621. }