2015-05-30 2 views
-5

Я создал проект eclipse для Android, который использует sqlite как базу данных, есть некоторая ошибка, возникающая, когда я пытаюсь запустить проект в телефоне. когда я нажимаю кнопку просмотра (для просмотра моей базы данных), он говорит, что в моей базе данных нет столбцов, может кто-то помочь мне, почему это происходит.нет столбцов в базе данных mysqlite

это мой кодирующая файл базы данных:

public class Translator { 

public static final String KEY_ROWID ="_id"; 
public static final String KEY_DESC ="page_desc"; 

private static final String DATABASE_NAME ="Translatordb"; 
private static final String DATABASE_TABLE ="pageTable"; 
private static final int DATABASE_VERSION = 1; 

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

public 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 
     db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + 
     KEY_ROWID + " STRING PRIMARY KEY, " + 
     KEY_DESC + " TEXT NOT NULL);" 
       ); 
    } 


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

} 

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

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

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

public long createEntry(String id, String description){ 
    ContentValues cv = new ContentValues(); 
    cv.put(KEY_ROWID,id); 
    cv.put(KEY_DESC,description); 
    return ourDatabase.insert(DATABASE_TABLE,null, cv); 
} 

public long createEntry1(String id, String description){ 
    ContentValues cv = new ContentValues(); 
    cv.put(KEY_ROWID,"P01"); 
    cv.put(KEY_DESC,"Snow White"); 
    return ourDatabase.insert(DATABASE_TABLE,null, cv); 
} 


public String getData() { 
    // TODO Auto-generated method stub 
    String[] columns = new String[]{KEY_ROWID,KEY_DESC}; 
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns,null,null,null,null,null); 
    String result =" "; 

    int iRow = c.getColumnIndex(KEY_ROWID); 
    int iDescription = c.getColumnIndex(KEY_DESC); 

for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){ 
    result =result + c.getString(iRow)+ " " +c.getString(iDescription) +" \n"; 
    } 

    return result; 

} 

главный Activity.java

public class MainActivity extends Activity implements OnClickListener { 


static final String ACTION_SCAN = "com.google.zxing.client.android.SCAN"; 
Button view; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    view =(Button) findViewById(R.id.viewSQL); 
    view.setOnClickListener(this); 

} 



    //product qr code mode 
public void scanQR(View v) { 
    try { 
     //start the scanning activity from the com.google.zxing.client.android.SCAN intent 
     Intent intent = new Intent(ACTION_SCAN); 
     intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); 
     startActivityForResult(intent, 0); 


    } catch (ActivityNotFoundException anfe) { 
     //on catch, show the download dialog 
     showDialog(MainActivity.this, "No Scanner Found", "Download a scanner code activity?", "Yes", "No").show(); 
    } 
} 

//alert dialog for downloadDialog 
private static AlertDialog showDialog(final Activity act, CharSequence title, CharSequence message, CharSequence buttonYes, CharSequence buttonNo) { 
    AlertDialog.Builder downloadDialog = new AlertDialog.Builder(act); 
    downloadDialog.setTitle(title); 
    downloadDialog.setMessage(message); 
    downloadDialog.setPositiveButton(buttonYes, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 
      Uri uri = Uri.parse("market://search?q=pname:" + "com.google.zxing.client.android"); 
      Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
      try { 
       act.startActivity(intent); 
      } catch (ActivityNotFoundException anfe) { 

      } 
     } 
    }); 
    downloadDialog.setNegativeButton(buttonNo, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 
     } 
    }); 
    return downloadDialog.show(); 
} 

//on ActivityResult method 
@Override 
public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if (requestCode == 0) { 
     if (resultCode == RESULT_OK) { 
      //get the extras that are returned from the intent 
      String contents = intent.getStringExtra("SCAN_RESULT"); 
      String format = intent.getStringExtra("SCAN_RESULT_FORMAT"); 
      Toast toast = Toast.makeText(this, "Content:" + contents + " Format:" + format, Toast.LENGTH_LONG); 
      toast.show(); 
     } 
    } 
} 

public void onClick(View arg0) { 
    switch(arg0.getId()){ 

     case R.id.viewSQL: 

      Translator entry = new Translator(MainActivity.this); 
      entry.open(); 
      entry.close(); 
      Intent i = new Intent("com.example.scanner.SQLVIEW"); 
      startActivity(i); 
      break; 
     } 
    } 

SQLView.java

public class SQLView extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.sqlview); 
    TextView tv =(TextView) findViewById(R.id.tvSQLint); 
    Translator info = new Translator(this); 
    info.open(); 
    String data = info.getData(); 
    info.close(); 
    tv.setText(data); 


} 

это моя ошибка:

java.lang.RuntimeException: не удалось запустить Activity ComponentInfo {com.example.scanner/com.example.scanner.SQLView}: android.database.sqlite.SQLiteException: нет такого столбца: page_desc (код 1): при компиляции: SELECT _id, page_desc FROM pageTable

может кто-то сказать мне, где я делаю неправильно ???

+0

ли создание таблицы выдает ошибку? Можете ли вы поделиться им, пожалуйста? – Mureinik

+0

Нет, когда я отлаживаю проект, он не появляется. Когда я запускаю его на устройстве, появляется ошибка, когда я нажимаю кнопку просмотра (она будет отображать данные в базе данных), она говорит, что нет таких столбцов, как page_desc – user4706780

+1

Возможно, ваше устройство имеет более старую версию файла базы данных. Удалите приложение, чтобы избавиться от него, и переустановите его и запустите, чтобы создать новый. – laalto

ответ

0

Попробуйте

public class Translator extends SQLiteOpenHelper { 
private static final String LOGCAT = null; 

public Translator(Context applicationcontext) { 
    super(applicationcontext, "androidsqlite.db", null, 1); 
    Log.d(LOGCAT, "Created Translator Database"); 
} 

public static final String KEY_ROWID = "_id"; 
public static final String KEY_DESC = "page_desc"; 

private static final String DATABASE_TABLE = "pageTable"; 

private SQLiteDatabase ourDatabase; 

@Override 
public void onCreate(SQLiteDatabase db) { 
    // TODO Auto-generated method stub 
    db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + KEY_ROWID 
      + " STRING PRIMARY KEY, " + KEY_DESC + " TEXT NOT NULL);"); 
} 

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

public long createEntry(String id, String description) { 
    ContentValues cv = new ContentValues(); 
    cv.put(KEY_ROWID, id); 
    cv.put(KEY_DESC, description); 
    return ourDatabase.insert(DATABASE_TABLE, null, cv); 
} 

public long createEntry1(String id, String description) { 
    ContentValues cv = new ContentValues(); 
    cv.put(KEY_ROWID, "P01"); 
    cv.put(KEY_DESC, "Snow White"); 
    return ourDatabase.insert(DATABASE_TABLE, null, cv); 
} 

public String getData() { 
    // TODO Auto-generated method stub 
    String[] columns = new String[] { KEY_ROWID, KEY_DESC }; 
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, 
      null, null); 
    String result = " "; 

    int iRow = c.getColumnIndex(KEY_ROWID); 
    int iDescription = c.getColumnIndex(KEY_DESC); 

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 
     result = result + c.getString(iRow) + " " 
       + c.getString(iDescription) + " \n"; 
    } 

    return result; 

} 
} 
+0

@SmulianJulain благодарит, хорошо работает, не могли бы вы объяснить мне, что вы меняете, и можете ли вы увидеть мое кодирование для просмотра данных, что мне нужно изменить. – user4706780

+0

У меня было ощущение, что вы называете деятельность Translator, но не метод DbHelper в деятельности Translator. Я не очень много знаю о базах данных, но это то, что я думал. Это может быть так, как сказал Дер Голем. Он не получил 17 тысяч баллов случайно. – SmulianJulian

Смежные вопросы