-1

正如我之前所说,我对 android 非常陌生,现在我面临一个非常令人不安的问题。我有一个数据库,我需要在表中添加一个新字段。我不太了解android和java ..所以请大家帮忙,我们将不胜感激...这是我的数据库代码:

public class MySQLiteHelper extends SQLiteOpenHelper {

  public static final String TABLE_COMMENTS = "comments";
  public static final String COLUMN_ID = "_id";
  public static final String COLUMN_COMMENT = "comment";

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

  // Database creation sql statement
  private static final String DATABASE_CREATE = "create table "
      + TABLE_COMMENTS + "(" + COLUMN_ID
      + " integer primary key autoincrement, " + COLUMN_COMMENT
      + " text not null);";

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

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

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

} 

这是针对数据库的功能:

    public class CommentsDataSource {

  // Database fields
  private SQLiteDatabase database;
  private MySQLiteHelper dbHelper;
  private String[] allColumns = { MySQLiteHelper.COLUMN_ID,
      MySQLiteHelper.COLUMN_COMMENT };

  public CommentsDataSource(Context context) {
    dbHelper = new MySQLiteHelper(context);
  }

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

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

  public Comment createComment(String comment) {
    ContentValues values = new ContentValues();
    values.put(MySQLiteHelper.COLUMN_COMMENT, comment);
    long insertId = database.insert(MySQLiteHelper.TABLE_COMMENTS, null,
        values);
    Cursor cursor = database.query(MySQLiteHelper.TABLE_COMMENTS,
        allColumns, MySQLiteHelper.COLUMN_ID + " = " + insertId, null,
        null, null, null);
    cursor.moveToFirst();
    Comment newComment = cursorToComment(cursor);
    cursor.close();
    return newComment;
  }

  public void deleteComment(Comment comment) {
    long id = comment.getId();
    System.out.println("Comment deleted with id: " + id);
    database.delete(MySQLiteHelper.TABLE_COMMENTS, MySQLiteHelper.COLUMN_ID
        + " = " + id, null);
  }

  public List<Comment> getAllComments() {
    List<Comment> comments = new ArrayList<Comment>();

    Cursor cursor = database.query(MySQLiteHelper.TABLE_COMMENTS,
        allColumns, null, null, null, null, null);

    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
      Comment comment = cursorToComment(cursor);
      comments.add(comment);
      cursor.moveToNext();
    }
    // Make sure to close the cursor
    cursor.close();
    return comments;
  }

  private Comment cursorToComment(Cursor cursor) {
    Comment comment = new Comment();
    comment.setId(cursor.getLong(0));
    comment.setComment(cursor.getString(1));
    return comment;
  }
} 

这是上述类使用的另一个类:

public class Comment {
  private long id;
  private String comment;

  public long getId() {
    return id;
  }

  public void setId(long id) {
    this.id = id;
  }

  public String getComment() {
    return comment;
  }

  public void setComment(String comment) {
    this.comment = comment;
  }

  // Will be used by the ArrayAdapter in the ListView
  @Override
  public String toString() {
    return comment;
  }
} 

当我只使用一个字段(即评论)时,所有这些代码都可以正常工作,但我想添加三个名为:“地址”、“年龄”、“性别”的新字段,如果可能的话,更改数据库名称,我只是似乎无法以正确的方式改变它以获得我想要的东西。请告诉我所需的正确更改。请帮助我!

先谢谢了,等待您的回复...

4

2 回答 2

1

如果可能的话,更改数据库名称,我似乎无法以正确的方式更改它以获得我想要的东西。请告诉我所需的正确更改。

有两种方法:

  • 正确实现类onUpgrade()方法SQLiteOpenHelper(如果需要更新)

  • 只需更新您的数据库类(修改DDL语句 eq 添加新列并根据需要更改数据库名称),然后在将更新的应用程序安装到您的设备之前,删除应用程序的数据(在设备中,它位于应用程序管理器下的设置中)。这将删除连接到您的应用程序的所有数据(数据库、首选项等)

看着

于 2013-07-27T12:53:26.333 回答
1

在表中创建新列,如下所示:

String Comment_table = String.format("CREATE TABLE %s " +
                "(%s INTEGER PRIMARY KEY AUTOINCREMENT ," +
                " %s TEXT , %s TEXT , %s TEXT ," +
                " %s TEXT  )",

                Comment_Table,
                Comment_ID ,
                Comment , Address , Age ,
                Gender );

(这里,列名是声明为类变量的静态字符串)。

于 2013-07-27T13:02:16.680 回答