2016-03-19 5 views
0

最初に私の恐ろしい英語を残念に思っています。CursorIndexOutOfBoundsException:0が要求され、INSERT/SELECTで0のサイズが指定されています

私はアンドロイドの世界に新たなんだと今私はsqliteのDBでそんなに問題がある:

私はこのコードを実行しようとすると:

public void signInOnDB(String name, String surname, String username, String password, String secretQuestion, 
          String secretAnswer, int g, int m, int a, String regione){ 
    String data = DateTime.setData(g, m, a); 
    secretAnswer = secretAnswer.toLowerCase(); 

    database.rawQuery("INSERT INTO credenziali (userID, username, password, secretQuestion, secretAnswer) VALUES (null,'" + username + "','" + password + "','" + secretQuestion + "','" + 
      secretAnswer + "');", null); 
    Cursor cursor = database.rawQuery("SELECT userID FROM credenziali WHERE username =='"+ username + "';", null); 
    cursor.moveToFirst(); 
    int id = Integer.parseInt(cursor.getString(0)); 
    cursor.close(); 
    database.rawQuery("INSERT INTO utenti VALUES (" + id + ",'" + name + "','" + surname + "','" + regione + "','" + data + "');", null); 
} 

彼はint id = Integer.parseInt(cursor.getString(0));に到着したときにプログラムがthe android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0を生成

私は実際に例外を生成する理由がわかりません。INSERTクエリでその値を3行挿入するため、クエリはnullにできません。

SQLite Browserで3つのクエリを実行すると、返されるレコードは正しいです。

誰でも手伝ってもらえますか?

呼び出す方法:)(/)(オープンクローズの

databaseAccess = DatabaseAccess.getInstance(this); 
     databaseAccess.open(); 
     databaseAccess.signInOnDB(insert_name.getText().toString(), insert_surname.getText().toString(), 
       insert_username.getText().toString(), insert_password1.getText().toString(), insert_secretQuestion.getText().toString(), 
       insert_secretAnswer.getText().toString(), g, m, a, regionResidence); 
     databaseAccess.close();' 

定義:openHelperの

/** 
* Open the database connection. 
*/ 
public void open() { 
    this.database = openHelper.getWritableDatabase(); 
} 

/** 
* Close the database connection. 
*/ 
public void close() { 
    if (database != null) { 
     this.database.close(); 
    } 
} 

定義:

public class DatabaseOpenHelper extends SQLiteAssetHelper { 
private static final String DATABASE_NAME = "GDB.db"; 
private static final int DATABASE_VERSION = 1; 

public DatabaseOpenHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

答えて

0

OK]をクリックして、私が解決し、

私がdatabにINSERT/UPDATEクエリを使用するとase私は.execSQL(string)を使用する必要がありますrawQuery(string, ...)

関連する問題