2012-07-11 152 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