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

时间:2013-03-20 06:05:02

标签: java android sqlite

我正在使用sqlite数据库开发应用程序,该数据库有一个表名注释,存储 id 名称数字阻止

现在每次运行

的应用程序时都会出错
  

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

的错误

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

2 个答案:

答案 0 :(得分: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"+ ");";

答案 1 :(得分:0)

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

在你的数据库代码中           public static final String COLUMN_NUMBER =“ph_number”; 包含列名称为ph_number。

根据我的理解,您声明数据库包含一个存储id,名称,数字和块的表名注释。所以你的列名可能是数字。

所以改变这一行               public static final String COLUMN_NUMBER =“number”  现在看看吧。因为表和程序中的列应该相同。所以可能你没有得到这样的列错误