在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,依次插入数据。
http://zhidao.baidu.com/link?url=ikzYDJxRwVfIFEF1q15xTV43t5gvcLPmgUOzKXyHPOND59Ozf-ZWjQ7AY_q5YfkUfwglSzEb2Izp9NwuyECr86vxgGo1moBD4b-PdUUM2gS
通过 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!!"); } }
问问度娘(http://zhidao.baidu.com/link?url=SPHPJq9b5OZd1nj0cX8Y7--mfMmvuAvOfIiUV8PdhA9TwLKHf0W5r15j8ZF50secQBzUPCNKP10jE5GW6u6zHq)
加单引号或许可以,先在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;
查看数据库内容
哇!!
成功了,可以睡觉了!!