在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,依次插入数据。
通过 AUTO_INCREMENT设置
SQL
INSERT
语句的时候,要避免 指定那个自增的字段.否则会发生主键的冲突。
通过
ALTER
TABLE
语句 可以修改 自增的数值, 但是只能增加,不能减少。
TRUNCATE
TABLE
语句,会将自增ID重置为零。
mysql> CREATE TABLE test_create_tab2 (
-> id INT AUTO_INCREMENT,
-> val VARCHAR (10),
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.09 sec)
mysql> INSERT INTO test_create_tab2(val) VALUES ( 'NO id' );
Query OK, 1 row affected (0.03 sec)
mysql> select last_insert_id() as id;
+ ----+
| id |
+ ----+
| 1 |
+ ----+
1 row in set (0.00 sec)
mysql> INSERT INTO test_create_tab2(val) VALUES ( 'NO id 2' );
Query OK, 1 row affected (0.03 sec)
mysql> select last_insert_id() as id;
+ ----+
| id |
+ ----+
| 2 |
+ ----+
1 row in set (0.00 sec)
mysql> select * from test_create_tab2;
+ ----+---------+
| id | val |
+ ----+---------+
| 1 | NO id |
| 2 | NO id 2 |
+ ----+---------+
2 rows in set (0.00 sec)
删除一个表
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<String> 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);
【貌似List和ArrayList还不太一样】(http://blog.csdn.net/duanyipeng/article/details/7851138)
简单点的话ArrayList可通过ArrayList.get(i)来循环赋值到数组之中。
此处较为深入http://www.cnblogs.com/happyPawpaw/archive/2012/10/22/2734140.html
ArrayList<String> list=new ArrayList<String>();
String strings[]=(String [])list.toArray();这样写代码个人觉得应该没什么问题,编译也没有问题。可是具体运行的时候报异常,如下:Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object;
但是这么写是没有问题的:
ArrayList<String> list=new ArrayList<String>();
String strings[]=new String[list.size()];
for(int i=0,j=list.size();i<j;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<Cfsn> myCfsn = Spider.GetCfsn(content);
String[] titleArray = new String[myCfsn.size()];
String[] urlArray = new String[myCfsn.size()];
//循环赋值
for(int i=0;i<titleArray.length;i++){
titleArray[i]=myCfsn.get(i).title;
urlArray[i]=myCfsn.get(i).CfsnUrl;
}
for(int i=45;i<titleArray.length;i++){
System.out.println(titleArray[i]+"&"+urlArray[i]);
}
// 打印结果
//System.out.println(myCfsn);
}
}
运行结果
很好,现在可以为所欲为操作数组中的数据了
操作小技巧:shift+tab:整段代码左移;
因为网址字段有特殊符号,将数组内容赋给sql语句的过程中出错了
//循环插入操作
for(int i=0;i<titleArray.length;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 affectedmysql> 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;
运行:
此时没有报错,我希望执行成功了,god bless me;
查看数据库内容
哇!!
成功了,可以睡觉了!!