下面是我的源程序
目的:遍历本地所存储的网页源代码,从中抽取规格参数信息,存入数据库
因为各个网页的规格参数不同,这么做是为了后期整理出一个新的规格参数表
过程:遍历第一个网页时,创建新列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的最后一行的下一行开始
这样下去,不用多久,程序就报错了。求助!!
目的:遍历本地所存储的网页源代码,从中抽取规格参数信息,存入数据库
因为各个网页的规格参数不同,这么做是为了后期整理出一个新的规格参数表
过程:遍历第一个网页时,创建新列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的最后一行的下一行开始
这样下去,不用多久,程序就报错了。求助!!
ID key1 value1 key2 value2
1 品牌 诺基亚
2 型号 5233
3 后台QQ 支持
4 品牌 索爱
5 型号 X10
6 电子罗盘 支持
从遍历第二个网页开始用update,不用insert
如果当前列的行数还未超过前一列的行数,那么就用update添加数据
超过了就直接用insert
但是出现新问题:update要根据where的条件更新数据,否则会整列更新,所以我刚尝试后的结果是,新一列的前n行(n=前一列的行数)都背当前列的n+1的数据给更新了
求助!!
我已经解决了,解决办法是用update的时候还得加上where条件,将更新的记录定位到新列的空记录行,不然它就会全部更新呵呵~真是马虎