尝试将这样的文件插入数据库
演员:泰勒劳特纳
生物:Taylor Daniel Lautner出生于密歇根州大急流城,父母是Deborah和Daniel Lautner。他和妹妹梅克纳在密歇根州哈德逊维尔的一个彬彬有礼的罗马天主教家庭长大。六岁时,泰勒开始在法比亚诺的空手道学校学习武术,他和他的家人很快就注意到了他对这项运动的独特天赋。他很快就被邀请参加七次世界空手道冠军迈克尔的训练。 Chaturantabut(又名迈克聊天),在八岁时,他被要求代表他的国家在世界空手道协会的十二年和分部,在那里他成为少年世界形式和武器冠军,赢得三枚金牌。 2003年,泰勒继续在武术巡回赛中蓬勃发展,他在世界范围内为NASKA的黑带开放形式,音乐武器,传统武器和传统形式排名第一,并且在十二岁时,他成为三次少年世界冠军。
More_Bio:然而,除了对武术的热爱之外,泰勒很快就培养了对七岁时表演的热爱,当时他参与演艺界的武术教练鼓励他试镜一小段时间。出现在汉堡王商业广告中。尽管他没有成功,但他很享受这种经历,以至于他告诉他的父母他想从事表演事业。很快,他和他的家人就从密歇根州的家到来加利福尼亚来回旅行,因此泰勒可以定期试演表演角色。当泰勒十岁的时候,随着频繁的旅行和机票开始变得势不可挡,他的家人做出了重新安置到洛杉矶的关键决定,泰勒将拥有能够全职试听电影,电视和广告的优势。
原因:这是一个笨拙的青少年偶像!在“暮光之城”系列中,我爱他为Jacob Black!他是我见过的最好看的家伙之一。当我发推文给他时他很兴奋,他回复了一次!
事实:他在高中一年级和二年级时就踢足球。他是德国人,法国人,荷兰人和美洲原住民(特别是渥太华和波塔瓦托米)的血统。我的天啊!我们都喜欢莱昂国王队。
演员:罗伯特帕丁森
Bio:他于1986年5月13日出生于英国伦敦。他喜欢音乐,是一位出色的音乐家,兼容吉他和钢琴。当罗伯特15岁时,他开始与巴恩斯剧院公司一起做业余戏剧。之后,他扮演了像诅咒之戒(2004)(电视)(暮光之城)一样的屏幕角色,作为吉赛尔。
More_Bio:2003年,罗伯特在“哈利波特与火焰杯”(2005)中扮演了塞德里克·迪戈里的角色。他在2003年底与迈克·纽厄尔见面后一周后就获得了自己的角色。此后,他在备受期待的电影“暮光之城”(2008 / I)中饰演爱德华·卡伦。他的音乐也会在电影中听到。此外,Robert还在Little Ashes(2008)和Art in How to Be(2008)中完成了SalvadorDalí即将到来的角色。
理由:古怪,罗伯特帕丁森在我第一次看到他作为“哈利波特”中的塞德里克迪戈里时,让我屏住呼吸,但当我在“暮光之城”中看到他作为吸血鬼爱德华卡伦时偷走了我的心。爱德华队赢了!我只是喜欢他凌乱的头发和浓密的眉毛。
事实:他是一位出色的音乐家,兼有吉他和钢琴。他三岁开始上钢琴课,五岁开始上古典吉他。
这是执行插入的代码
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。泰勒被忽略了。
答案 0 :(得分:0)
获取数据的方法是错误的。您要做的是每次找到演员或生物或任何此类关键字时执行更新语句。这是错误的,您应该先尝试收集所有信息,然后再执行更新。
我建议采用以下方法:
创建一个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命名约定规定变量名称应以小写字母开头。虽然为了保持一致性,我遵循了你的代码中的内容,但强烈建议你重构你的变量名
我做了一个基本假设,即你的演员名称是唯一的。这就是我在这种情况下用它作为关键的原因。如果不是这样,那么您可能需要考虑将actor名称作为POJO类的一部分,并使用另一个唯一标识符作为您的密钥。