如何在Android应用程序中使用SQLite?

时间:2013-12-01 00:56:30

标签: java android sqlite android-layout

如何确保创建表格以及在哪里可以在Android中找到我的数据库? 我运行了这段代码,但它只在我的表中存储了一条记录。 怎样才能解决这个问题?我创建了两个类

第一类:

 public class dataAccess {
     private SQLiteDatabase database;
     private sqliteHelper dbHelper;

     public dataAccess(Context context) 
     {
          dbHelper = new sqliteHelper(context);
     }

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

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

     public void createDoctorInfo(String FirstName ,String LastName) 
     {
        ContentValues values = new ContentValues();
        values.put(sqliteHelper.FirstName, FirstName);
        values.put(sqliteHelper.LastName, LastName);

        database.insert(sqliteHelper.TABLE_DoctorInfo, null, values);
     }


}

第二类:

public class sqliteHelper extends SQLiteOpenHelper
{
      public static final String TABLE_DoctorInfo = "DoctorInfo";
      public static final String DoctorId = "_id";
      public static final String FirstName = "FirstName";
      public static final String LastName = "LastName";


      private static final String DATABASE_NAME = "Medical.db";
      private static final int DATABASE_VERSION = 1;

      // Database creation sql statement
      private static final String DATABASE_CREATE = " CREATE TABLE "
      + TABLE_DoctorInfo + "("+DoctorId + " INTEGER PRIMARY KEY AUTOINCREMENT, "
 + FirstName + " TEXT NOT NULL ," +LastName +" TEXT NOT NULL);" ;

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


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

    }

    @Override
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2)
    {


}

主要活动:

public class MainActivity extends Activity {

    EditText  fname,lname;
    Button confirm,view;
    dataAccess da=new dataAccess(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        da.open();
        fname=(EditText)findViewById(R.id.fname);
        lname=(EditText)findViewById(R.id.lname);
        confirm=(Button)findViewById(R.id.confirm);
        view=(Button)findViewById(R.id.view);

         confirm.setOnClickListener(new View.OnClickListener() {


            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                saveDoctorInfo();
            }
        });
    }

    @Override
    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 saveDoctorInfo(){

      String fn=fname.getText().toString();
       String ln=lname.getText().toString();


       //save Info into DB
      da.createDoctorInfo(fn,ln);
      //close Conection 
      da.close();
      Toast.makeText(getBaseContext(), "Data Has been saved successfully", Toast.LENGTH_LONG).show();

    }

}

这是我的xml文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/fnamet"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="41dp"
        android:layout_marginTop="35dp"
        android:text="@string/first_name" />

    <EditText
        android:id="@+id/fname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/fnamet"
        android:layout_marginLeft="36dp"
        android:layout_marginTop="16dp"
        android:ems="10"
        android:inputType="textPersonName" >

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/lnamet"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/fname"
        android:layout_below="@+id/fname"
        android:layout_marginTop="30dp"
        android:text="@string/last_name" />

    <Button
        android:id="@+id/confirm"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/lnamet"
        android:layout_below="@+id/lname"
        android:layout_marginLeft="24dp"
        android:layout_marginTop="50dp"
        android:text="@string/confirm" />

    <Button
        android:id="@+id/view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/confirm"
        android:layout_below="@+id/confirm"
        android:layout_marginTop="36dp"
        android:text="@string/view" />

    <EditText
        android:id="@+id/lname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/lnamet"
        android:layout_below="@+id/lnamet"
        android:layout_marginTop="18dp"
        android:ems="10"
        android:inputType="textPersonName" />


</RelativeLayout>

2 个答案:

答案 0 :(得分:1)

  

如何确保创建我的表

使用方便的打开助手。它可以帮助您打开与完全初始化的数据库(getWritableDatabase)的连接。这包括从头开始创建数据库并在需要时升级数据库模式。您唯一需要做的就是在onCreateonUpgrade中指定需要运行的SQL命令。

  

我在哪里可以在android中找到我的数据库

您不应该关心确切的路径。它位于您的应用私有数据目录中。 DATABASE_NAME = "Medical.db"会在典型的设备上产生结果 /data/data/your.package.name/databases/Medical.db

  

它只在我的表中存储一条记录如何解决这样的问题

更改onCreate部分。但请注意,一旦创建了数据库,open helper将不会尝试重新创建它。您需要擦除应用程序数据或需要告诉打开帮助程序版本已更改。然后它将调用onUpgrade,您可以使用它来删除旧表定义/更改它们/ ...

答案 1 :(得分:0)

尝试在这个问题中引用答案,这对创建数据库和插入值有很大帮助。 LINK