0

Android アプリケーション用の SQLite Db を作成しようとしています。多くのオンライン チュートリアルを試しましたが、どれもうまくいきません! 私は以下のコードを投稿しました:

public class DatabaseHandler extends SQLiteOpenHelper {

    // All Static variables
    // Database Version
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "usersManager";

    // Contacts table name
    private static final String TABLE_CONTACTS = "users";

    // Contacts Table Columns names
    private static final String KEY_ID = "id";
    private static final String KEY_NAME = "name";

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

    // Creating Tables
    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
                + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," + ")";
        db.execSQL(CREATE_CONTACTS_TABLE);
    }

    // Upgrading database
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);

        // Create tables again
        onCreate(db);
    }



import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;


public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        DatabaseHandler db = new DatabaseHandler(this);

コードにエラーが表示されませんが、場所をチェックインすると、データベースを作成する必要がありますが、そこには何もありません。

4

6 に答える 6

4

長い 1 行の連結文字列を避けることとは別に、次のようにします。

@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_CONTACTS_TABLE = 
            "CREATE TABLE " + TABLE_CONTACTS + 
            "(" + 
                KEY_ID   + " INTEGER PRIMARY KEY," + 
                KEY_NAME + " TEXT" + //--last value has no comma--
            ")";

    db.execSQL(CREATE_CONTACTS_TABLE);
}

データベースを開くために呼び出しgetWritableDataBase()ます。データベースがまだ存在しない場合は作成されます。

于 2013-02-03T17:55:35.777 に答える
3

これを試して

public class DataBase extends SQLiteOpenHelper{


    static String createBDSQL = "CREATE TABLE Notas (id integer primary key autoincrement, title TEXT)";

    public DataBase(Context context, String name, CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

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

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

MainActivity.java 内

DataBase notasdb = new DataBase(this, "DBSample.db", null, 1);
SQLiteDatabase db = notasdb.getWritableDatabase();
于 2013-02-03T23:10:02.390 に答える
1

SQLiteOpenHelper は怠惰です。必要になるまでアクションは実行されません。したがって、DB は、その中のデータにアクセスしようとした場合 (または新しいデータを挿入した場合) にのみ作成されます。

于 2013-02-03T17:49:11.477 に答える
0

実際にはデータベースを作成していません。SQLiteOpenHelperのインスタンスを作成するだけですが、データベースを作成または開くには、getWritableDatabase()またはgetReadableDatabase()メソッドを使用する必要があります。

SQLiteDatabase db = new DataBaseHandler(this).getWritableDatabase();

于 2013-02-03T18:03:51.850 に答える
0

実行するクエリを作成するときは注意が必要です。特にスペースとコンマを使用します。

この行を変更

String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," + ")";
        db.execSQL(CREATE_CONTACTS_TABLE);

聖霊降臨祭:

String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + " (" + KEY_ID + " INTEGER PRIMARY KEY, " + KEY_NAME + " TEXT)";
        db.execSQL(CREATE_CONTACTS_TABLE);
于 2013-02-03T17:50:37.573 に答える