数据库插入(Database insertion)

2019-07-30 09:02发布

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年)的几集,他加入了常规演员的女孩疯狂卡梅伦罢了后。 ·埃夫隆还主演了多部飞行员,如卡尔·Laemke(2003)(TV)和三重播放(2004)(TV)的大大世界。

More_Bio:埃夫隆毕业的大阿罗约高中在2006年6月埃夫隆的最喜欢的运动包括高尔夫,滑雪,攀岩,和滑雪板。 他最近添加的海滩上度过天后冲浪“萨默兰。”

原因:我暗恋过这个美丽的,可爱的,有才华的演员,因为我第一次看到他在“歌舞青春”和“发胶”,而他现在更热。 他的热好莱坞公爵。

事实:扎克的最珍贵的财产就是他的亲笔签名的棒球收集和他SA巨大的旧金山巨人队球迷。

演员:泰勒劳特纳

简介:泰勒丹尼尔·洛特纳出生于密歇根州Grand Rapids父母,Deborah和丹尼尔·洛特纳。 他和妹妹梅克纳,在彬彬有礼,罗马天主教家庭在哈得孙,密歇根州提出了。

More_Bio:不过,除了他对武术的热爱,泰勒迅速发展为在7岁的时候行事的爱,当他的武术教练,谁参与了表演事业,鼓励他去试镜的一小模样汉堡王的商业。

原因:这是一个虎背熊腰,脚蹬玉女! 我爱他,雅各布·布莱克在“暮光之城”系列! 他是我见过的最漂亮的球员之一。 我是如此兴奋,当我啾啾他,他回答说回来一次!

事实:他在高中他的大一,大二踢足球。 他是德国,法国,荷兰和美国本土(特别是渥太华和波塔瓦托米)的后裔。 我的天啊! 我们都喜欢莱昂国王乐队。

我想上面的文件到数据库中。 但是,这是我得到当我运行它的错误。

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)

Answer 1:

您应该使用PreparedStatement ,主要是因为它可以防止SQL注入攻击 。 @约翰摩西发布了一个教程在使用PreparedStatement从Java官方文档,这里是另一个很好的链接: MySQL和Java的JDBC -教程 。

移动你的代码的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();


Answer 2:

你需要逃避你的单引号。 幸运的是,Java的照顾这与用预处理http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html



文章来源: Database insertion