2017-03-01 54 views
-1

在打開應用程序時出現sqlite錯誤。android.database.sqlite.SQLiteException:沒有這樣的列:syncstatus(代碼1):,編譯時:SELECT name,syncstatus FROM名稱

logcat的錯誤:

java.lang.RuntimeException: Unable to start activity ComponentInfo{net.simplifiedcoding.androidmysqlsync/net.simplifiedcoding.androidmysqlsync.OneMore.MainActivity}: android.database.sqlite.SQLiteException: no such column: syncstatus (code 
1): , while compiling: SELECT name, syncstatus FROM names at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2429) 

DbContact.java

package net.simplifiedcoding.androidmysqlsync.OneMore; 

/** 
* Created by Belal on 1/27/2017. 
*/ 
public class DbContact { 

    public static final int SYNC_STATUS_OK = 0; 
    public static final int SYNC_STATUS_FAILED = 1; 


    //Constants for Database name, table name, and column item_view 
    public static final String DATABASE_NAME = "ddagroin_ddagro"; 
    public static final String TABLE_NAME = "names"; 
    public static final String NAME = "name"; 
    public static final String SYNC_STATUS = "syncstatus"; 
    public static final String COLUMN_ID = "id"; 


} 

DbHelper.java

package net.simplifiedcoding.androidmysqlsync.OneMore; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

/** 
* Created by Priya on 2/27/2017. 
*/ 

public class DbHelper extends SQLiteOpenHelper { 

    //database version 
    private static final int DATABASE_VERSION = 1; 


    private static final String DROP_TABLE = "drop table if exists"+DbContact.TABLE_NAME; 

    public DbHelper(Context context){ 
     super(context,DbContact.DATABASE_NAME,null,DATABASE_VERSION); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String CREATE_TABLE= "CREATE TABLE " + DbContact.TABLE_NAME 
       + "(" + DbContact.COLUMN_ID + 
       " INTEGER PRIMARY KEY AUTOINCREMENT, " + DbContact.NAME + 
       " VARCHAR, " + DbContact.SYNC_STATUS + 
       " TINYINT);"; 

     db.execSQL(CREATE_TABLE); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

     db.execSQL(DROP_TABLE); 
     onCreate(db); 
    } 

    public void saveToLocalDatabase(String name, int sync_status, SQLiteDatabase database){ 

     ContentValues contentValues = new ContentValues(); 
     contentValues.put(DbContact.NAME, name); 
     contentValues.put(DbContact.SYNC_STATUS, sync_status); 

     database.insert(DbContact.TABLE_NAME,null,contentValues); 


    } 

    public Cursor readFromLocalDatabase(SQLiteDatabase database){ 

     String[] projection = {DbContact.NAME, DbContact.SYNC_STATUS}; 

     return (database.query(DbContact.TABLE_NAME,projection,null,null,null,null,null)); 
    } 



    } 

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    RecyclerView recyclerView; 
    EditText Name; 
    RecyclerView.LayoutManager layoutManager; 

    RecyclerAdapter adapter; 
    ArrayList<Contact> arrayList = new ArrayList<>(); 

    /* 
    * this is the url to our webservice 
    * make sure you are using the ip instead of localhost 
    * it will not work if you are using localhost 
    * */ 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main1); 
     recyclerView=(RecyclerView)findViewById(R.id.recyclerView); 
     Name=(EditText) findViewById(R.id.name); 
     layoutManager =new LinearLayoutManager(this); 
     recyclerView.setLayoutManager(layoutManager); 
     recyclerView.setHasFixedSize(true); 

     adapter = new RecyclerAdapter(arrayList); 
     recyclerView.setAdapter(adapter); 

     readFromLocalStorage(); 


    } 
    public void submitName(View view){ 

     String name = Name.getText().toString(); 
     saveToLocalStorage(name); 
     Name.setText(""); 
    } 


    private void readFromLocalStorage() { 

     arrayList.clear(); 
     DbHelper dbHelper = new DbHelper(this); 
     SQLiteDatabase database = dbHelper.getReadableDatabase(); 

     Cursor cursor = dbHelper.readFromLocalDatabase(database); 

     while (cursor.moveToNext()){ 
      String name = cursor.getString(cursor.getColumnIndex(DbContact.NAME)); 
      int sync_status=cursor.getInt(cursor.getColumnIndex(DbContact.SYNC_STATUS)); 

      arrayList.add(new Contact(name,sync_status)); 

     } 

     adapter.notifyDataSetChanged(); 
     cursor.close(); 
     dbHelper.close(); 
    } 

    private void saveToLocalStorage(String name){ 

     DbHelper dbHelper = new DbHelper(this); 
     SQLiteDatabase database = dbHelper.getWritableDatabase(); 

     if(checkNetworkConnection()){ 



     }else { 

      dbHelper.saveToLocalDatabase(name, DbContact.SYNC_STATUS_FAILED,database); 

     } 
     readFromLocalStorage(); 
     dbHelper.close(); 

    } 
    public boolean checkNetworkConnection(){ 
     ConnectivityManager connectivityManager =(ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo networkInfo=connectivityManager.getActiveNetworkInfo(); 
     return (networkInfo!= null && networkInfo.isConnected()); 
    } 

} 
+0

它清楚地說,沒有列'syncstatus' –

+0

使用終端來檢查數據庫中究竟創建了什麼。1)adb shell 2)cd/data/data/

/databases 3)sqlite3 4).t​​ables – CoderP

+0

刪除它並重新創建它。 –

回答

0

它正在爲我工​​作。您是否可能已添加該列並忘記更新DATABASE_VERSION,請更新數據庫版本並檢查。

給予空間後存在「:

public static final String DROP_TABLE = "DROP TABLE IF EXISTS " +DbContact.TABLE_NAME; 

光標條目 你必須選擇列第一

String[] columns = {DbContact.NAME, DbContact.SYNC_STATUS}; 
Cursor cursor = db.query(yourtableName, 
        columns, 
        null, 
        null, null, null, null); 

然後把你的while循環

+0

更新DATABASE_VERSION。 – priya

+0

private static final int DATABASE_VERSION = 2; –

+0

java.lang.RuntimeException:無法啓動活動ComponentInfo {net.simplifiedcoding.androidmysqlsync/net.simplifiedcoding.androidmysqlsync.OneMore.MainActivity}:android.database.sqlite.SQLiteException:near「existsnames」:語法錯誤(代碼1): ,同時編譯:drop table if existsnames – priya

相關問題