簡體   English   中英

第一次在 android 中使用 SQLite 數據庫。 如何?

[英]using SQLite database for the very first time in android. how?

安裝 android SDK 和 Eclipse 后,我第一次使用 SQLite。 我是否需要在 manifest.xml 中進行一些設置或注冊?

我無法使用 SQLite 數據庫,因為它顯示如下錯誤

SQLite 數據庫數據庫; 紅色下划線中的 SQLite 並聲明為

(此行有多個標記 - SQLite 無法解析為類型 - 標記“SQLite”上的語法錯誤,修飾符無效)

並且

SQLite 無法解析為一種類型並給出建議:

創建類 sqlite 創建接口 sqlite 和其他 9 條建議。

我該做什么?

您需要有一個 databasehelper 類,這將使您易於理解。 您可以根據需要對其進行操作。

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

public class DatabaseHandler {

    public static final String KEY_ROWID = "_id";
    public static final String KEY_PRONAME = "proname";
    public static final String KEY_PROCOST = "procost";
    private static final String TAG = "DBAdapter";
    //private static final String TAG = DBAdapter.class.getSimpleName();

    private static final String DATABASE_NAME = "product";
    private static final String DATABASE_TABLE = "productdet";
    private static final int DATABASE_VERSION = 1;

    private static final String DATABASE_CREATE =
        "create table productdet (_id integer primary key autoincrement, "+ "proname varchar ,"+ "procost varchar);";

   private final Context context; 

   private DatabaseHelper DBHelper;
   private SQLiteDatabase db;

   public DatabaseHandler(Context ctx) 
   {
        this.context = ctx;
        DBHelper = new DatabaseHelper(context);
   }

   private static class DatabaseHelper extends SQLiteOpenHelper 
   {
       DatabaseHelper(Context context) 
       {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
       }

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

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

    //---opens the database---
     public DatabaseHandler open() throws SQLException 
    {
         db = DBHelper.getWritableDatabase();
         return this;
    }

    //---closes the database---    
    public void close() 
    {
        DBHelper.close();
    }

     //---insert a title into the database---
    public long insertTitle(String proname, String procost) 
    {
         ContentValues initialValues = new ContentValues();
         initialValues.put(KEY_PRONAME, proname);
         initialValues.put(KEY_PROCOST, procost);
         return db.insert(DATABASE_TABLE, null, initialValues);
    }

    //---deletes a particular title---
    public boolean deleteTitle(long rowId) 
    {
         return db.delete(DATABASE_TABLE, KEY_ROWID + 
            "=" + rowId, null) > 0;
    }

    //---retrieves all the titles---
    public Cursor getAllTitles() 
    {
         return db.query( DATABASE_TABLE, new String[] {
               KEY_ROWID, 
               KEY_PRONAME,
               KEY_PROCOST,
                }, 
                null, 
                null, 
                null, null, null);
    }


    //---retrieves a particular title---
    public Cursor getTitle(long rowId) throws SQLException 
    {
        Cursor mCursor =
            db.query(true, DATABASE_TABLE, new String[] {
                    KEY_ROWID,
                    KEY_PRONAME, 
                    KEY_PROCOST,

                    }, 
                    KEY_ROWID + "=" + rowId, 
                    null,
                    null, 
                    null, null, null 
                    );
        if (mCursor != null) {
             mCursor.moveToFirst();
        }
        return mCursor;
    }

    //---updates a title---
    public boolean updateTitle(long rowId, String proname, 
    String procost) 
    {
        ContentValues args = new ContentValues();
        args.put(KEY_PRONAME, proname);
        args.put(KEY_PROCOST, procost);
        return db.update(DATABASE_TABLE, args, 
                     KEY_ROWID + "=" + rowId, null) > 0;
    }


}

這是一個很好的例子

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

public class PersonDatabaseHelper {

private static final String TAG = PersonDatabaseHelper.class.getSimpleName();

// database configuration
// if you want the onUpgrade to run then change the database_version
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "mydatabase.db";

// table configuration
private static final String TABLE_NAME = "person_table";         // Table name
private static final String PERSON_TABLE_COLUMN_ID = "_id";     // a column named "_id" is required for cursor
private static final String PERSON_TABLE_COLUMN_NAME = "person_name";
private static final String PERSON_TABLE_COLUMN_PIN = "person_pin";

private DatabaseOpenHelper openHelper;
private SQLiteDatabase database;

// this is a wrapper class. that means, from outside world, anyone will communicate with PersonDatabaseHelper,
// but under the hood actually DatabaseOpenHelper class will perform database CRUD operations 
public PersonDatabaseHelper(Context aContext) {

    openHelper = new DatabaseOpenHelper(aContext);
    database = openHelper.getWritableDatabase();
}

public void insertData (String aPersonName, String aPersonPin) {

    // we are using ContentValues to avoid sql format errors

    ContentValues contentValues = new ContentValues();

    contentValues.put(PERSON_TABLE_COLUMN_NAME, aPersonName);
    contentValues.put(PERSON_TABLE_COLUMN_PIN, aPersonPin);

    database.insert(TABLE_NAME, null, contentValues);
}

public Cursor getAllData () {

    String buildSQL = "SELECT * FROM " + TABLE_NAME;

    Log.d(TAG, "getAllData SQL: " + buildSQL);

    return database.rawQuery(buildSQL, null);
}

// this DatabaseOpenHelper class will actually be used to perform database related operation 

private class DatabaseOpenHelper extends SQLiteOpenHelper {

    public DatabaseOpenHelper(Context aContext) {
        super(aContext, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        // Create your tables here

        String buildSQL = "CREATE TABLE " + TABLE_NAME + "( " + PERSON_TABLE_COLUMN_ID + " INTEGER PRIMARY KEY, " +
                PERSON_TABLE_COLUMN_NAME + " TEXT, " + PERSON_TABLE_COLUMN_PIN + " TEXT )";

        Log.d(TAG, "onCreate SQL: " + buildSQL);

        sqLiteDatabase.execSQL(buildSQL);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
        // Database schema upgrade code goes here

        String buildSQL = "DROP TABLE IF EXISTS " + TABLE_NAME;

        Log.d(TAG, "onUpgrade SQL: " + buildSQL);

        sqLiteDatabase.execSQL(buildSQL);       // drop previous table

        onCreate(sqLiteDatabase);               // create the table from the beginning
    }
}
}

對於在 2022 年遇到此問題的任何人,推薦的方法現在是Room library https://developer.android.com/training/data-storage/room

它在后台使用SQLiteOpenHelper

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM