无法从数据库中的数据 [英] Can't get data from database

查看:175
本文介绍了无法从数据库中的数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有三个按钮来保存,加载和删除数据从我的数据库。

I have three buttons to save, load and delete data from my database.

TotalResults.java

package com.example.simplegame;

android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class TotalResults extends Activity {

DatabaseManager db = new DatabaseManager(this);
String name;
int score;
TextView result;
TextView saved;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_total_results);

    result = (TextView) findViewById (R.id.textResult);
    saved = (TextView) findViewById (R.id.textLoad);
    Button save = (Button) findViewById (R.id.buttonSave);
    Button load = (Button) findViewById (R.id.buttonLoad);

      Intent intent = getIntent();
      name = intent.getExtras().getString("name");
      score = intent.getExtras().getInt("score");

      result.setText("Name: "+name+" , Score: "+score );

      save.setOnClickListener(new OnClickListener(){

            public void onClick(View v) {

                db.addContact(new PlayerData(name,score));
                Log.d("Insert: ", "Inserting .."); 

            } 
      });



          load.setOnClickListener(new OnClickListener(){

                public void onClick(View v) {

                    String showName = db.getContact(0).getName();
                    int showScore = db.getContact(0).getscore();
                    saved.setText("Player Name: "+showName+" Player Score: "+showScore);

                } 
          });





}

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

}

DatabaseManager.java

package com.example.simplegame;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseManager extends SQLiteOpenHelper {

// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;

// Database Name
private static final String DATABASE_NAME = "contactsManager";

// Contacts table name
private static final String TABLE_CONTACTS = "contacts";

// Contacts Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_NAME = "name";
private static final String KEY_PH_NO = "phone_number";

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

// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
            + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
            + KEY_PH_NO + " TEXT" + ")";
    db.execSQL(CREATE_CONTACTS_TABLE);
}

// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);

    // Create tables again
    onCreate(db);
}

/**
 * All CRUD(Create, Read, Update, Delete) Operations
 */

// Adding new contact
void addContact(PlayerData contact) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_NAME, contact.getName()); // Contact Name
    values.put(KEY_PH_NO, contact.getscore()); // Contact Phone

    // Inserting Row
    db.insert(TABLE_CONTACTS, null, values);
    db.close(); // Closing database connection
}

// Getting single contact
PlayerData getContact(int id) {
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
            KEY_NAME, KEY_PH_NO }, KEY_ID + "=?",
            new String[] { String.valueOf(id) }, null, null, null, null);
    if (cursor != null)
        cursor.moveToFirst();

    PlayerData contact = new PlayerData(Integer.parseInt(cursor.getString(0)),
            cursor.getString(1), cursor.getInt(2));

    cursor.close();
    // return contact
    return contact;
}

// Getting All Contacts
public List<PlayerData> getAllContacts() {
    List<PlayerData> contactList = new ArrayList<PlayerData>();
    // Select All Query
    String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            PlayerData contact = new PlayerData();
            contact.setID(Integer.parseInt(cursor.getString(0)));
            contact.setName(cursor.getString(1));
            contact.setscore(cursor.getInt(2));
            // Adding contact to list
            contactList.add(contact);
        } while (cursor.moveToNext());
    }

    // return contact list
    return contactList;
}

// Updating single contact
public int updateContact(PlayerData contact) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_NAME, contact.getName());
    values.put(KEY_PH_NO, contact.getscore());

    // updating row
    return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
            new String[] { String.valueOf(contact.getID()) });
}

// Deleting single contact
public void deleteContact(PlayerData contact) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
            new String[] { String.valueOf(contact.getID()) });
    db.close();
}


// Getting contacts Count
public int getContactsCount() {
    String countQuery = "SELECT  * FROM " + TABLE_CONTACTS;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    cursor.close();

    // return count
    return cursor.getCount();
}

}

这插入数据,但是强制停止如果我点击Load按钮和logcat的说:

It inserts data but it force stops If I click the load button and the logcat says:

08-30 18:48:41.616: E/AndroidRuntime(760): android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
08-30 18:48:41.616: E/AndroidRuntime(760):  at com.example.simplegame.DatabaseManager.getContact(DatabaseManager.java:79)

请帮忙。在此先感谢!

推荐答案

负载只会id为0得到的元件,而不是在数据库中的第一个条目。所以,如果你已经删除的第一个条目的数据库,这总是会失败。

Load will only get the element with id 0, not the first entry in the database. So if you have deleted the first entry to the database, this will always fail.

您需要做的的就是从getAllContacts的第一个用户()函数。
从您可以计算出用户的详细信息,检查用户之后。

What you need to do is get the first user from the getAllContacts() function. From that you can work out the user details, after checking for a user.

List<PlayerData> contacts = db.getAllContacts();
//check to ensure there are users
if(contacts.size()==0) throw new Exception();
PlayerData player = contacts.get(0);
String showName = player.getName();
int showScore = player.getscore();

这篇关于无法从数据库中的数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆