0

试图将这样的文件插入数据库

演员:泰勒·洛特纳

生物:泰勒丹尼尔劳特纳出生于密歇根州大急流城,父母黛博拉和丹尼尔劳特纳出生。他和妹妹 Makena 在密歇根州哈德逊维尔的一个彬彬有礼的罗马天主教家庭中长大。六岁时,泰勒开始在法比亚诺的空手道学校学习武术,他和家人很快发现了他对这项运动的独特和天生的天赋。他很快被邀请与七届世界空手道冠军迈克尔一起训练Chaturantabut(又名 Mike Chat),在 8 岁时,他被要求代表他的国家参加 12 年及以下的世界空手道协会,在那里他成为了青少年世界形式和武器冠军,赢得了三枚金牌。 2003年,泰勒继续在武术巡回赛中蓬勃发展,他在NASKA排名世界第一”

More_Bio:然而,除了对武术的热爱之外,泰勒在7岁时很快就对表演产生了兴趣,当时从事演艺界的武术教练鼓励他试镜,以在一个小角色中露面。汉堡王广告。尽管他没有成功,但他非常享受这段经历,以至于他告诉父母他想从事演艺事业。很快,他和他的家人就从他们在密歇根的家到加利福尼亚来回旅行,这样泰勒就可以定期试镜表演角色。泰勒 10 岁时,由于频繁的旅行和机票开始变得不堪重负,他的家人做出了搬迁到洛杉矶的关键决定,在那里泰勒将拥有能够全职试镜电影、电视和广告的优势。

理由:这是一个大块头的少年偶像!我爱他作为“暮光之城”系列中的雅各布·布莱克!他是我见过的最好看的人之一。当我在推特上给他发推文时,我非常兴奋,他回复了一次!

事实:他在高中一年级和二年级时踢足球。他有德国、法国、荷兰和美洲原住民(特别是渥太华和波塔瓦托米)血统。我的天啊!我们都喜欢莱昂国王乐队。

演员:罗伯特·帕丁森

简历:他于 1986 年 5 月 13 日出生于英国伦敦。他喜欢音乐,是一位出色的音乐家,会弹吉他和钢琴。罗伯特 15 岁时,他开始在巴恩斯剧院公司从事业余戏剧表演。之后,他出演了《魔戒》(2004)(电视剧)(《暮光之国》)等银幕角色,饰演吉塞尔赫。

More_Bio:2003 年,罗伯特在《哈利·波特与火焰杯》(2005 年)中扮演塞德里克·迪戈里的角色。一周后,他在 2003 年底与迈克纽厄尔会面后获得了自己的角色。此后,他在备受期待的电影《暮光之城》(2008/I) 中饰演爱德华卡伦。他的音乐也将在电影中听到。此外,罗伯特还在《小灰烬》(2008 年)和《如何成为》(2008 年)中饰演萨尔瓦多·达利(Salvador Dalí)。

原因:古怪,罗伯特帕丁森在我第一次看到他在“哈利波特”中扮演塞德里克迪戈里时让我大吃一惊,但当我在“暮光之城”中看到他作为吸血鬼爱德华卡伦时偷走了我的心。爱德华队为胜利!我只是喜欢他凌乱的头发和浓密的眉毛。

事实: : 他是一位出色的音乐家,会弹吉他和钢琴。他三岁开始学习钢琴,五岁开始学习古典吉他。

这是执行插入的代码

String Actor = "", Bio = "", More_Bio = "", Fact ="", Reason = "";
while ((it = br.readLine()) != null)   {

    if (it.startsWith("Actor: "))
    {
        it = it.replace("'", "\"");
         // remove actor
      it = it.replace("Actor:  ", " ");
         Actor = it;
         System.out.println(Actor);
        // ps.setString(1, Actor);
    }


    if (it.startsWith("Bio:"))
    {
        it = it.replace("'", "\"");
         // remove actor
      it = it.replace("Bio:  ", " ");
          Bio = it;
         System.out.println(Bio);
     //    ps.setString(2, Bio);
    }
    if (it.startsWith("More_Bio:"))
    {
        it = it.replace("'", "\"");
         // remove actor
      it = it.replace("More_Bio:  ", " ");
     More_Bio = it;
         System.out.println(More_Bio);
      //   ps.setString(3, More_Bio);
    }
    if (it.startsWith("Reason:"))
    {
        it = it.replace("'", "\"");
         // remove actor
      it = it.replace("Reason:  ", " ");
     Reason = it;
         System.out.println(Reason);
    //     ps.setString(4, Reason);
    }

    if (it.startsWith("Fact:"))
    {
        it = it.replace("'", "\"");
         // remove actor
      it = it.replace("Fact:  ", " ");
     Fact = it;
         System.out.println(Fact);
       //  ps.setString(5, Fact);
    }


    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();

如果代码在循环中有 ps 语句,则 Taylor Lautner 和 Robert Pattinson 的信息将两次插入数据库,当我将其从 while 循环中取出时,只插入最后一个 Robert Pattinson。泰勒被忽略了。

4

1 回答 1

0

您获取数据的方法是错误的。您尝试做的是每次找到演员或简历或任何此类关键字时执行更新语句。这是错误的,您应该先尝试收集所有信息,然后再执行更新。

我建议采用以下方法:

  • 创建一个POJO并通过您的 while 循环在 POJO 中填写有关演员的所有信息。将其保存在地图中(您的关键可能是演员的姓名

  • 然后遍历映射,从 POJO 中检索每个键的信息并创建更新语句并执行您的命令。

示例代码可能是这样的:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;

public class TextReader {

    public static void main(String[] args) {
        new TextReader().reader();
    }

    public void reader() {
        BufferedReader br = null;
        String it;
        String Actor = "", Bio = "", More_Bio = "", Fact = "", Reason = "";

        try {
            HashMap<String, PersonData> informationMap = new HashMap<String, TextReader.PersonData>();
            br = new BufferedReader(new FileReader(new File("textFile.txt")));
            
            while ((it = br.readLine()) != null) {

                if (it.startsWith("Actor: ")) {
                    it = it.replace("'", "\"");
                    // remove actor
                    it = it.replace("Actor:  ", " ");
                    Actor = it;
//                  System.out.println(Actor);
                    // ps.setString(1, Actor);
                }

                PersonData dataVO = informationMap.containsKey(Actor) ? informationMap.get(Actor) : new PersonData();

                if (it.startsWith("Bio:")) {
                    it = it.replace("'", "\"");
                    // remove actor
                    it = it.replace("Bio:  ", " ");
                    Bio = it;
                    // System.out.println(Bio);
                    dataVO.setBio(Bio);
                    // ps.setString(2, Bio);
                }
                if (it.startsWith("More_Bio:")) {
                    it = it.replace("'", "\"");
                    // remove actor
                    // it = it.replace("More_Bio:  ", " ");
                    More_Bio = it;
//                  System.out.println(More_Bio);
                     dataVO.setMoreBio(More_Bio);
                    // ps.setString(3, More_Bio);
                }
                if (it.startsWith("Reason:")) {
                    it = it.replace("'", "\"");
                    // remove actor
                    it = it.replace("Reason:  ", " ");
                    Reason = it;
                     dataVO.setReason(Reason);
                    // System.out.println(Reason);
                    // ps.setString(4, Reason);
                }

                if (it.startsWith("Fact:")) {
                    it = it.replace("'", "\"");
                    // remove actor
                    it = it.replace("Fact:  ", " ");
                    Fact = it;
                     dataVO.setFact(Fact);
                    // System.out.println(Fact);
                    // ps.setString(5, Fact);
                }

//              System.out.println(Actor + "\t" + Bio + "\t" + More_Bio + "\t"
//                      + Reason + "\t" + Fact);
                informationMap.put(Actor, dataVO);
            }
            
            for(String actorName: informationMap.keySet()){
                PersonData dataVO = informationMap.get(actorName);
                System.out.println(actorName);
                     // === Create your preparedstatement heare and execute the update ====
            }
        } catch (Exception exe) {
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException ex) {
                }
            }
        }
    }

您的示例 POJO 类可能如下所示:

    /**
     * Sample Person POJO class
     */
    public class PersonData {
        private String bio;
        private String moreBio;
        private String fact;
        private String reason;

        public String getBio() {
            return bio;
        }

        public void setBio(String bio) {
            this.bio = bio;
        }

        public String getMoreBio() {
            return moreBio;
        }

        public void setMoreBio(String moreBio) {
            this.moreBio = moreBio;
        }

        public String getFact() {
            return fact;
        }

        public void setFact(String fact) {
            this.fact = fact;
        }

        public String getReason() {
            return reason;
        }

        public void setReason(String reason) {
            this.reason = reason;
        }
    }
}

笔记

  • Java 命名约定规定变量名应以小写字母开头。尽管为了一致性起见,我遵循了您在代码中的内容,但我强烈建议您重构变量名

  • 我做了一个基本假设,即您的演员姓名是独一无二的。这就是为什么我在这种情况下将其用作密钥的原因。如果这不是真的,那么您可能需要考虑将参与者名称作为 POJO 类的一部分,并使用另一个唯一标识符作为您的键。

于 2012-07-20T18:12:51.283 回答