2012-07-11 149 views
0
if(lines.size() >= 5){ 
    String Actor = it.next(); 
    String Bio = it.next(); 
    String More_Bio = it.next(); 
    String Reason = it.next(); 
    String Fact = it.next(); 

    if (it.hasNext()== true &&it.next().startsWith("Actor : ")) 
    { 


     // for quotes 

     Actor = Actor.replace("'", "''"); 
     // remove comment 
     Actor = Actor.replace("Actor: ", " "); 

     System.out.println(Actor); 


    } 

    if (it.hasNext()== true &&it.next().startsWith("Bio: ")) 
    { 

     Bio = Bio.replace("'", "''"); 
     Bio = Bio.replace("Bio: ", ""); 
     System.out.println(Bio); 

    } 

    if (it.hasNext()== true &&it.next().startsWith("More_Bio: ")) 
    { 
    More_Bio = More_Bio.replace("'", "''"); 
    More_Bio = More_Bio.replace("More_Bio: ", ""); 
    System.out.println(More_Bio); 

    } 
    if (it.hasNext()== true &&it.next().startsWith("Reason: ")) 
    { 
    Reason = Reason.replace("'", "''"); 
    Reason = Reason.replace("Reason: ", ""); 
    System.out.println(Reason); 

    } 
    if (it.hasNext()== true &&it.next().startsWith("Fact: ")) 
    { 
    Fact =Fact.replace("'", "''"); 
    Fact =Fact.replace("Fact: ", ""); 
    System.out.println(Fact); 

    } 

    Statement statement = con.createStatement(); 
    statement.executeUpdate("INSERT INTO Tiffany (Actor, Bio, More_Bio, Reason,Fact) values('"+Actor+"','"+Bio+"','"+More_Bio+"','"+Reason+"','"+Fact+"')"); 

文件:扎克·埃夫隆數據庫插入

自述:他出生在聖路易斯奧比斯波,加利福尼亞州,並在大阿羅約附近的提出,客主演的幾集後「薩默蘭德「(2004年),他加入了常規演員陣容,扮演女孩瘋狂的卡梅隆貝爾。 Efron還出演過幾部飛行員,如Carl Laemke(2003)(TV)和Triple Play(2004)(TV)的Big Wide World。

More_Bio:Efron於2006年6月畢業於Arroyo Grande高中。Efron最喜歡的運動包括高爾夫,滑雪,攀巖和單板滑雪。他最近在沙灘上度過「Summerland」之後添加了衝浪活動。

原因:自從我第一次在「高中音樂劇」和「髮膠」中看到他以來,我喜歡這位華麗,優秀,有才華的演員,現在他更熱。他是好萊塢熱門王子。

事實:扎克最珍貴的財產是他親筆簽名的棒球系列,他是一位巨大的舊金山巨人球迷。

演員:泰勒勞特納

簡介:泰勒丹尼爾·洛特納出生於密歇根州Grand Rapids父母,Deborah和丹尼爾·洛特納。他和妹妹Makena在密歇根州Hudsonville的一個有禮貌的羅馬天主教家庭中長大。

More_Bio:然而,除了對武術的熱愛之外,泰勒很快就開始對7歲時的演技表示熱愛,當時他的武術指導員參與演出業務,鼓勵他去試鏡在漢堡王商業小外觀。

原因:這是一個hunky青少年偶像!我在「暮光之城」系列中把他當作雅各布布萊克的愛人!他是我見過的最好看的球員之一。當我推送他時,我非常興奮,他回覆了一次!

事實:他在大一和大二的高中期間踢足球。他是德國人,法國人,荷蘭人和美洲土着人(特別是渥太華和波塔瓦托米)的後裔。我的天啊!我們都喜歡萊昂國王樂隊。

我正在上述文件到數據庫中。但是這是我運行它時得到的錯誤。

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's favorite sports include golf, skiing, rock climbing, and snowboarding. 

He rece' at line 1 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) 
    at com.mysql.jdbc.Util.getInstance(Util.java:381) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2536) 
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1564) 
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1485) 
    at TiffanyWriter.main(TiffanyWriter.java:109) 
+0

嘗試打印出您要發送到MySQL什麼並手動校對。 – 2012-07-11 20:53:00

回答

3

您應該使用PreparedStatement,因爲它可以防止SQL injection attacks。 @John Moses發佈了一個教程,使用Java官方文檔中的PreparedStatement,這是另一個好鏈接:MySQL and Java JDBC - Tutorial

移動你的代碼的PreparedStatement,它應該是這樣的:

PreparedStatement ps = con.prepareStatement("INSERT INTO Tiffany(Actor, Bio, More_Bio, Reason, Fact) VALUES (?, ?, ?, ?, ?) "); 
ps.setString(1, Actor); 
ps.setString(2, Bio); 
ps.setString(3, More_Bio); 
ps.setString(4, Reason); 
ps.setString(5, Fact); 
ps.executeUpdate(); 

不要忘記關閉資源後,使用它們:

ps.close(); 
con.close(); 
+0

謝謝!它的工作現在! – user872009 2012-07-11 21:24:58

+0

不客氣:)。 – 2012-07-11 21:25:41

2

你需要逃避你的單引號。幸運的是,Java用PreparedStatements處理此問題http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

+0

嗨, 我試過這個,但我仍然有同樣的錯誤。 String sql =「INSERT INTO Tiffany(Actor,Bio,More_Bio,Reason,Fact) values(''+ Actor +'','」+ Bio +「','」+ More_Bio +「','」+ Reason +「', ' 「+事實+」')「; PreparedStatement statement = con.prepareStatement(sql); statement.executeUpdate(); – user872009 2012-07-11 21:04:15

+0

String sql =「INSERT INTO Tiffany(Actor,Bio,More_Bio,Reason,Fact)values('?','?','?','?','?')」; PreparedStatement ps = con.prepareStatement(sql); ps.setString(1,Actor); ps.setString(2,Bio); ... – 2012-07-11 21:07:16

+0

@JohnMoses請不要在評論中添加一堆代碼,因爲很難閱讀,它會更好,並添加評論說:「我已經更新了我的答案」或類似的東西。 – 2012-07-11 21:28:53