没有这样的表 - 错误的SQLite的Andr​​oid插入值错误、SQLite、oid、Andr

2023-09-03 22:25:32 作者:愿你曾被这个世界温柔对待

我想开发中,我需要在Android中使用SQLite数据库的应用程序。如下所示的code这是贯彻落实数据库和其所有的操作我的应用程序需要用随机数据(只是为了成功地实现逻辑在前)。

I want to develop an application in which i need to use SQLite database in Android. Below is the code shown which is implementing the database and all its operations my application requires with random data(just to implement the logic successfully first).

这code被写入在DBHelperDisplay.java它是通过意图通过MainActivity.java调用。

This code is written in DBHelperDisplay.java which is called through intent by MainActivity.java.

我的DBHelperDisplay.java:

My DBHelperDisplay.java :

package course.examples.jumboquest;

import java.util.Random;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
//import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
//import android.content.Intent;
import android.os.CountDownTimer;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase;

public class DBHelperDisplay extends ActionBarActivity {

TextView tv; 
DBHelper myDB;
RadioGroup radioChoices;
RadioButton rbtChoice; 
Button btSubmit;
String choice1;
String choice2;
String choice3;
String choice4;
String strAns;
CustomTimer cdt;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.dbhelper_display);

    cdt = new CustomTimer(20000, 1000);
    cdt.start();

    myDB = new DBHelper(this);

    myDB.insertQuestion(1, "who is the team member whose name starts with s?", "Vinita", "Akanksha", "Swati", "Megha", "Swati");
    myDB.insertQuestion(2, "who is the team member whose name starts with m?", "Vinita", "Akanksha", "Swati", "Megha", "Megha");
    myDB.insertQuestion(3, "who is the team member whose name starts with a?", "Vinita", "Akanksha", "Swati", "Megha", "Akanksha");
    myDB.insertQuestion(4, "who is the team member whose name starts with v?", "Vinita", "Akanksha", "Swati", "Megha", "Vinita");
    myDB.insertQuestion(5, "who is the team member whose name ends with i?", "Vinita", "Akanksha", "Swati", "Megha", "Swati");

    Cursor rs = myDB.getData();
    String Question = rs.getString(rs.getColumnIndex(DBHelper.Col_Ques));
    choice1 = rs.getString(rs.getColumnIndex(DBHelper.Col_Choice1));
    choice2 = rs.getString(rs.getColumnIndex(DBHelper.Col_Choice2));
    choice3 = rs.getString(rs.getColumnIndex(DBHelper.Col_Choice3));
    choice4 = rs.getString(rs.getColumnIndex(DBHelper.Col_Choice4));
    strAns = rs.getString(rs.getColumnIndex(DBHelper.Col_Ans));


    tv = (TextView) findViewById(R.id.timertxt);

    final TextView quest = (TextView) findViewById(R.id.quest);
    quest.setText(Question);

    //final TextView ans = (TextView) findViewById(R.id.ans);

    Button btClear = (Button)findViewById(R.id.btClear);
    btClear.setText("CLEAR");

   addListenerRadioChoices() ;

   btClear.setOnClickListener(new View.OnClickListener(){
     public void onClick(View v) {
        //ans.setText("");

       }
  });
 }
    public void addListenerRadioChoices(){ 

    radioChoices = (RadioGroup) findViewById(R.id.radioChoices);

    ((RadioButton) radioChoices.getChildAt(0)).setText(choice1); 
    ((RadioButton) radioChoices.getChildAt(1)).setText(choice2);
    ((RadioButton) radioChoices.getChildAt(2)).setText(choice3);
    ((RadioButton) radioChoices.getChildAt(3)).setText(choice4);

    btSubmit = (Button)findViewById(R.id.btSubmit); 
    btSubmit.setText("SUBMIT");
    btSubmit.setOnClickListener(new View.OnClickListener(){
     public void onClick(View v) {

        int selected = radioChoices.getCheckedRadioButtonId();
        rbtChoice = (RadioButton) findViewById(selected); 
        String Ans = rbtChoice.getText().toString();
         if(Ans.equalsIgnoreCase(strAns)){

            cdt.cancel();
            //ans.setText(" ANSWER");

         }
        /* else{
            //  ans.setText("WRONG ANSWER");
         }*/

    }
   });
  } 

public class CustomTimer extends CountDownTimer{
    //TextView ed;
    public CustomTimer(long millisInFuture, long countDownInterval){
        super(millisInFuture, countDownInterval);
    }
    @Override
    public void onTick(long millisUntilFinished){
        //current = millisUntilFinished/1000;
        tv.setText("Time Left:" + millisUntilFinished/1000);
    }
    @Override
    public void onFinish() {
        tv.setText("Time Up - lost the game!");
    }
}

public class DBHelper extends SQLiteOpenHelper {

    public static final String Database_Name = "Questions.db"; 
    public static final String Table_Name = "Comics"; 
    public static final String Col_ID = "id"; 
    public static final String Col_Ques = "question"; 
    public static final String Col_Choice1 = "choice1"; 
    public static final String Col_Choice2 = "choice2"; 
    public static final String Col_Choice3 = "choice3"; 
    public static final String Col_Choice4 = "choice4"; 
    public static final String Col_Ans = "answer"; 

    public DBHelper(Context context){
        super(context, Database_Name, null, 1);
    }
    @Override 
    public void onCreate(SQLiteDatabase db){
        // TODO Auto-generated method stub  
       db.execSQL(
       "CREATE TABLE Comics" +
       "(id integer primary key, question text, choice1 text, choice2 text, choice3 text, choice4 text, answer text)");

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

    public boolean insertQuestion(int id, String question, String choice1, String choice2, String choice3, String choice4, String answer){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();

        contentValues.put("id",id);
        contentValues.put("question",question);
        contentValues.put("choice1",choice1);
        contentValues.put("choice2",choice2);
        contentValues.put("choice3",choice3);
        contentValues.put("choice4",choice4);
        contentValues.put("answer",answer);
        db.insert("Comics", null, contentValues);
        db.close();
        return true;
    }
    public Cursor getData(){
        SQLiteDatabase db = this.getReadableDatabase();
        int numRows = (int)DatabaseUtils.queryNumEntries(db,Table_Name);
        int min = 1;
        int max = numRows;
        Random r = new Random();
        int id = r.nextInt(max - min + 1) + min;
        Cursor res= db.rawQuery("Select * from Comics where id = " + id + "", null);
        return res;
    }
}

}

我的Andr​​oidManifest.xml文件:

My AndroidManifest.xml file :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="course.examples.jumboquest"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="21" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".DBHelperDisplay"></activity>
</application>

</manifest>

在执行上面的code,我收到以下错误:

On executing the above code, I am getting the following error :

我寻觅了很多,发现了同样的问题很多栈溢出的联系,但它仍然没有得到解决。我是新来的这个话题。请帮我。

I have searched a lot and found many stack overflow links with same problem but still it is not resolved. I am new to this topic. Please help me.

推荐答案

尝试数据库升级到当前的方案。要做到这一点简单的增加你发送的整型参数:

Try to upgrade database to current scheme. To do this simply increment the integer parameter you send on:

public DBHelper(Context context){
    super(context, Database_Name, null, 1);
}

public DBHelper(Context context){
    super(context, Database_Name, null, 2);
}

这样一来,当前的表将被删除并重新创建,也许是错误正在发生,因为一些旧表架构的

This way, the current table will be dropped and recreated, maybe the error is occuring because of some old table schema