follow大神教程——實踐java爬蟲之七

在db0703中建立cfsn_news表html

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

修改一個表中字段爲自動增加:node

alter table questionlib modify id int(11) auto_increment; 
這樣應該能夠的,修改後從下一條記錄開始自動增加。 
若是想讓原來的自動增加就得複製現有表的結構(無id),添加id並加上AUTO_INCREMENT,而後經過循環,添加n條空記錄,而後對應先前表的id,依次插入數據。

http://zhidao.baidu.com/link?url=ikzYDJxRwVfIFEF1q15xTV43t5gvcLPmgUOzKXyHPOND59Ozf-ZWjQ7AY_q5YfkUfwglSzEb2Izp9NwuyECr86vxgGo1moBD4b-PdUUM2gSmysql

經過 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)

 刪除一個表web

drop table cfsnnews;【竟然把drop錯寫成dorp了,真是的】sql

數據庫基本上沒問題了,回頭看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+" ");
   }
   
 }
}

輸出:app

[a, b, c]
a b c
less

其中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 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;

運行:

此時沒有報錯,我但願執行成功了,god bless me;

查看數據庫內容

哇!!

 

成功了,能夠睡覺了!!

相關文章
相關標籤/搜索