包含两个类文件
DataBase.java和ParentBean.java

DataBase.java 主要功能函数如下
//查询sql

public Result QuerySQL(String sql)
  {
    ResultSet rs=null;
    try
    {
        pstm =conn.prepareStatement(sql);
        rs= pstm.executeQuery();
    }catch(SQLException sqle){
        if(pstm!=null) pstm.close();
        }
    return rs;
  }


//执行增、删、改的语句SQL
public int ExecuteSQL(String sql)
{
try
{
  pstm =conn.prepareStatement(sql);
  pstm.executeUpdate();
  conn.commit();
}
catch(SQLException sqle)
{
  return sqle.getErrorCode();
}
finally
{
pstm.close();
}
return 0;

}


DataBase分页操作函数

//分页操作函数

public Vector getOnePage(String sql,int page,int records)
{
/** 第一个为总页数
* 第二个为Hashtable
*/
Vector vect =new Vector();
try{
 pstm = conn.prepareStatement(sql);
rs= pstm.executeQuery();
int rows=0;
while (rs.next())
{
rows++;}

int sum= rows/records;
if(rows & records !=0 || rows ==0)
{
sum++;}
vect.add(""+rows);
vect.add(""+sum);
int temp=rows;

//移到当前行
pstm.close();
//rs.close();

pstm =conn.prepareStatement(sql);
rs= pstm.executeQuery();
rows=(page-1)*records;
rows++;
while(rows>0)
{
rs.next();
rows--;
}

DealString ds= new DealString();

//查询当前页
int j=0;

do
{
if(rs==null||j==records||temp==0||page>sum)
{
break;
}
j++;

ResultSetMetaData rsmd =rs.getMetaData();
int cols =rsmd.getColumnCount();
Hashtable hash =new Hashtable();
for(int i=1;i<=cols;i++)
{
  String field =ds.toString(rsmd.getColumnName(i));
  String value = ds.toString(rs.getString(i));
  hash.put(field,value);
}
  vect.add(hash);
 }while(rs.next());
}catch(SQLException sqle){}
finally
{
  closeRs();
  closePstm();
}
return vert;
}


提取数据表函数

//取得数据表数据

public Vector getData(String sql)
{
  vertor vert =new Vertor();
  try
{
pstm =conn.prepareStatement(sql);
rs=pstm.executeQuery();

DealString ds=new DealString();
ResultSetMetaData rsmd=rs.getMetaData();
int cols=rsmd.getColumnCount();
while(rs.next())
{
Hashtable hash =new Hashtable();
for(int i=1;i<=cols;i++)
{
Hashtable hash =new Hashtable();
for(int i=1;i<cols;i++)
{
  String field =ds.toString(rsmd.getColumnName(i));
  String value =ds.toString(ts.getString(i));
  hash.put(field,value);      
}
vect.add(hast);
}
}catch(SQLException sqle){}
return vect;
}

DataBase 排序函数

//为某一个字段进行重新排序
public int setSort(String table,String field1,String field2,String wherestr,String orderstr,boolean b)
 {
   // 写入序列号,field2 为惟一字段*/
  try
{
   String sql ="select "+field2+" from "+table;
   if(!wherestr.equals(""))sql += " where "+wherestr;
   sql+= " "+orderstr;
 
  pstm =conn.prepareStatement(sql);
  rs = pstm.executeQuery();
  PreparedStatement pstm_t=null;
  int i=1;
  while(rs.next())
  {
     if(b)// 为field2整型
     {
         sql="update "+table+" set "+field1+ "="+i+" where "+field2+"="rs.getString(1)+"";
     }
     else//为field2字符串
     {
     pstm_t =conn.prepareStatement(sql);
     pstm_t.executeUpdate();
     }
     i++;
  }

   pstm_t.close();
}catch(SQlException sqle){}
return ();
}

//取得数据集对象
public Vector getResultSetData(ResultSet rs)
{
Vector vect =new Vector();
try
{
//取得列数和列名
ResultSetMetaData rsmd =rs.getMetaData();
int cols =rsmd.getColumnCount();
while(rs.next())
{
   Hashtable hash = new Hashtable();
   for(int i=1;i<=cols;i++)
   {
   DealString ds =new DealString();
   String fiel = ds.toString(rsmd.getColumnName(i));
   String value = ds.toSring(rs.getString(i));
   hash.put(field,value);
   }
   vect.add(hash);
}
}
catch(SQLException sqle{}
return vect;
}


ParentBean.java
ParentBean 查询记录函数

public ResultSet selectRecord(String sql)
{
   return db.QuerySQL(sql);
}

函数的参数是Vector类型,其形式定义为:第一个变量表示表名,为字符串类型;接下来的变量为Vector
类型,该对象的维数为三维。第一个变量为字段的名称,第二个变量为字段的数值,第三个变量为字段的
类型。以此类推,函数的参数中,如果需要增加的数据行中需要设定某一个列的数值,就需要增加该参数
的一个变量。例如执行如下语句:insert into user(id,name,pwd) values(1,'admin','admin'),则参数
应该如下:
{'admin',{'id','1','NUM'},{'name','admin','CHAR'},{'pwd','admin','CHAR'}}

其中的数据类型有NUM,CHAR,TIME,NUM表示数值型,CHAR表示字符串型,TIME表示日期型号,如果需要
扩展,只需要在该组件中修改此处即可,这样修改一处,就可以对整个系统进行数据库的改造,彻底实现
了分层,极大地方便了数据库的移植。

在本函数中,按照以上定义的数据结构进行SQL语句的组合,而函数的参数是在执行数据库操作之前进行
的组合,这样可以实现用户层与数据层的分离,修改任何一层都不需要改动另外一层。在新增与组合过程
中,按照语句的规则,应该先有“insert into 表名”,再依次输出字段名称,然后组合"values"关键字
,最后依次输出字段的数值,在这个组合的过程中,注意字段类型的区别,最后SQL语句组合完成,调用
执行低层数据库函数。

ParentBean新增记录函数

/**新增记录*/
 
protected int insertRecord(Vector vect)
{
  /**Vector第1项 表名(String)
  //       第2项 列名(Vector[Field(String),Value(String),Type("CHAR","NUM")])*/

  //临时变量
  String sqlField ="";//形如(F1,F2)
  String sqlValue ="";//形如(V1,V2)
  String type     ="";

  for(int i=1;i<vect.size;i++)
  {
     //对某一个字段
     Vector v_t =(Vector)vect.get(i);
     field =(String)v_t.get(0);
     value =(String)v_t.get(1);
     if(value.indexOf("")!=-1)
     {
        value = value.replaceAll(""",""")
     }
     type =(String)v_t.get(2);
    
     //组合字段SQL
     if(sqlField.equals(""))sqlField = "(";
     else sqlField = sqlField + ",";

     sqlField = sqlField + field;
   
    //组合值SQL
    if(sqlValue.equals(""))sqlValue="(";
    else sqlValue= sqlValue = ",";
    if(value.equals(""))//为空时
    {
          sqlValue= sqlValue + "null";
    }
    else if(type.equals("CHAR"))//字符串
    {
      sqlValue = sqlValue + "'" + value + "'"
    }
    else if(type.equals("NUM"))//数值
    {
      sqlValue = sqlValue + value;   
    }
    else if(type.equals("TIME"))//日期
    {
      sqlValue = sqlValue + "to_date('yyyy-MM-dd HH:mm:ss','"+value+"')";
    }
}

sqlFiele = sqlField + ")";
sqlValue = sqlValue + ")";
String sql ="insert into "+(String)vect.get(0) + sqlField + "values" + sqlValue;
return db.ExecuteSQL(sql);
}


ParentBean 修改记录函数

/**修改记录*/

  protected int updateRecord(Vector vect)
  {
       /** Vector:  第一项 表名(String)
       //           第二项 列名(Vector[Field(String),Value(String),Type("CHAR","NUM")])
       //           第三项 条件(String sql)*/
      
       //临时变量
       String sqlSet = ""; 形如(Name='name',ID=9)
       String field  = "";
       String value  = "";
       String type   = "";
  
       int i=1;
       int n =vert.size();
       for(;i<(n-1);i++)
       {
             //对某一个字段
             Vector v_t = (Vector)vect.get(i);
             field = (String)v_t.get(0);
             value = (String)v_t.get(1);
             if(value.indexOf("")!=-1)
             {
                value= value.replaceAll("'",""");            
             }
             type = (String)v_t.get(2);
           
             //组合字段SQL
             if(sqlSet.equals(""))sqlSet = " ";
             else sqlSet = sqlSet + ",";
             sqlSet = sqlSet + field + "=";
             if(value.equals("")&&type.equals("NUM"))//为空时
             {
                  sqlSet = sqlSet + "null";     
             }
             if(type.equals("CHAR"))//字符串
             {
                  sqlSet = sqlSet + '"+ value +"';         
             }
             else if(type.equals("NUM"))//数值
             {
                  sqlSet = sqlSet + value;        
             }
             else if(type.equals("TIME"))//日期
             {
                  sqlSet = sqlSet + "to_date('yyyy-MM-dd HH:mm:ss','"+ value +"')";         
             }
       }
       String sql = "update "+(String)vect.get(0) + "set" + sqlSet;
       String sqlWhere =(String)vect.get(vect.size()-1);
       if(!sqlWhere.equals(""))
       {
              sql = sql = " where " + sqlWhere;       
       }
       return db.ExecuteSQL(sql);

}


ParentBean 删除记录函数


/**删除记录*/

   protected int deleteRecord(String sql)
   {
       retrun db.ExecuteSQL(sql);
   }


/**执行语句*/

   protected int executeUpdate(String sql)
   {
        return db.ExecuteSQL(sql);
   }

/**写数据库时某一个字段的存储类型*/
   protected Vector addVector(String field,String value,String type)
  {
     Vertor vect = new Vector();
     vect.add(field);
     vect.add(value);
     vect.add(type);
     return vect;
   }

posted on 2007-04-21 06:13  许维光  阅读(532)  评论(0)    收藏  举报