作业要求模拟数据库的操作,用文本文件做一些简单的增删改查
现在查有很多问题,望高手赐教^_^
例如:文本中的内容是:  
ID NAME SEX AGE
0001 小丽 female 10
0002 小红 female 20
0005 小明 male 40
0006 小菜 male 20
0007 小菜 female 30 现在要查询的条件数不定,例如要查 ID为0001的 ,或者查 AGE 在 9~30,SEX 为female的记录,
                    又或者查 NAME 为小菜的,SEX为female的记录请教高手该怎样做才好,怎样才高效?谢谢``
                                           

解决方案 »

  1.   

    用一个map存取条件!
          
            在组装sql语句时,从map里逐个读取!
      

  2.   

    1.程序运行时就把TXT的文件加载到StringBuilder中.以后的查询操作都是基于这个StringBuilder的.就不用频繁的操作文件了.2.符合查询的方式,就是对字符串的联合查询.
    比如你的ID为0001的 ,或者查 AGE 在 9~30,SEX 为female的记录;
    a.先把你的StringBuilder的内容按照回车分隔一下.split("\n").这样得到每一行的数据.
    b.然后用字符串的比对方式.类似的代码如下
      List<String> result = new ArrayList<String>();
      oneRow---你分隔后的每一行的数据.
      String[] data = oneRow.split(" ");//每行以空格分隔.
      if(data[0].equals("0001") && data[1].equals("小丽")){
          result.add(data[0]+" "+data[1]+" "+data[2] + " " + data[3]);
      }3.而修改和删除的时候你就在开始的StringBuilder中修改和删除.然后再从新写入文件即可.
      
      

  3.   

    1.程序运行时就把TXT的文件加载到StringBuilder中.以后的查询操作都是基于这个StringBuilder的.就不用频繁的操作文件了. 2.符合查询的方式,就是对字符串的联合查询. 
    比如你的ID为0001的 ,或者查 AGE 在 9~30,SEX 为female的记录; 
    a.先把你的StringBuilder的内容按照回车分隔一下.split("\n").这样得到每一行的数据. 
    b.然后用字符串的比对方式.类似的代码如下 
      List <String> result = new ArrayList <String>(); 
      oneRow---你分隔后的每一行的数据. 
      String[] data = oneRow.split(" ");//每行以空格分隔. 
      if(data[0].equals("0001") && data[1].equals("小丽")){ 
          result.add(data[0]+" "+data[1]+" "+data[2] + " " + data[3]); 
      } 3.而修改和删除的时候你就在开始的StringBuilder中修改和删除.然后再从新写入文件即可. 
      

  4.   

    查询的条件数不定的解决方法:
    1.生成条件字符串。如:
      class Condition {
          String name;//查询的字段名称
          String option;//操作符.默认就是=号
          String value;//值
      }  把条件都封装到Condition后,然后加入到List中。    public String searchSQL(List<Condition> conditions) {
            StringBuilder sb = new StringBuilder();
            .....//生成类似形式data[0].equals("0001") && data[1].equals("小丽")    ;
            return sb.toString();
      }2.下载MVEL包,MVEL你可以理解成Javascript中的EVAL。 
       public boolean currentRowContains(String conditionsStr) {
           return MVEL.eval(conditionsStr);    }