0

我正在使用 sqlite 数据库开发应用程序,该数据库具有一个存储idnamenumberblock的表名注释

现在我每次运行应用程序时都会出错

sqlite 返回:错误代码 = 1,msg = 没有这样的列:ph_number

代码如下..

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";
  public static final String COLUMN_NUMBER = "ph_number";
  public static final String COLUMN_BLOCK = "block";

  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," + COLUMN_NUMBER + " TEXT," 
      + COLUMN_BLOCK +" TEXT," +"UNIQUE(COLUMN_NUMBER) ON CONFLICT REPLACE"+ ");";

  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,
      MySQLiteHelper.COLUMN_NUMBER,
      MySQLiteHelper.COLUMN_BLOCK};
  private String[] ColNum = {MySQLiteHelper.COLUMN_NUMBER, MySQLiteHelper.COLUMN_BLOCK };
  private String[] num = {MySQLiteHelper.COLUMN_NUMBER };

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

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

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

  public Comment createComment(String comment, String number, String b_value) {
    ContentValues values = new ContentValues();
    values.put(MySQLiteHelper.COLUMN_COMMENT, comment);
    values.put(MySQLiteHelper.COLUMN_NUMBER, number);
    values.put(MySQLiteHelper.COLUMN_BLOCK, b_value);
    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>();
        try{
        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();
        }catch (Exception e) {
            // TODO: handle exception
        }

        return comments;
      }
// Updating single contact
    public Comment updateContact(Comment comment, String name ,String number, String b_value) {
        database = dbHelper.getWritableDatabase();
        long id = comment.getId();
        ContentValues values = new ContentValues();
        values.put(MySQLiteHelper.COLUMN_COMMENT, name);
        values.put(MySQLiteHelper.COLUMN_NUMBER, number);
        values.put(MySQLiteHelper.COLUMN_BLOCK, b_value);
        System.out.println("updated: "+ id);
        // updating row
        long updateId = database.update(MySQLiteHelper.TABLE_COMMENTS, values, 
                MySQLiteHelper.COLUMN_ID + " = " + id, null);
        Cursor cursor = database.query(MySQLiteHelper.TABLE_COMMENTS,
                allColumns, MySQLiteHelper.COLUMN_ID + " = " + id, null,
                null, null, null);
            cursor.moveToFirst();
            Comment newComment = cursorToComment(cursor);
            cursor.close();
            System.out.println("updated: "+ newComment);
            return newComment;
    }

  private Comment cursorToComment(Cursor cursor) {
    Comment comment = new Comment();
    comment.setId(cursor.getLong(0));
    comment.setName(cursor.getString(1));
    comment.setNumber(cursor.getString(2));
    comment.setB_value(cursor.getString(3));
    return comment;
  }

 public String getValue(String phNum) {
        String value = null;
        String b_value =null ;
        Cursor cursor = database.query(MySQLiteHelper.TABLE_COMMENTS,
            ColNum, null, null, null, null, null);
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
          value = cursor.getString(0);
          if(PhoneNumberUtils.compare(phNum, value))
          {
              b_value = cursor.getString(1);
          }
          cursor.moveToNext();
        }
        // Make sure to close the cursor
        cursor.close();
        return b_value;
      }
 public boolean findNum(String phNum) {
        String value = null;
        boolean find =false ;
        Cursor cursor = database.query(MySQLiteHelper.TABLE_COMMENTS,
            num, null, null, null, null, null);
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
          value = cursor.getString(0);
          if(PhoneNumberUtils.compare(phNum, value))
          {
              find = true;
          }
          cursor.moveToNext();
        }
        // Make sure to close the cursor
        cursor.close();
        return find;
      }
} 

我已将 ph_number 列声明为。

 public static final String COLUMN_NUMBER = "ph_number";

但我仍然收到错误消息sqlite returned: error code = 1, msg = no such column: ph_number

我在这方面浪费了很多时间,但无法纠正。请帮我 ..

4

2 回答 2

1

试试这个

  // Database creation sql statement
  private static final String DATABASE_CREATE = "create table "
  + TABLE_COMMENTS + "(" + COLUMN_ID
  + " integer primary key autoincrement, " + COLUMN_COMMENT
  + " TEXT," + COLUMN_NUMBER + " TEXT," 
  + COLUMN_BLOCK +" TEXT," +"UNIQUE("+ COLUMN_NUMBER +") ON CONFLICT REPLACE"+ ");";

代替

  // Database creation sql statement
  private static final String DATABASE_CREATE = "create table "
  + TABLE_COMMENTS + "(" + COLUMN_ID
  + " integer primary key autoincrement, " + COLUMN_COMMENT
  + " TEXT," + COLUMN_NUMBER + " TEXT," 
  + COLUMN_BLOCK +" TEXT," +"UNIQUE(COLUMN_NUMBER) ON CONFLICT REPLACE"+ ");";
于 2013-03-20T08:16:14.360 回答
0

我认为返回的错误sqlite:错误代码= 1,msg =没有这样的列:ph_number是因为,

在您的数据库代码中,公共静态最终字符串 COLUMN_NUMBER = "ph_number"; 包含列名称为 ph_number。

根据我的理解,您说数据库包含一个存储 id、name、number 和 block 的表名注释。所以你的列名可能是数字。

所以像这个 public static final String COLUMN_NUMBER = "number" 一样改变这一行,现在检查一下。因为表和程序中的列应该相同。所以可能你不会得到这样的列错误

于 2013-03-20T06:14:37.320 回答