【问题标题】:Database ps statements Insertion数据库 ps 语句插入
【发布时间】:2012-07-20 17:51:33
【问题描述】:

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

演员:泰勒·洛特纳

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

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

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

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

演员:罗伯特·帕丁森

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

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

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

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

这是插入的代码

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。泰勒被忽略了。

【问题讨论】:

    标签: java mysql database jdbc


    【解决方案1】:

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

    我会建议以下方法:

    • 创建一个POJO 并通过您的while 循环在POJO 中填写有关actor 的所有信息。在地图中维护它(你的键可能是演员的名字

    • 然后遍历映射,从 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 类的一部分,并使用另一个唯一标识符作为您的键。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      相关资源
      最近更新 更多