1

JDTS ドライバーで Eclipse を使用しています。MySQL データベースに行を挿入しようとしています。接続とステートメントは問題なく生成されます (と思います)。ただし、executeUpdate メソッドを実行すると、null ポインター例外が発生します。

DB への接続を処理する DBclient クラスがあり、次にすべての関連情報を収集して挿入メソッドに提供する Uploader クラスがあります。

私の DBclient クラス:

public class DBclient {

String driver="net.sourceforge.jtds.jdbc";
String URL="xxxx";
String user="xxxx";
String pass="xxxx";
Connection connection;
Statement statement;
ResultSet rs;

public void connect() throws SQLException
{
    try {
        Class.forName(driver);
        }//try 
    catch (ClassNotFoundException e) 
        {
            e.printStackTrace();
        }//catch

    try {
        connection=DriverManager.getConnection(URL, user, pass);
        statement=connection.createStatement();

        } //try
    catch (SQLException e)
    {
        e.printStackTrace();
    }//catch
}//connect
public void insertToDB(String sqlstatement) throws SQLException
{
    int i=statement.executeUpdate(sqlstatement);
}

}//DB クライアント

そして、私の Uploader クラス

private String testinsert="insert into xxxx (Latitude, Longitude) values (1, 2)";


public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
     setContentView(R.layout.uploader);
     initialize();
     getaddress();
     update();
     try {
        client.insertToDB(testinsert);
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        Toast t=Toast.makeText(getApplicationContext(), "oops", 4);
        t.show();
    }

   }//onCreate 
public void initialize()
{
    client = new DBclient();
    geocoder = new Geocoder(this);
    Bundle coords = getIntent().getExtras();
    street = (TextView) findViewById(R.id.street);
    town = (TextView) findViewById(R.id.town);
    state = (TextView) findViewById(R.id.state);
    country = (TextView) findViewById(R.id.country);
    lat=coords.getDouble("Latitude");
    lon=coords.getDouble("Longitude");

}//initialize
public void update()
{
    street.setText(address.getAddressLine(0));
    town.setText(address.getLocality());
    state.setText(address.getAdminArea());
    country.setText(address.getCountryName());
}//update
public void getaddress()
{
    try 
    {
        addresslist = geocoder.getFromLocation(lat, lon, 1);
    } //try
    catch (IOException e) 
    {
        Toast t=Toast.makeText(getApplicationContext(), "Input Error", 2);
        t.show();
    }//catch
     address=addresslist.get(0);

}

}//アップローダ

Null ポインター例外は、DBclient クラスの insertToDB() メソッドからスローされます。

どんな助けでも大歓迎です。

4

2 に答える 2

2
public void insertToDB(String sqlstatement) throws SQLException
{
    int i=statement.executeUpdate(sqlstatement);
}

statementクラスでのみ設定されconnect()ているように見えますDBClientが、このメソッドは質問に示されている他のコードでは呼び出されていません。したがってstatement、null になり、そこからメソッドを呼び出すと、NullPointerException.

于 2012-05-25T14:15:52.630 に答える
0

ここのユーザーと同じ問題を抱えていたことが判明しました

私がしなければならなかったのは、jtds.jar を assetts フォルダーに追加し、それをビルド パスに追加してから、[ビルド パスの構成] メニューで、注文とエクスポートに移動し、jar ファイルを確認することでした。

于 2012-05-29T17:44:44.733 に答える