2013-03-20 66 views
0

我使用有一个表名评论存储ID sqlite的DATABSE开发应用和区块SQLite数据库错误:sqlite的返回:错误码= 1,味精=没有这样的列:ph_number

现在我每次得到一个错误,当我运行

sqlite returned: error code = 1, msg = no such column: 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

我对这个浪费时间很多,但不能纠正。请帮助我..

回答

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"+ ");"; 
+0

谢谢@Divya ..它解决了我的问题.. – 2013-03-21 05:17:29

0

我认为错误的SQLite返回:错误码= 1,味精=没有这样的列:ph_number是因为,

在你的数据库代码 公共静态最后弦乐COLUMN_NUMBER栏=“ph_number” ; 包含列名称ph_number。

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

所以改变这条线像这样 public static final String COLUMN_NUMBER =“number” 现在检查出来。因为表格和程序中的列应该相同。所以可能你会得到没有这样的列错误

+0

仍然给错误.. SQLite的返回:错误码= 1,味精=没有这样的列: number – 2013-03-20 06:19:13

+0

检查数据库中的列名和public static final String COLUMN_NUMBER =“number”是否正确。数据库不区分大小写。你会得到这个错误,因为你的列名称在数据库和代码,如果它不匹配..检查出第一个 – user1835052 2013-03-20 06:25:05

+0

是的,它是相同的没有区别列名 – 2013-03-20 06:27:44

相关问题