2013-11-23 5 views
-2

Попытка извлечь данные из SQLitedatabase но получить следующую errer:SQLite ошибка базы данных пустой указатель

android.database.CursorIndexOutOfBoundExceptions: Index -1 requested with a size of 4 

ли наставит меня эта ошибка occuring.thanks заранее

Это мой весь код, который я сделал, :

DataBaseHelper.java

public class DataBaseHelper extends SQLiteOpenHelper 
{ 
public DataBaseHelper(Context context, String name,CursorFactory factory, int version) 
{ 
      super(context, name, factory, version); 
} 
@Override 
public void onCreate(SQLiteDatabase _db) 
{ 
     _db.execSQL(LoginDataBaseAdapter.DATABASE_CREATE); 

} 
@Override 
public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion) 
{ 

Log.w("TaskDBAdapter", "Upgrading from version " +_oldVersion + " to " 
+_newVersion + ", which will destroy all old data"); 
_db.execSQL("DROP TABLE IF EXISTS " + "LOGIN2"); 
    onCreate(_db); 
} 
} 

LoginDataBaseHelper.java

public class LoginDataBaseAdapter 

{

ArrayList<String> results=new ArrayList<String>(); 

    static final String DATABASE_NAME = "login2.db"; 
    static final int DATABASE_VERSION = 1; 
    public static final int NAME_COLUMN = 1; 
    public static final String Key_id="_id"; 
static final String DATABASE_CREATE = "create table "+"LOGIN2"+ 
"(" +"Key_id"+" integer primary key autoincrement," 
+ "NAME text, FATHERNAME text, MOTHERNAME text, 
DOB integer, ADDRESS text, PHONE integer, GENDER text, 
MARITALSTATUS text, EMAIL text, USERNAME text, 
PASSWORD text); "; 
public SQLiteDatabase db; 
private final Context context; 
private DataBaseHelper dbHelper; 
    public LoginDataBaseAdapter(Context _context) 
    { 
     context = _context; 
dbHelper = new DataBaseHelper(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 
public LoginDataBaseAdapter open() throws SQLException 
    { 
     db = dbHelper.getWritableDatabase(); 
     return this; 
    } 
    public void close() 
    { 
     db.close(); 
    } 

    public SQLiteDatabase getDatabaseInstance() 
    { 
     return db; 
    } 
public void insertEntry(String name,String father, 
String mother, String dob, String address, String phone, 
String gender,String marital,String email,String username, 
String password) 
{ 
     ContentValues newValues = new ContentValues(); 
newValues.put("NAME", name); 
     newValues.put("FATHERNAME",father); 
     newValues.put("MOTHERNAME", mother); 
     newValues.put("DOB", dob); 
     newValues.put("ADDRESS", address); 
     newValues.put("PHONE", phone); 
     newValues.put("GENDER", gender); 
     newValues.put("MARITALSTATUS", marital); 
     newValues.put("EMAIL", email); 
     newValues.put("USERNAME", username); 
     newValues.put("PASSWORD", password); 
db.insert("LOGIN2", null, newValues); 
} 
    public int deleteEntry(String Address) 
    { 
String where="ADDRESS=?"; 
     int numberOFEntriesDeleted= 
db.delete("LOGIN2", where, new String[]{Address}) ; 
return numberOFEntriesDeleted; 
    } 

    public String getSinlgeEntry(String userName) 
    { 
Cursor cursor=db.query("LOGIN2", null, " USERNAME=?", 
new String[]{userName}, null, null, null); 
if(cursor.getCount()<1) // UserName Not Exist 
     { 
      cursor.close(); 
      return "NOT EXIST"; 
     } 
     cursor.moveToFirst(); 
String password= cursor.getString(cursor.getColumnIndex("PASSWORD")); 
     cursor.close(); 
     return password;     
    } 
public void updateEntry(String userName,String password, String roll) 
    { 
ContentValues updatedValues = new ContentValues(); 
updatedValues.put("USERNAME", userName); 
     updatedValues.put("PASSWORD",password); 
     updatedValues.put("ROLL", roll); 

     String where="USERNAME = ?"; 
db.update("LOGIN2",updatedValues, where, new String[]{userName});    
    } 
    public ArrayList<String> getFriends() 
    { 
ArrayList<String> result=new ArrayList<String>(); 
Cursor c=db.rawQuery("SELECT * from"+" LOGIN2"+" ", null); 

     do 
     { 
      String strr=c.getString(c.getColumnIndex("USERNAME")); 
      result.add(strr); 
     }while(c.moveToNext()); 

     return result; 
}} 

Я хочу напечатать всех пользователей в соответствии с их USERNAME поле в виде списка. Вот код, который я написал для него.

List.java

public class List extends ListActivity 
{ 


ListView list1; 
LoginDataBaseAdapter loginDataBaseAdapter; 

protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
loginDataBaseAdapter=new LoginDataBaseAdapter(this); 
    loginDataBaseAdapter=loginDataBaseAdapter.open(); 

    ArrayList<String> from=loginDataBaseAdapter.getFriends(); 
ArrayAdapter<String> adapter=new ArrayAdapter<String> 
(this,android.R.layout.simple_list_item_1,from); 
list1.setAdapter(adapter); 
    }} 

Получение CursorIndexOutOfBoundException.

+3

введите код своей базы данных – SathishKumar

+0

Проверьте свой указатель на курсор 'cursor.count' – nilkash

ответ

0

Первый вызов cursor.movetoFirst(); метод, который возвращает boolean value

if(cursor.moveToFirst()){ 
do{ 
    // cursor.getString(0);....... 
    }while(cursor.moveToNext());} 
0

это поможет вам, если вы хотите перебрать корыто все строки:

Cursor c = db.query(TABLENAME, null, null, null, null, null, null); 
while(c.moveToNext()) { 
     int id = c.getInt(c.getColumnIndex("_ID")); 
} 

или вы можете использовать другие функции управления курсором, например moveToPosition() для доступа к строке, указанной по идентификатору

Дополнительная информация: http://developer.android.com/reference/android/database/Cursor.html

0
if(cursor.getCount()>0){ 
    Cursor cursor = db.rawQuery(selectQuery, null); 


     if (cursor.moveToFirst()) { 
      do { 

       String data=cursor.getString(columnindex); 



      } while (cursor.moveToNext()); 
     } 
     } 
     cursor.close(); 
     db.close(); 

Попробуйте этот код и сначала проверьте cursor.getCount(), чтобы узнать, находится ли значение в курсоре или нет.

Смежные вопросы