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+"')");
从中读取的文件 演员:Zac Efron
生物:他出生在加利福尼亚州圣路易斯奥比斯波,并在阿罗约格兰德附近长大。在主演了几集“Summerland”(2004年)之后,他加入了常规演员扮演女孩疯狂的卡梅隆贝尔。 Efron还出演了几个飞行员,如卡尔拉姆克(2003)(电视)和三重播放(2004)(电视)的大世界。More_Bio:Efron于2006年6月毕业于阿罗约格兰德高中.Efron最喜欢的运动包括高尔夫,滑雪,攀岩和单板滑雪。他最近在沙滩上花了几天时间为“Summerland”增加了冲浪。
原因:自从我第一次见到他在“高中音乐剧”和“发胶”中,我迷上了这位华丽,善良,才华横溢的演员,现在他甚至更热。他是好莱坞炙手可热的王子。
事实:Zac最珍贵的财产是他亲笔签名的棒球系列,他是旧金山巨人队的忠实粉丝。演员:泰勒劳特纳
生物:Taylor Daniel Lautner出生于密歇根州大急流城,父母是Deborah和Daniel Lautner。他和妹妹梅克纳在密歇根州哈德逊维尔的一个彬彬有礼的罗马天主教家庭长大。
More_Bio:然而,除了对武术的热爱之外,泰勒很快就培养了对七岁时表演的热爱,当时他参与演艺界的武术教练鼓励他试镜一小段时间。出现在汉堡王商业广告中。
原因:这是一个笨拙的青少年偶像!在“暮光之城”系列中,我爱他为Jacob Black!他是我见过的最好看的家伙之一。当我发推文给他时,我很兴奋,他回复了一次!
事实:他在高中一年级和二年级时就踢足球。他是德国人,法国人,荷兰人和美洲原住民(特别是渥太华和波塔瓦托米)的血统。我的天啊!我们都喜欢莱昂国王队。
我正在尝试将上面的文件放入数据库中。但这是我运行时遇到的错误。
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 :(得分: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();
答案 1 :(得分:2)
你需要逃避单引号。幸运的是,Java使用PreparedStatements http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
来处理这个问题