2012-07-11 3 views
0
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+"')"); 

파일 : 잭 에프론데이터베이스 삽입

바이오가 : 그는 산 루이스 오비 스포, 캘리포니아에서 태어나 '의 여러 에피소드에 게스트 출연 후, 아로요 그란데에 가까운 제기되었다 Summerland "(2004)에 이어 캐머런 베일 (Cameron Bale)과 같은 정규 캐스팅에 합류했다. Efron은 Carl Laemke (2003) (TV)와 Triple Play (2004) (TV)의 Big Wide World와 같은 여러 조종사에도 출연했습니다.

More_Bio : Efron은 2006 년 6 월 Arroyo Grande High School을 졸업했습니다. Efron의 가장 좋아하는 스포츠에는 골프, 스키, 암벽 등반, 스노 보드가 있습니다. 그는 최근에 "서머 랜드 (Summerland)"라는 해변에서 보내는 시간을 보낸 후 서핑을 추가했습니다.

이유 : "고등학교 뮤지컬"과 "헤어 스프레이"에서 처음 본 이후 화려하고 멋지고 재능있는 배우에게 호감을 가졌으며 지금은 더 섹시합니다. 그는 할리우드에서 뜨거운 통치자입니다.

사실 : Zac의 가장 중요한 소장품은 사인 한 야구 컬렉션이며 샌프란시스코 자이언츠 팬입니다.

배우 : 테일러 로트 너

바이오 : 테일러 다니엘 Lautner에가 부모, 데보라와 다니엘 Lautner에 그랜드 래 피즈, 미시간 주에서 태어났다. 그와 여동생 마 케나 (Makena)는 미시간 주 허드슨 빌 (Hudsonville)에 살고있는 로마 카톨릭 가정에서 자랐다.

More_Bio : 그러나 무술에 대한 열정에 더하여 Taylor는 쇼 비즈니스에 관여 한 무술 강사가 무술에 대한 오디션을 버거 킹 (Burger King) 광고에서 작은 외모.

이유 : 이것은 늠름한 10 대 아이돌입니다! "Twilight"시리즈에서 Jacob Black으로 사랑했습니다. 그는 내가 본 최고의 남자 중 하나입니다. 내가 그 사람을 트윗했을 때 나는 너무 흥분해서 돌아왔다.

사실 : 그는 신입생과 고등학교 2 학년 때 축구를했습니다. 그는 독일인, 프랑스 인, 네덜란드 인, 아메리카 인디언 (특히 오타와와 포타와 토미) 출신이다. 오그! 그리고 우리는 밴드 Kings of Leon을 좋아합니다.

위의 파일을 데이터베이스로 사용하려고합니다. 그러나 이것은 내가 그것을 실행할 때 얻는 오류입니다.

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

당신은 MySQL의에 보내는 무엇을 인쇄 해보십시오 그것을 수동으로 교정하십시오. –

답변

3

SQL injection attacks을 방지하기 때문에 주로 PreparedStatement을 사용해야합니다. @ 존 모세는 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(); 
+0

감사합니다 !! 그 일은 지금 !! – user872009

+0

당신은 환영합니다 :). –

2

작은 따옴표를 이스케이프 처리해야합니다. 다행히도 Java는 PreparedStatements를 사용하여 이것을 처리합니다. http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

+0

안녕하세요, 나는 이것을 시도했지만 여전히 같은 오류가 있습니다. String sql = "INSERT INTO Tiffany (Actor, Bio, More_Bio, Reason, Fact) 값 ('"+ Actor + "', + Bio +" ', ""+ More_Bio + "', +"Reason + '+ 사실 + "')"; PreparedStatement 문 = con.prepareStatement (sql); statement.executeUpdate(); – user872009

+0

String sql = "INSERT INTO Tiffany (Actor, Bio, More_Bio, Reason, Fact) 값 ('?', '?', '?', '?', '?')"; PreparedStatement ps = con.prepareStatement (sql); ps.setString (1, Actor); ps.setString (2, Bio); ... –

+0

@JohnMoses 댓글에 코드를 추가하지 마십시오. 읽기가 어려우므로 "내 대답을 업데이트했습니다"라는 말을 추가하는 것이 좋습니다. –

관련 문제