1

私はJavaプログラミングの初心者です。URLから応答を読み取ってデータベースに挿入しようとしています。以下に掲載されているプログラムを実行したところ、次のエラーが返されました。

Exception in thread "main" java.lang.NullPointerException
    at javaapp.JavaApplication1.parseResponseString(JavaApplication1.java:41)
    at javaapp.JavaApplication1.main(JavaApplication1.java:71)

私はこの問題を研究を通じて自力で解決しようとしてきましたが、解決できませんでした。誰かが私を助けることができるかどうか疑問に思っていました。私のプログラムに関するその他の情報が必要な場合は、お問い合わせください。前もって感謝します!

そして、ここに私が書いたコードがあります

enter code here パッケージ javaapp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

public class JavaApplication1 
{

Map<String,String> responseMap=new HashMap<String, String>();
    static String input;

    public void getResponseFromUrl() throws IOException
    {
        URL url = new URL("http://localhost:8084/home/Home");
        HttpURLConnection con = (HttpURLConnection) url.openConnection();

        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())) ;
       String inputLine;
        while ((inputLine = in.readLine()) != null) 
        {
           if (inputLine.contains("<h1>")) 
            {
                String input = inputLine;
                input = input.substring(input.indexOf("<h1>") + 4, input.indexOf("</h1>"));   
            }
        }

    }
    public void parseResponseString(String input)
    {
        String params[]=input.split(",");

        for(String param:params)
        {
            String key= param.substring(0,param.indexOf('='));
            String value= param.substring(param.indexOf('=')+1,param.length());
            responseMap.put(key, value);
            System.out.println(param);
        }
    }
    public void insertToDatabase() throws SQLException, ClassNotFoundException
    {
        Connection conn=null;
        Class.forName("oracle.jdbc.driver.OracleDriver");

        conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","jai","jaikiran");
        String insertQuery = " INSERT INTO value_1 (username1,username2,username3,username4,username5) "+
                             " values (?,?,?,?,?)";
        PreparedStatement pstmt = conn.prepareStatement(insertQuery);
        pstmt.setString(1,responseMap.get("username1"));
        pstmt.setString(2,responseMap.get("username2"));
        pstmt.setString(3,responseMap.get("username3"));
        pstmt.setString(4,responseMap.get("username4"));
        pstmt.setString(5,responseMap.get("username5"));
        pstmt.executeUpdate();
    }
    public static void main(String[] args) throws MalformedURLException, IOException, SQLException, ClassNotFoundException 
    {
        JavaApplication1 application =new JavaApplication1();
        application.getResponseFromUrl();
        application.parseResponseString(input);//shows exception here
        try {
            application.insertToDatabase();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }   
}





Thanks in advance,please helpme..
4

4 に答える 4

0

はデフォルトであり、メソッドに渡していstatic String input;ます。nullparseResponseString()

input変数に値を割り当てる必要があります。

getResponseFromUrl()新しいinput変数を作成したメソッドで割り当てを行うことを望んでいたと思います。に値を割り当てるには、キーワードstatic String input;で参照する必要があります。this

if (inputLine.contains("<h1>")) 
{
    String input = inputLine;
    this.input = input.substring(input.indexOf("<h1>") + 4, input.indexOf("</h1>"));   
}
于 2013-09-12T09:46:50.433 に答える
0

メソッドでgetResponseFromUrlは、文字列入力は新しい変数です。String input = inputLine;to String input2 = inputLine;と を 変更する必要があります input = input2.substring(input.indexOf("<h1>") + 4, input.indexOf("</h1>"));

あなたのコードは次のようになります:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

public class JavaApplication1 
{

Map<String,String> responseMap=new HashMap<String, String>();
    static String input;

    public void getResponseFromUrl() throws IOException
    {
        URL url = new URL("http://localhost:8084/home/Home");
        HttpURLConnection con = (HttpURLConnection) url.openConnection();

        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())) ;
       String inputLine;
        while ((inputLine = in.readLine()) != null) 
        {
           if (inputLine.contains("<h1>")) 
            {
                String input2 = inputLine;
                input = input2.substring(input.indexOf("<h1>") + 4, input.indexOf("</h1>"));   
            }
        }

    }
    public void parseResponseString(String input)
    {
        String params[]=input.split(",");

        for(String param:params)
        {
            String key= param.substring(0,param.indexOf('='));
            String value= param.substring(param.indexOf('=')+1,param.length());
            responseMap.put(key, value);
            System.out.println(param);
        }
    }
    public void insertToDatabase() throws SQLException, ClassNotFoundException
    {
        Connection conn=null;
        Class.forName("oracle.jdbc.driver.OracleDriver");

        conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","jai","jaikiran");
        String insertQuery = " INSERT INTO value_1 (username1,username2,username3,username4,username5) "+
                             " values (?,?,?,?,?)";
        PreparedStatement pstmt = conn.prepareStatement(insertQuery);
        pstmt.setString(1,responseMap.get("username1"));
        pstmt.setString(2,responseMap.get("username2"));
        pstmt.setString(3,responseMap.get("username3"));
        pstmt.setString(4,responseMap.get("username4"));
        pstmt.setString(5,responseMap.get("username5"));
        pstmt.executeUpdate();
    }
    public static void main(String[] args) throws MalformedURLException, IOException, SQLException, ClassNotFoundException 
    {
        JavaApplication1 application =new JavaApplication1();
        application.getResponseFromUrl();
        application.parseResponseString(input);//shows exception here
        try {
            application.insertToDatabase();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }   
}
于 2013-09-12T09:52:21.920 に答える