0

出力画面に出力をうまく表示するコードを書いています。しかし、データベースをそれにリンクすると、Googleでよく検索するタイプのエラーが発生しますが、助けが得られません。

import java.net.URL;
import java.io.*;
import java.util.ArrayList;
import java.sql.Connection;
import java.sql.DriverManager;

import java.sql.SQLException;
import java.sql.Statement;

public class Test{
    public ArrayList lines=new ArrayList();// global list contain <item>.......</item>

    public static void main(String[] args) throws Exception {
        Test obj= new Test();

       /* String proxy="172.16.4.7";    //proxy address
        String port= "1117";    //proxy port
        System.setProperty("http.proxyHost" , proxy);   //setting proxy
        System.setProperty("http.proxyPort", port); //setting proxy port
       */ 
        URL url = new URL("http://feeds.feedburner.com/geo/GiKR");  //geo url
        BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
        String line;
        line=in.readLine(); //skiping first line of xml version
        line= in.readLine();

        if (line.contains("<item>")) {
           while(line.contains("<item>")) {
              line = obj.extractItem(line); //extraction <item>a nd </item> from origional news feed

           }

        }
    }
String extractItem(String line){
    int start=0, end=0,length=0;
    start= line.indexOf("<item>");
    end= line.indexOf("</item>");
    length= line.length();
    try{
    String host = "jdbc:derby://localhost:1527/NewsFinal";
    String uName="ashfaq";
    String pass="pakistan";
    Connection con = DriverManager.getConnection( host, uName, pass );
    Statement stmt= con.createStatement();

    //lines.add(line.substring(start+6, end));
    String item=line.substring(start+6, end+7);
    //System.out.println(item);
    //String query="INSERT INTO ITEMS2(ITEM) VALUES(" + "'"+item+"'"+")";
    String query="insert into ITEMS(ITEMDATA) values("+"'" + item + "'"+")";
     stmt.executeUpdate(query);
    }
    catch(SQLException err)
    {System.out.println(err.getMessage());}

   //System.out.println(line.substring(start+6, end+7)); //strat+6 to remove item tag, start+13 removes item and title tag
    return line.substring(0,start) + line.substring(end+6,length);
    }

}

それによって生成された出力は次のとおりです。

run:
Syntax error: Encountered "1" at line 1, column 318.
Syntax error: Encountered "1" at line 1, column 330.
Syntax error: Encountered "1" at line 1, column 342.
Syntax error: Encountered "1" at line 1, column 318.
Syntax error: Encountered "1" at line 1, column 330.
Syntax error: Encountered "1" at line 1, column 326.
Syntax error: Encountered "1" at line 1, column 351.
Syntax error: Encountered "1" at line 1, column 319.
Syntax error: Encountered "1" at line 1, column 299.
Syntax error: Encountered "1" at line 1, column 328.
Syntax error: Encountered "1" at line 1, column 307.
Syntax error: Encountered "1" at line 1, column 331.
Syntax error: Encountered "1" at line 1, column 334.
Syntax error: Encountered "1" at line 1, column 319.
Syntax error: Encountered "1" at line 1, column 334.
Syntax error: Encountered "1" at line 1, column 307.
Syntax error: Encountered "1" at line 1, column 325.
Syntax error: Encountered "1" at line 1, column 301.
Syntax error: Encountered "1" at line 1, column 312.
Syntax error: Encountered "1" at line 1, column 306.
Syntax error: Encountered "1" at line 1, column 327.
Syntax error: Encountered "1" at line 1, column 342.
Syntax error: Encountered "1" at line 1, column 333.
Syntax error: Encountered "1" at line 1, column 338.
Syntax error: Encountered "1" at line 1, column 329.
BUILD SUCCESSFUL (total time: 3 seconds)

関数extractItem(String line)で、コメントを外すと

System.out.println(item);

出力はうまく表示されますが、作成したデータベースに挿入できません。

データベースは順調に進んでおり、GUIからデータを挿入すると機能し、実行コマンドからも機能しましたが、このエラーが発生する理由がわかりません。

4

1 に答える 1

0

任意の文字列を引用符で囲むだけでは、別の引用符が含まれていてSQL インジェクション攻撃に対して無防備なままになっている場合、それを VALUE として有効にするのに十分ではありません。

a を使用してPreparedStatement、その値を設定します。

また、新しいConnectionand Statementfor every アイテムを作成し、それらのいずれも閉じていません。

于 2013-11-16T09:32:26.887 に答える