0
public class DBCreation extends SQLiteOpenHelper
{

Context context;
public DBCreation(Context context)
{
    super(context, "LBRDatabase", null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) throws SQLException 
{
        db.execSQL("create table Reminders(id integer primary key autoincrement,description text,address text not null,latitude double not null,longitude double not null,radius text,reminderdate text,remindertime text);");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
    try
    {
        db.execSQL("drop table if exists Reminders ");
        onCreate(db);
    }
    catch (Exception e) 
    {
        Toast.makeText(context, ""+e, Toast.LENGTH_LONG).show();
    }
}

}

このコードの問題は何ですか? 次のエラーが表示されますか?

06-18 08:54:30.843: E/Database(6452): Error inserting Reminders
06-18 08:54:30.843: E/Database(6452): android.database.sqlite.SQLiteException: no such table: Reminders: , while compiling: INSERT INTO Reminders(radius, longitude, latitude, reminderdate, address, description, remindertime) VALUES(?, ?, ?, ?, ?, ?, ?);

テーブルが作成されています。挿入の順序も適切ではありません。最初に半径を取得してから経度を取得し、次に経度を取得しますが、これはテーブルを作成した順序ではありません。

public class DBOperations
{
Context context;
SQLiteDatabase db;
DBCreation createdb;

public DBOperations(Context context)
{
    this.context = context;
    createdb = new DBCreation(context);
}

public DBCreation OpenDB() throws SQLException
{
    db = createdb.getWritableDatabase();
    return createdb;
}

public void CloseDB()
{
    db.close();
}

public long addReminder(String description,String address,double latitude,double longitude,String radius,String date,String time)
{
    ContentValues cv = new ContentValues();
    cv.put("description", description);
    cv.put("address", address);
    cv.put("latitude", latitude);
    cv.put("longitude", longitude);
    cv.put("radius", radius);
    cv.put("reminderdate", date);
    cv.put("remindertime", time);

    return db.insert("Reminders", null, cv);
}

public long deleteReminder(int id)
{
    return db.delete("Reminders", "_ID="+id, null);
}

public long updateReminder(int id,String desc,String addr,double lat,double lon,int radius,String date,String time)
{
    ContentValues cv = new ContentValues();
    cv.put("description", desc);
    cv.put("address", addr);
    cv.put("latitude", lat);
    cv.put("longitude", lon);
    cv.put("radius", radius);
    cv.put("reminderdate", date);
    cv.put("remindertime", time);
    return db.update("Reminders", cv, "_ID="+id, null);
}

public Cursor showReminders()
{
    Cursor c = db.query("Reminders", null, null , null, null, null, null);
    if(c!=null)
    {
        return c;
    }
    else
    {
        return null;
    }
}
}
4

7 に答える 7

1

CREATE TABLE 構文が正しくありません。細かいマニュアルから:

AUTOINCREMENT キーワード

列に型がある場合INTEGER PRIMARY KEY AUTOINCREMENT、わずかに異なるROWID選択アルゴリズムが使用されます。

AUTO_INCREMENTではなくAUTOINCREMENTであることに注意してください。したがって、テーブルは実際には作成されておらず、INSERT は正当に不平を言っています。Reminders

于 2013-06-18T03:47:14.617 に答える
1

私はあなたのdだと思いますatabase is not created

ここで見つけることができるフォーマットでデータベースを適切な方法で作成する 必要がありますexample

質問がある場合は、コメントを入力してください。

于 2013-06-18T04:22:19.507 に答える
0

テーブル作成時、主キー「_id」はアンダースコアを挟まず「AUTOINCREMENT」とする。おそらくあなたはそれを試すことができますか?

于 2013-06-18T03:47:59.353 に答える
0

newbeeの場合....以下のような単純なdatabaseHelperクラスを作成します(2つの異なるクラスを使用して混乱を招く理由):

public class DBController  extends SQLiteOpenHelper {
  private static final String LOGCAT = null;

  public DBController(Context applicationcontext) {
    super(applicationcontext, "androidsqlite.db", null, 1);
    Log.d(LOGCAT,"Created");
  }

  @Override
  public void onCreate(SQLiteDatabase database) {
    String query;
    query = "CREATE TABLE animals ( animalId INTEGER PRIMARY KEY, animalName TEXT)";
    database.execSQL(query);
    Log.d(LOGCAT,"animals Created");
  }
  @Override
  public void onUpgrade(SQLiteDatabase database, int version_old, int current_version) {
    String query;
    query = "DROP TABLE IF EXISTS animals";
    database.execSQL(query);
    onCreate(database);
  }

  public void insertAnimal(HashMap<String, String> queryValues) {
    SQLiteDatabase database = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put("animalName", queryValues.get("animalName"));
    database.insert("animals", null, values);
    database.close();
  }

  public int updateAnimal(HashMap<String, String> queryValues) {
    SQLiteDatabase database = this.getWritableDatabase();  
    ContentValues values = new ContentValues();
    values.put("animalName", queryValues.get("animalName"));
    return database.update("animals", values, "animalId" + " = ?", new String[] { queryValues.get("animalId") });
  }

  public void deleteAnimal(String id) {
    Log.d(LOGCAT,"delete");
    SQLiteDatabase database = this.getWritableDatabase();  
    String deleteQuery = "DELETE FROM  animals where animalId='"+ id +"'";
    Log.d("query",deleteQuery);   
    database.execSQL(deleteQuery);
  }

  public ArrayList<HashMap<String, String>> getAllAnimals() {
    ArrayList<HashMap<String, String>> wordList;
    wordList = new ArrayList<HashMap<String, String>>();
    String selectQuery = "SELECT  * FROM animals";
    SQLiteDatabase database = this.getWritableDatabase();
    Cursor cursor = database.rawQuery(selectQuery, null);
    if (cursor.moveToFirst()) {
      do {
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("animalId", cursor.getString(0));
        map.put("animalName", cursor.getString(1));
        wordList.add(map);
      } while (cursor.moveToNext());
    }
    return wordList;
  }

  public HashMap<String, String> getAnimalInfo(String id) {
    HashMap<String, String> wordList = new HashMap<String, String>();
    SQLiteDatabase database = this.getReadableDatabase();
    String selectQuery = "SELECT * FROM animals where animalId='"+id+"'";
    Cursor cursor = database.rawQuery(selectQuery, null);
    if (cursor.moveToFirst()) {
      do {
        wordList.put("animalName", cursor.getString(1));
      } while (cursor.moveToNext());
    }           
    return wordList;
  } 
}

挿入データの場合:

DBController controller = new DBController(myactivity.this);
HashMap<String, String> queryValues =  new  HashMap<String, String>();
queryValues.put("animalName", animalName.getText().toString());
controller.insertAnimal(queryValues);

ここにサンプルの例があります

于 2013-06-20T05:02:03.100 に答える
0

同じ問題に直面しましたが、クエリ構造が正しくありませんでした。これが、私が作成したクエリの正しいサンプルです。これが役に立てば幸いです:)

   CREATE TABLE "Configuration" (
"_id" INTEGER PRIMARY KEY AUTOINCREMENT, 
"id_Users" INTEGER, 
"Key" VARCHAR(255), 
"Value" VARCHAR(255)
    );
于 2013-06-18T04:43:32.780 に答える
0

最初にテーブルを作成し、追加モードまたは書き込みモードで開いてテーブルを開き、データを挿入します

于 2013-06-18T05:07:10.500 に答える