Android SQLite向数据库添加详细信息

时间:2015-02-04 16:49:53

标签: android sqlite

您好我是Android开发的新手,我正在制作一个简单的应用程序,允许用户输入他们的详细信息,一旦点击“保存”按钮,他们的详细信息将保存到我创建的数据库中。我创建了'MyDBHandler'类,使用getter和setter方法的'Details'类以及我最麻烦的'MainActivity'类。我的主要问题是我不确定如何将用户输入的数据插入到我创建的表中。我的MainActicity课程是我迷失的地方。任何人都可以告诉/告诉我我做错了什么。我的代码在下面,谢谢。

MyDBHandler类

package com.example.brian.organdonorapp;

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 {

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "detailsDB.db";
public static final String TABLE_DETAILS = "details";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_FIRSTNAME = "firstname";
public static final String COLUMN_SURNAME = "surname";
public static final String COLUMN_PHONE = "phone";
public static final String COLUMN_EMAIL = "email";
public static final String COLUMN_ADDRESS1 = "address1";
public static final String COLUMN_ADDRESS2 = "address2";

// Pass database information along to superclass
public MyDBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
    super(context, DATABASE_NAME, factory, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    String query = "CREATE TABLE " + TABLE_DETAILS + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
            + COLUMN_FIRSTNAME + " TEXT "
            + COLUMN_SURNAME + " TEXT "
            + COLUMN_PHONE + " TEXT "
            + COLUMN_EMAIL + " EMAIL "
            + COLUMN_ADDRESS1 + " TEXT"
            + COLUMN_ADDRESS2 + " TEXT "
            + ");";
    db.execSQL(query);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_DETAILS);
    onCreate(db);
}

//Add a new row to the database
public void addDetails(Details details){
    ContentValues values = new ContentValues();
    values.put(COLUMN_FIRSTNAME, details.getFirstname());
    values.put(COLUMN_SURNAME, details.getSurname());
    values.put(COLUMN_PHONE, details.getPhone());
    values.put(COLUMN_EMAIL, details.getEmail());
    values.put(COLUMN_ADDRESS1, details.getAddress1());
    values.put(COLUMN_ADDRESS2, details.getAddress2());
    SQLiteDatabase db = getWritableDatabase();
    db.insert(TABLE_DETAILS, null, values);
    db.close();
}
}

详细信息类

package com.example.brian.organdonorapp;


public class Details {
int _id;
String firstname;
String surname;
int phone;
String email;
String address1;
String address2;

// Empty constructor
public Details(String s){
}

public void set_id(int _id) {
    this._id = _id;
}

public void setFirstname(String firstname) {
    this.firstname = firstname;
}

public void setSurname(String surname) {
    this.surname = surname;
}

public void setPhone(int phone) {
    this.phone = phone;
}

public void setEmail(String email) {
    this.email = email;
}

public void setAddress1(String address1) {
    this.address1 = address1;
}

public void setAddress2(String address2) {
    this.address2 = address2;
}







public int get_id() {
    return _id;
}

public String getFirstname() {
    return firstname;
}

public String getSurname() {
    return surname;
}

public int getPhone() {
    return phone;
}

public String getEmail() {
    return email;
}

public String getAddress1() {
    return address1;
}

public String getAddress2() {
    return address2;
}
}

MainActivity类

package com.example.brian.organdonorapp;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;


public class MainActivity extends ActionBarActivity {

TextView firstName;
EditText editTextName;

TextView textView5;
EditText editTextSurname;

TextView textView4;
EditText editTextMobile;

TextView textView2;
EditText editTextEmail;

TextView textView3;
EditText editTextAddress1;

TextView textView6;
EditText editTextAddress2;

MyDBHandler dbHandler;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    firstName = (TextView) findViewById(R.id.firstName);
    editTextName = (EditText) findViewById(R.id.editTextName);
    textView5 = (TextView) findViewById(R.id.textView5);
    editTextSurname = (EditText) findViewById(R.id.editTextSurname);
    textView4 = (TextView) findViewById(R.id.textView4);
    editTextMobile = (EditText) findViewById(R.id.editTextMobile);
    textView2 = (TextView) findViewById(R.id.textView2);
    editTextEmail = (EditText) findViewById(R.id.editTextEmail);
    textView3 = (TextView) findViewById(R.id.textView3);
    editTextAddress1 = (EditText) findViewById(R.id.editTextAddress1);
    textView6 = (TextView) findViewById(R.id.textView6);
    editTextAddress2 = (EditText) findViewById(R.id.editTextAddress2);

    dbHandler = new MyDBHandler(this, null, null, 1);
    //printDatabase();
}


//Add details to the database
public void addButtonClicked(View view){
    Details details = new Details(editTextName.getText().toString());
    Details details = new Details(editTextSurname.getText().toString());
    Details details = new Details(editTextMobile.getText().toString());
    Details details = new Details(editTextEmail.getText().toString());
    Details details = new Details(editTextAddress1.getText().toString());
    Details details = new Details(editTextAddress2.getText().toString());
    dbHandler.addDetails(details);
    //printDatabase();
}


}

2 个答案:

答案 0 :(得分:0)

为什么要创建Details的多个对象?您只需要创建一个实例并将所有值设置为该对象,然后将其添加到数据库中。

从不使用Details构造函数中传递的字符串。因此,如果您不打算在以后使用它,可以删除该参数。

这样做

public void addButtonClicked(View view){
    Details details = new Details("");
    details.setFirstname(editTextName.getText().toString());
    details.setSurname(editTextSurname.getText().toString());
    details.setPhone(editTextMobile.getText().toString());
    details.setEmail(editTextEmail.getText().toString());
    details.setAddress1(editTextAddress1.getText().toString());
    details.setAddress2(editTextAddress2.getText().toString());
    dbHandler.addDetails(details));
    //printDatabase();
}

答案 1 :(得分:0)

首先,我认为你应该这样做:

public void addButtonClicked(View view){
    Details details = new Details();
    details.setName(editTextName.getText().toString());
    details.setSurname(editTextSurname.getText().toString());
    details.setMobile(editTextMobile.getText().toString());
    details.setEmail(editTextEmail.getText().toString());
    details.setAddress1(editTextAddress1.getText().toString());
    details.setAddress2(editTextAddress2.getText().toString());
    dbHandler.addDetails(details);
}

另外,您可以看到本教程,它会对您有所帮助。 http://www.vogella.com/tutorials/AndroidSQLite/article.html