2012-01-25 30 views
0

`// * ** * ** * ** * ** * ** 错误的logcat 表示 ** * *** android.database.sqlite.SQLiteException:no such column:me:,while compiling:UPDATE TemplateTable SET user =?,alert =?,mycard =? WHERE用户=我错误而更新表的Android源码

// * ** * ** * ** * ** * ** * *设置活动* ** * ** * ** * ** *

Button save =(Button)findViewById(R.id.save_templates); save.setOnClickListener(新View.OnClickListener(){

 public void onClick(View arg0) { 
      // TODO Auto-generated method stub 

      // Save templates selected 
      CardsDatabase db = new CardsDatabase(Settings.this); 
      db.open(); 
      ContentValues cv=new ContentValues(); 
      cv.put(CardsDatabase.USERTEMPLATE, "me"); 
      cv.put(CardsDatabase.ALERT, Integer.toString(alert)); 
      cv.put(CardsDatabase.MYCARD, Integer.toString(mycard)); 
      db.updateTemplate(cv); 
      db.close(); 

      Toast.makeText(Settings.this, "Settings saved successfully.", Toast.LENGTH_SHORT).show(); 

     } 
    }); 

// * ** * ** * ** * ** * ** * ** 数据库类* ** * ** * ** * ** * ***

公共类CardsDatabase {

public static String USERTEMPLATE = "user"; 
public static String MYCARD = "mycard"; 
public static String ALERT = "alert"; 

public static String USER = "user"; 
public static String NAME = "name"; 
public static String COMPANY = "company"; 
public static String TITLE = "title"; 
public static String ADDRESS = "address"; 
public static String PHONE = "phone"; 
public static String CEL = "cel"; 
public static String EMAIL = "email"; 
public static String PHOTO = "photo"; 

public static String MAC = "macaddress"; 

private static String DATABASE_NAME = "CardsDatabase"; 
public static String DATABASE_TABLE_TEMPLATE = "TemplateTable"; 
public static String DATABASE_TABLE_MYTABLE = "MYTable"; 
public static String DATABASE_TABLE_CONTACTS = "ContactsTable"; 

private static int DATABASE_VERSION = 1; 

private DbHelper ourHelper; 
private final Context ourContext; 
private SQLiteDatabase ourDatabase; 

private static class DbHelper extends SQLiteOpenHelper { 

    public DbHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     // Log.d(Tag,"Inner on create called"); 
     db.execSQL("CREATE TABLE " + DATABASE_TABLE_TEMPLATE + " (" 
       + USERTEMPLATE + " TEXT NOT NULL," + MYCARD 
       + " TEXT NOT NULL," + ALERT + " TEXT NOT NULL" + ");"); 

     db.execSQL("CREATE TABLE " + DATABASE_TABLE_MYTABLE + " (" + USER 
       + " TEXT NOT NULL," + NAME + " TEXT NOT NULL," + COMPANY 
       + " TEXT," + TITLE + " TEXT," + ADDRESS + " TEXT," + PHONE 
       + " TEXT NOT NULL," + CEL + " TEXT," + EMAIL 
       + " TEXT NOT NULL," + PHOTO + " BLOB" + ");"); 

     db.execSQL("CREATE TABLE " + DATABASE_TABLE_CONTACTS + " (" + MAC 
       + " TEXT NOT NULL" + ");"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     db.execSQL("DROP TABLE IF EXISTS" + DATABASE_TABLE_TEMPLATE); 
     db.execSQL("DROP TABLE IF EXISTS" + DATABASE_TABLE_MYTABLE); 
     db.execSQL("DROP TABLE IF EXISTS" + DATABASE_TABLE_CONTACTS); 
     onCreate(db); 
    } 

} 

public CardsDatabase(Context c) { 
    ourContext = c; 
} 

public CardsDatabase open() throws SQLException { 
    ourHelper = new DbHelper(ourContext); 
    ourDatabase = ourHelper.getWritableDatabase(); 
    return this; 
} 

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

public void createEntry(int type, ContentValues cv) { 
    // TODO Auto-generated method stub 

    switch (type) { 
    case 1: 
     ourDatabase.insert(DATABASE_TABLE_TEMPLATE, null, cv); 
     break; 
    case 2: 
     ourDatabase.insert(DATABASE_TABLE_MYTABLE, null, cv); 
     break; 
    case 3: 
     ourDatabase.insert(DATABASE_TABLE_CONTACTS, null, cv); 
     break; 
    } 

} 

public Cursor getTemplate() throws SQLException { 
    // TODO Auto-generated method stub 

    String[] columns = new String[] { USERTEMPLATE, MYCARD, ALERT }; 

    Cursor c = ourDatabase.query(DATABASE_TABLE_TEMPLATE, columns, null, 
      null, null, null, null); 

    return c; 
} 

public Cursor getMyData() throws SQLException { 
    // TODO Auto-generated method stub 

    String[] columns = new String[] { USER, NAME, COMPANY, TITLE, ADDRESS, 
      PHONE, CEL, EMAIL, PHOTO }; 

    Cursor c = ourDatabase.query(DATABASE_TABLE_MYTABLE, columns, null, 
      null, null, null, null); 

    return c; 
} 

public boolean contactExist(String mac) throws SQLException { 
    // TODO Auto-generated method stub 

    String[] columns = new String[] { MAC }; 

    Cursor c = ourDatabase.query(DATABASE_TABLE_CONTACTS, columns, MAC 
      + "=" + mac, null, null, null, null); 

    return c.getCount() > 0 ? true : false; 
} 

public void updateTemplate(ContentValues cv) { 
    String m = "me"; 
    ourDatabase.update(DATABASE_TABLE_TEMPLATE, cv, USERTEMPLATE + "=" + m, 
      null); 
} 

public void updateMytable(ContentValues cv) { 
    String m = "me"; 
    ourDatabase.update(DATABASE_TABLE_MYTABLE, cv, USER + "=" + m, null); 
} 

}`

回答

1

您需要提供更多的细节,但我会愿意赌你更新你的模式,而不会增加你的SQLiteOpenHelper实现中的版本号。

编辑

通过您的代码看后,你需要单引号的更新方法添加到您的WHERE子句。如果不使用引号,数据库引擎将它作为你的表中的列,因此错误“没有这样的列:我”

您有:

public void updateTemplate(ContentValues cv) { 
    String m = "me"; 
    ourDatabase.update(DATABASE_TABLE_TEMPLATE, cv, USERTEMPLATE + "=" + m, 
      null); 
} 

应该是这样的:

public void updateTemplate(ContentValues cv) { 
    String m = "me"; 
    String WHERE = String.format("%s='%s'", USERTEMPLATE, m); 
    ourDatabase.update(DATABASE_TABLE_TEMPLATE, cv, WHERE, null); 
} 
+0

我没有更新的模式,我只是更新排在用户列中包含“我” – Ahmed

+0

模板(用户,警报,mycard),这些都是3 colu mns在里面。 – Ahmed

+0

非常感谢它的工作 – Ahmed

0

你需要使用单引号围绕“我”在您的查询

+0

谢谢,它的工作原理 – Ahmed