在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,依次插入數據。
經過 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 cless
其中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;
查看數據庫內容
哇!!
成功了,能夠睡覺了!!