下面是我的源程序
目的:遍历本地所存储的网页源代码,从中抽取规格参数信息,存入数据库
      因为各个网页的规格参数不同,这么做是为了后期整理出一个新的规格参数表
过程:遍历第一个网页时,创建新列key1、value1,然后将匹配出来的参数名和值写入数据库
      遍历第二个网页时,创建新列key2、value2,然后同上,以此类推。
public class ExAllParameter extends DBCon{
public static long getFileNum(String path){
    long count=0;
File file=new File(path);
File list[] = file.listFiles();
for(int i=0;i<list.length;i++){
if(list[i].isDirectory()){
count++;
}
}
return count;
}

public static void main(String[] args) throws IOException,SQLException{
ExAllParameter eap = new ExAllParameter();
String file = ".\\source\\1\\";
long fn = eap.getFileNum(file);
for(long i=1;i<=fn;i++){
String keycolm = "key"+i;
String valuecolm = "value"+i;
conn("jdbc:mysql://127.0.0.1:3306/Extraction","root","123123");
stmt=con.createStatement();
stmt.execute("alter table allparameter add column "+keycolm+" varchar(2000);");
stmt.execute("alter table allparameter add column "+valuecolm+" varchar(2000);");
FileReader fr = new FileReader(file+i+"\\index"+i+".txt");
BufferedReader br = new BufferedReader(fr);
String s = "";
StringBuffer sb = new StringBuffer("");
while ((s = br.readLine()) != null) {
sb.append(s);
}
    String s1= "<tr><td class=\"tdTitle\">(.*?)</td><td>(.*?)</td>";
Pattern p=Pattern.compile(s1, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
    Matcher m=p.matcher(sb);
while(m.find())
{
String key =m.group(1);
String value = m.group(2);
//System.out.println(key+":"+value);
String sql="insert into allparameter("+keycolm+","+valuecolm+") values('"+key+"','"+value+"');";
stmt.execute(sql);
}
   closeCon();
}
}
}
存储结果变成如下图所示,就是key2和value2的第一条数据是从key1和value1的最后一行的下一行开始
这样下去,不用多久,程序就报错了。求助!!

解决方案 »

  1.   

    图出不来,大概如下面这样所示,我想让key2和value2的数据也是从第一行开始
    ID  key1    value1  key2     value2 
    1   品牌    诺基亚      
    2   型号    5233        
    3   后台QQ  支持       
    4                   品牌     索爱
    5                   型号     X10 
    6                   电子罗盘 支持
      

  2.   

    增加一个条件
    从遍历第二个网页开始用update,不用insert
      

  3.   

    谢谢你!我想到这个办法了,把程序改成
    如果当前列的行数还未超过前一列的行数,那么就用update添加数据
    超过了就直接用insert
    但是出现新问题:update要根据where的条件更新数据,否则会整列更新,所以我刚尝试后的结果是,新一列的前n行(n=前一列的行数)都背当前列的n+1的数据给更新了
    求助!!
      

  4.   

    好像跟序列号没有关系呵呵~
    我已经解决了,解决办法是用update的时候还得加上where条件,将更新的记录定位到新列的空记录行,不然它就会全部更新呵呵~真是马虎