虫口模型c语言编程,follow大神教程——实践java爬虫之七

在db0703中创建cfsn_news表

CREATE TABLE cfsn_news( id   INT AUTO_INCREMENT, title  VARCHAR(10),URL  VARCHAR(255), PRIMARY KEY (id));

修改一个表中字段为自动增长:

alter table questionlib modify id int(11) auto_increment;

这样应该可以的,修改后从下一条记录开始自动增长。

如果想让原来的自动增长就得复制现有表的结构(无id),添加id并加上AUTO_INCREMENT,然后通过循环,添加n条空记录,然后对应先前表的id,依次插入数据。

删除一个表

drop table cfsnnews;【居然把drop错写成dorp了,真是的】

数据库基本上没问题了,回头看Java代码中最后打印的时候用的ArrayList,那ArrayList和数组如何相互转化呢?

temporary.java

import java.util.Arrays;

import java.util.List;

public class temporary{

public static void main(String[] args) {

// 数组转换为List,其中参数为任意类型

List list = Arrays.asList(new String[]{"a","b","c"});

// List转换为数组,参数指定数组的类型

String[] a = list.toArray(new String[0]);

// 打印

System.out.println(list);

for(String b : a){

System.out.print(b+" ");

}

}

}

输出:

[a, b, c]

a b c

其中List转换为数组可以用更容易理解的两句实现

String[] a= new String[list.size()];

list.toArray(a);

简单点的话ArrayList可通过ArrayList.get(i)来循环赋值到数组之中。

ArrayList list=new ArrayList();

String strings[]=(String [])list.toArray();

这样写代码个人觉得应该没什么问题,编译也没有问题。可是具体运行的时候报异常,如下:Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object;

但是这么写是没有问题的:

ArrayList list=new ArrayList();

String strings[]=new String[list.size()];

for(int i=0,j=list.size();i

strings[i]=list.get(i);

}

对于这个现象我们可以这么解释:Java中允许向上和向下转型,但是这个转型是否成功是根据Java虚拟机中这个对象的类型来实现的。Java虚拟机中保存了每个对象的类型。而数组也是一个对象。数组的类型是[Ljava.lang.Object。把[Ljava.lang.Object转换成[Ljava.lang.String是显然不可能的事情,因为这里是一个向下转型,而虚拟机只保存了这是一个Object的数组,不能保证数组中的元素是String的,所以这个转型不能成功。数组里面的元素只是元素的引用,不是存储的具体元素,所以数组中元素的类型还是保存在Java虚拟机中的。

根据上面的解释,我们可以把这个问题归纳到下面这个模型:

Object objs[]=new Object[10];

String strs[]=(String[])objs;

这样子和刚才上面编译错误是一样的。如果我们修改一下这个代码,如下:

String strs[]=new String[10];

Object objs[]=strs;

这样子就可以编译通过了。

只要能将要的信息转化为数组,一切就好办了,

在main类中测试一下(打印出最后五条信息测试一下)

public class Main {

public static void main(String args[]) {

// 定义即将访问的链接

String url = "http://www.cfsn.cn/news/node_4534.htm";

// 访问链接并获取页面内容

String content = Spider.SendGet(url);

// 获取该页面的所有的Cfsn对象

ArrayList myCfsn = Spider.GetCfsn(content);

String[] titleArray = new String[myCfsn.size()];

String[] urlArray = new String[myCfsn.size()];

//循环赋值

for(int i=0;i

titleArray[i]=myCfsn.get(i).title;

urlArray[i]=myCfsn.get(i).CfsnUrl;

}

for(int i=45;i

System.out.println(titleArray[i]+"&"+urlArray[i]);

}

// 打印结果

//System.out.println(myCfsn);

}

}

运行结果

32d1733ab89d6925793c8bf3bcbfd29c.png

很好,现在可以为所欲为操作数组中的数据了

操作小技巧:shift+tab:整段代码左移;

因为网址字段有特殊符号,将数组内容赋给sql语句的过程中出错了

//循环插入操作

for(int i=0;i

String sql_insert="insert into cfsn_news(title,URL) "

+ "values("+titleArray[i]+","+urlArray[i]+")";

//excuteUpdate执行完后,返回影响表的行数

int result=statement.executeUpdate(sql_insert);

if(result!=1){

System.out.println("第"+i+"次插入结果受影响行数不等于1!!");

}

}

加单引号或许可以,先在mysql中测试下

mysql> insert into cfsn_news(title,url) values('baidu','http://www.baidu.com');

Query OK, 1 row affected

mysql> select *from cfsn_news;

+----+-------+----------------------+

| id | title | URL                  |

+----+-------+----------------------+

|  1 | ceshi | http://www.baidu.com |

|  2 | baidu | http://www.baidu.com |

+----+-------+----------------------+

2 rows in set

运行结果

Data truncation: Data too long for column 'title' at row 1

(好坑)

navicat小技巧:左上角选项符号——文件——设计表,修改title字段的大小为255;

运行:

5591e6fe3d57bd072c98f7704f9cd63e.png

此时没有报错,我希望执行成功了,god bless me;

查看数据库内容

哇!!

76de1854b99f64346d720c6b57c9aa80.png

a6b574cad0f1314eb306eb6d5985a651.png

成功了,可以睡觉了!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值