Android不显示数据库中的数据

时间:2015-09-29 19:14:07

标签: java android sqlite

我创建了一个非常简单的应用程序,允许用户将紧急信息保存到数据库中,然后将其显示在不同的屏幕上。用户可以保存的信息是名字,血型,联系电话,电话号码和关系类型。

但问题是应用程序没有显示所有信息。它只显示名字。我相信光标没有移动到下一行,所以我认为问题出在下面的代码中:

public String databaseToString(){
    String dbString = "";
    SQLiteDatabase db = getWritableDatabase();
    //Every Column and row
    String query = "SELECT * FROM " + TABLE_PRODUCTS + " WHERE 1";

    //Cursor points to a location in your results
    //First row point here, second row point here

    Cursor c = db.rawQuery(query, null);
    c.moveToFirst();

    while(!c.isAfterLast()){
        //Extracts first name and adds to string
        if(c.getString(c.getColumnIndex("firstName"))!=null){
            dbString += c.getString(c.getColumnIndex("firstName"));
            c.moveToNext();
            /*
             * Displaying all other columns 
             */
        }
    }
    db.close();
    return dbString;
}

以下是完整的代码:

数据库类:

package com.example.androidsimpledbapp1;

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

public class MyDBHandler extends SQLiteOpenHelper {
    /*
     * Class for Working with DB 
     */

    //Update each time DB structure changes e.g. adding new property
    private static final int DATABASE_VERSION = 1;
    //DB Name
    private static final String DATABASE_NAME = "details.db";
    //Table name
    public static final String  TABLE_PRODUCTS = "products";
    //DB Columns 
    public static final String  COLUMN_ID = "_Id";
    public static final String  COLUMN_PERSONNAME   = "firstName";
    public static final String  COLUMN_PERSONBLOOD  = "bloodType";
    public static final String  COLUMN_PERSONCONTACT    = "contactName";
    public static final String  COLUMN_PERSONNUMBER = "phoneNumber";
    public static final String  COLUMN_PERSONRELATION = "relationship";

    //Constructor
    /*
     * Passing information to super class in SQL
     * Context is background information 
     * name of db 
     * Database version
     */
    public MyDBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version){
        super(context, DATABASE_NAME, factory, DATABASE_VERSION);
    }

    /*
     * What to do first time when you create DB
     * Creates the table the very first time
     * (non-Javadoc)
     * @see android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite.SQLiteDatabase)
     * Remember to use Commas as shown below
     */
    @Override
    public void onCreate(SQLiteDatabase db){
        String query = "CREATE TABLE "+ TABLE_PRODUCTS + "(" +
                COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "+
                COLUMN_PERSONNAME + " TEXT, "+
                COLUMN_PERSONBLOOD + " TEXT, "+
                COLUMN_PERSONCONTACT + " TEXT, "+
                COLUMN_PERSONNUMBER + " TEXT, " +
                COLUMN_PERSONRELATION + " TEXT " +
                ");";
        //Execute the query
        db.execSQL(query);
    }

    /*
     * If ever upgrading DB call this method
     * (non-Javadoc)
     * @see android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite.SQLiteDatabase, int, int)
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
        //Delete the current table
        db.execSQL("DROP TABLE IF EXISTS" + TABLE_PRODUCTS);
        //create new table 
        onCreate(db);
    }

    //Add new row to the database
    public void addProduct(Details details){
        //Built in class - set values for different columns 
        //Makes inserting rows quick and easy
        ContentValues values = new ContentValues();
        values.put(COLUMN_PERSONNAME, details.get_firstName());
        values.put(COLUMN_PERSONBLOOD, details.get_bloodType());
        values.put(COLUMN_PERSONCONTACT, details.get_contactName());
        values.put(COLUMN_PERSONNUMBER, details.get_phoneNumber());
        values.put(COLUMN_PERSONRELATION, details.get_relationship());
        SQLiteDatabase db = getWritableDatabase();
        db.insert(TABLE_PRODUCTS, null, values);
        db.close();
    }

    /*Table was deleted*/
    public void deleteProducts(){
        SQLiteDatabase db = getWritableDatabase();      
        db.delete(TABLE_PRODUCTS, null, null);
    }

    //Take DB and Convert to String 
    public String databaseToString(){
        String dbString = "";
        SQLiteDatabase db = getWritableDatabase();
        //Every Column and row
        String query = "SELECT * FROM " + TABLE_PRODUCTS + " WHERE 1";

        //Cursor points to a location in your results
        //First row point here, second row point here

        Cursor c = db.rawQuery(query, null);
        c.moveToFirst();

        while(!c.isAfterLast()){
            //Extracts first name and adds to string
            if(c.getString(c.getColumnIndex("firstName"))!=null) {
                dbString += c.getString(c.getColumnIndex("firstName"));
                c.moveToNext();
                /*
                 * Displaying all other columns 
                 */
            }
        }
        db.close();
        return dbString;
    }
}

详细信息类:

package com.example.androidsimpledbapp1;

public class Details {

    //primary key
    private int _id;
    //Properties 
    private String _firstName;
    private String _bloodType;
    private String _contactName;
    private String _phoneNumber;
    private String _relationship;

    //Dont Have to Enter Everything each time
    public Details(){
    }

    public Details(String firstName){
        this.set_firstName(firstName);
    }

    //Passing in details 
    //Setting values from the user 
    public Details(String firstName, String bloodType,
            String contactName, String phoneNumber,
            String relationship){
        this.set_firstName(firstName);
        this.set_bloodType(bloodType);
        this.set_contactName(contactName);
        this.set_phoneNumber(phoneNumber);
        this.set_relationship(relationship);
    }

    //Retrieve the data 
    public int get_id() {
        return _id;
    }

    //Setter allows to give property
    public void set_id(int _id) {
        this._id = _id;
    }

    public String get_firstName() {
        return _firstName;
    }

    public void set_firstName(String _firstName) {
        this._firstName = _firstName;
    }

    public String get_bloodType() {
        return _bloodType;
    }

    public void set_bloodType(String _bloodType) {
        this._bloodType = _bloodType;
    }

    public String get_contactName() {
        return _contactName;
    }

    public void set_contactName(String _contactName) {
        this._contactName = _contactName;
    }

    public String get_phoneNumber() {
        return _phoneNumber;
    }

    public void set_phoneNumber(String _phoneNumber) {
        this._phoneNumber = _phoneNumber;
    }

    public String get_relationship() {
        return _relationship;
    }

    public void set_relationship(String _relationship) {
        this._relationship = _relationship;
    }
}

编辑屏幕 - 用户将数据添加到数据库中的屏幕,在按下保存时,所有数据库信息应显示在主要活动上

package com.example.androidsimpledbapp1;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class EditScreen extends Activity {
    EditText firstNameInput;
    EditText bloodTypeInput;
    EditText contacNameInput;
    EditText phoneNumberInput;
    EditText relationshipInput;
    MyDBHandler dbHandler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_edit_screen);
        //Setting EditTexts 
        firstNameInput = (EditText) findViewById(R.id.inputname);
        bloodTypeInput = (EditText) findViewById(R.id.inputblood);
        contacNameInput = (EditText) findViewById(R.id.inputcontact);
        phoneNumberInput = (EditText) findViewById(R.id.inputnum);
        relationshipInput = (EditText) findViewById(R.id.inputraltion);
        //Setting DbHandler object 
        dbHandler = new MyDBHandler(this, null, null, 1);
    }

    public void saveMe(View v){
        /*
         * Making a new object 
         * Object takes 5 parameters 
         */
        Details detail = new Details(firstNameInput.getText().toString(),
                bloodTypeInput.getText().toString(),
                contacNameInput.getText().toString(),
                phoneNumberInput.getText().toString(),
                relationshipInput.getText().toString());
        dbHandler.addProduct(detail);

        //Sending Text To Main Activity
        String dbString = dbHandler.databaseToString();
        Intent myIntent = new Intent(v.getContext(),MainActivity.class);
        myIntent.putExtra("mytext",dbString);
        startActivity(myIntent);
        //End of Sending to Main Activity
        //Setting the text in Edit Text
        firstNameInput.setText(dbString);
    }

    public void clearBtnPressed(View v){
        dbHandler.deleteProducts();
    }
}

MainActivity - 此屏幕显示数据

package com.example.androidsimpledbapp1;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {

    TextView mTextView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Grabs the TextView 
        mTextView = (TextView)findViewById(R.id.dbname);
        mTextView.setText(getIntent().getStringExtra("mytext"));
    }

    //Changing Activity
    public void editBtnPressed(View v){
        Intent intent = new Intent(MainActivity.this, EditScreen.class);
        startActivity(intent);
    }
}

0 个答案:

没有答案