1

安装 android SDK 和 Eclipse 后,我第一次使用 SQLite。我是否需要在 manifest.xml 中进行一些设置或注册?

我无法使用 SQLite 数据库,因为它显示如下错误

SQLite 数据库数据库;红色下划线中的 SQLite 并声明为

(此行有多个标记 - SQLite 无法解析为类型 - 标记“SQLite”上的语法错误,修饰符无效)

并且

SQLite 无法解析为一种类型并给出建议:

创建类 sqlite 创建接口 sqlite 和其他 9 条建议。

我该做什么?

4

2 回答 2

1

您需要有一个 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;
    }


}
于 2013-09-24T12:05:34.583 回答
1

这是一个很好的例子

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
    }
}
}
于 2013-09-24T12:35:07.197 回答