2013-12-13 3 views
1

Ive пытался вернуть значения из SQL-запроса, но всегда имеет значение 0, а не null. Я пытался найти ответы как на Google, так и на SO, но я ничего не нашел.Курсор всегда возвращает 0 из SQL-запросов

Кроме того, база данных работает, так как она может заполнять ListView данными из самой базы данных.

Heres мой код:

BeaverDetailsDB

private SQLiteDatabase db; 
private MySQLiteHelper dbHelper; 
private String[] allColumns = { MySQLiteHelper.COLUMN_ID, 
     MySQLiteHelper.COLUMN_NAME, MySQLiteHelper.COLUMN_NIGHTS_AWAY }; 
private String[] NightsAway = { MySQLiteHelper.COLUMN_NIGHTS_AWAY }; 

public BeaverDetailsDB(Context context) { 
    dbHelper = new MySQLiteHelper(context); 
} 

public void open() throws SQLException { 
    db = dbHelper.getWritableDatabase(); 
} 

public void close() { 
    dbHelper.close(); 
} 




public DetailsSQLClass createName(String Name) { 
    ContentValues values = new ContentValues(); 
    values.put(MySQLiteHelper.COLUMN_NAME, Name); 
    long insertId = db.insert(MySQLiteHelper.TABLE_NAME, null, values); 
    Cursor cursor = db.query(MySQLiteHelper.TABLE_NAME, allColumns, 
      MySQLiteHelper.COLUMN_ID + " = " + insertId, null, null, null, 
      null); 
    cursor.moveToFirst(); 
    DetailsSQLClass newName = cursorToName(cursor); 
    cursor.close(); 
    return newName; 
} 

public void createNightsAway(Integer TotalNightsAway) { 
    ContentValues values = new ContentValues(); 
    values.put(MySQLiteHelper.COLUMN_NIGHTS_AWAY, TotalNightsAway); 
    db.insert(MySQLiteHelper.TABLE_NAME, null, values); 
    return; 
} 





public List<DetailsSQLClass> getAllNames() { 
    List<DetailsSQLClass> Names = new ArrayList<DetailsSQLClass>(); 
    Cursor cursor = db.query(MySQLiteHelper.TABLE_NAME, allColumns, null, 
      null, null, null, null); 
    cursor.moveToFirst(); 
    while (!cursor.isAfterLast()) { 
     DetailsSQLClass Name = cursorToName(cursor); 
     Names.add(Name); 
     cursor.moveToNext(); 
    } 
    // make sure to close the cursor 
    cursor.close(); 
    return Names; 
} 



public Integer getNightsAway(String Name) { 
    dbHelper.getReadableDatabase(); 
    int value = 9999; 
    Cursor c = db.query(MySQLiteHelper.TABLE_NAME, NightsAway, 
    "Name" + " = ?" ,new String[] {Name} , null, null, null, null); 
    int x = c.getColumnIndex(MySQLiteHelper.COLUMN_NIGHTS_AWAY); 
    if (c.moveToFirst()) { 
     value = c.getInt(x); 
     int b = c.getCount(); 
    } else if (c.isNull(0)) { 
     value = 55675; // Check if Column 0 is empty/null 
    } 
    c.close(); 
    dbHelper.close(); 
    return value; 
} 

public String DbQuery(String Name) { 
    db = dbHelper.getReadableDatabase(); 
    Cursor c = db.query(MySQLiteHelper.TABLE_NAME, null, "Name" + "='" 
      + Name + "'", null, null, null, null); 
    String result; 
    c.moveToFirst(); 
    result = c.getString(0); 
    c.close(); 
    dbHelper.close(); 
    return result; 
} 

private DetailsSQLClass cursorToName(Cursor cursor) { 
    DetailsSQLClass Name = new DetailsSQLClass(); 
    Name.setId(cursor.getLong(0)); 
    Name.setName(cursor.getString(1)); 
    return Name; 
} 

}

MySQLiteHelper

public class MySQLiteHelper extends SQLiteOpenHelper { 
    public static final String TABLE_NAME = "sqlBeaverDetails"; 
    public static final String COLUMN_ID = "_id"; 
    public static final String COLUMN_NAME = "Name"; 
    public static final String COLUMN_NIGHTS_AWAY = "NightsAway"; 

    public static final String DATABASE_NAME = "sqlBeaverDetails.db"; 
    public static final int DATABASE_VERSION = 1; 

    public static final String DATABASE_CREATE = ("CREATE TABLE " + TABLE_NAME + 
      " (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      COLUMN_NAME + " STRING, " + 
      COLUMN_NIGHTS_AWAY + " INTEGER);"); 

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

    public void onCreate(SQLiteDatabase database) { 
     database.execSQL(DATABASE_CREATE); 
    } 

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     Log.w(MySQLiteHelper.class.getName(), 
       "Upgrading database from version " + oldVersion + " to " 
         + newVersion + ", which will destroy all old data"); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
     onCreate(db); 
    } 

} 

объявления dBeaverDetailsActivity

public class AddBeaverDetailsActivity extends Activity { 

EditText etName; 
EditText etNightsAway; 

private BeaverDetailsDB datasource; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.add_beaver_details); 


    datasource = new BeaverDetailsDB(this); datasource.open(); 
    etName = (EditText) findViewById(R.id.etBeaverName); 
    etNightsAway = (EditText) findViewById(R.id.etNightsAway);} 

public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

public void bSQLEnter(View v) { 
    String Name; 
    String NightsAway; 

    Name = etName.getText().toString(); 
    NightsAway = etNightsAway.getText().toString(); 
    int TotalNightsAway = Integer.parseInt(NightsAway); 

    datasource.createName(Name); 
    datasource.createNightsAway(TotalNightsAway); 

    Intent i = new Intent(getApplicationContext(), ViewBeaverDetails.class); 
    startActivity(i); 

} 

public void showDatePickerDialog(View v) { 
    Toast.makeText(getApplicationContext(), "You clicked me!", 
      Toast.LENGTH_SHORT).show(); 

} 

}

DetailsSQLClass

public class DetailsSQLClass { 
private long id; 
private String Name; 
private String NightsAway; 

public long getId(){ 
    return id; 
    } 
public void setId(long id){ 
    this.id = id; 
} 

public String getName(){ 
    return Name; 
    } 
public void setName(String Name){ 
    this.Name = Name; 
} 

public String getNightsAway(){ 
    return NightsAway; 
    } 
public void setNightsAway(String NightsAway){ 
    this.NightsAway = NightsAway; 
} 

// Used for the ArrayAdapter 
@Override 
public String toString(){ 
    return Name; 
} 

}

BeaverDetailsPage

public class BeaverDetailsPage extends Activity { 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.view_beaver_details); 

    String title = ""; 
    Bundle extras = getIntent().getExtras(); 
    if (extras != null) { 
     title = extras.getString("BeaverName");} 
    setTitle(title); 

    BeaverDetailsDB db = new BeaverDetailsDB(getApplicationContext()); 

    TextView tv = (TextView) findViewById(R.id.tvBDetailsNightsAway); 

    db.open(); 
    Integer value = db.getNightsAway(title); 
    tv.setText(String.valueOf(value)); 
    db.close(); 

} 

Спасибо!

+0

Вы всегда получаете сообщение «Обновление базы данных из версии ...»? – petey

+0

, в какой функции вы получаете 0? –

+0

@petey Не знаю, что я знаю, будет ли это показано в LogCat? –

ответ

0

Try с этим

if (c.moveToFirst()) { 
      do { 
       value = c.getInt(0); 
      } while (c.moveToNext()); 
     } 

Для других, которые имеют схожие проблемы, даже после того, как с помощью кода выше, загрузите SQLite Database Browser 2.0 b1, а затем переместить вашу базу данных приложений с помощью DDMS и увидеть, что у Вас есть правильные значения в базе данных.

+0

Я все еще получаю значение 0, к сожалению –

+0

Также, если это все еще возвращает 0, пожалуйста, проверьте, что 'c.getCount()' возвращает, если он тоже возвращает 0, то что-то не так с запросом. –

+0

getCount возвращает 1 –

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