首页 > 解决方案 > 没有这样的表:reward (code 1): ,编译时:INSERT INTO reward(Reward2,Reward1,Reward3) VALUES (?,?,?)

问题描述

您好,我是一名学生,正在使用 sql 和 android studio 完成我的最后一年项目。我想创建多个表,并且尝试按照示例进行操作,但它不起作用。错误是没有创建表。这是我的编码

数据库助手.java

package com.example.multipletable;

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import androidx.annotation.Nullable;

import static android.content.ContentValues.TAG;

public class DatabaseHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "MultipleTable";
    private static final int DATABASE_VERSION = 3;
    private static final String TABLE_1 = "register";
    private static final String TABLE_2 = "activity";
    private static final String TABLE_3 = "reward";

    String table_1 = "CREATE TABLE "+TABLE_1+" (matricno TEXT PRIMARY KEY, password TEXT, email TEXT)";
    String table_2 = "CREATE TABLE "+TABLE_2+" (id INTEGER PRIMARY KEY AUTOINCREMENT, t_question TEXT, date DEFAULT CURRENT_DATE)";
    String table_3 = "CREATE TABLE "+TABLE_3+" (_id INTEGER PRIMARY KEY AUTOINCREMENT, badge_green TEXT, badge_purple TEXT, badge_maroon TEXT)";


    public DatabaseHelper(@Nullable Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL(table_1);

    }

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

        Log.d(TAG, "Current version"+db.getVersion());

        for (int version=oldVersion+1; version<=newVersion; version++) {
            switch (version) {
                case 2:
                    db.execSQL(table_2);

                case 3:
                    db.execSQL(table_3);
            }
        }





//        Log.e("DATABASE VERSION", db.getVersion()+" ");
//
//        db.execSQL("DROP TABLE IF EXISTS "+TABLE_1);
//        db.execSQL("DROP TABLE IF EXISTS "+TABLE_2);
//        db.execSQL("DROP TABLE IF EXISTS "+TABLE_3);
//
//        onCreate(db);

    }

    public boolean insert(String matNo, String pswd, String email) {
        SQLiteDatabase db_1 = this.getWritableDatabase();
        ContentValues contentValues1 = new ContentValues();
        contentValues1.put("MatricNo", matNo);
        contentValues1.put("Password", pswd);
        contentValues1.put("Email", email);
        db_1.insert(TABLE_1, null, contentValues1);
        return true;
    }

    public boolean insert2(String question) {
        SQLiteDatabase db_2 = this.getWritableDatabase();
        ContentValues contentValues2 = new ContentValues();
        contentValues2.put("Question", question);
        contentValues2.put("Date", getDate());
        db_2.insert(TABLE_2, null, contentValues2);
        return true;
    }

    public boolean insert3(String green, String purple, String maroon) {
        SQLiteDatabase db_3 = this.getWritableDatabase();
        ContentValues contentValues3 = new ContentValues();
        contentValues3.put("Reward1", green);
        contentValues3.put("Reward2", purple);
        contentValues3.put("Reward3", maroon);
        db_3.insert(TABLE_3, null, contentValues3);
        return true;
    }

    private String getDate() {
        SimpleDateFormat dateFormat = new SimpleDateFormat(
                "dd-MM-yyyy", Locale.getDefault());
        Date date = new Date();
        return dateFormat.format(date);
    }
}

MainActiviti.java

package com.example.multipletable;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    EditText name, pswd, email;
    Button btn_1;
    DatabaseHelper db;

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

        name = findViewById(R.id.txt_name);
        pswd = findViewById(R.id.txt_password);
        email = findViewById(R.id.txt_email);
        btn_1 = findViewById(R.id.btn_next_1);
        db = new DatabaseHelper(this);


        btn_1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String person = name.getText().toString();
                String pass = pswd.getText().toString();
                String mail = email.getText().toString();

                Boolean insert = db.insert(person, pass, mail);
                if (insert==true) {
                    Toast.makeText(getApplicationContext(), "Data 1 saved", Toast.LENGTH_SHORT).show();
                    Intent intent1 = new Intent(MainActivity.this, Activity2.class);
                    startActivity(intent1);
                }
                else {
                    Toast.makeText(getApplicationContext(), "Data 1 error", Toast.LENGTH_SHORT).show();
                }


            }
        });
    }
}

Activity2.java

package com.example.multipletable;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Activity2 extends AppCompatActivity {

    EditText question;
    Button btn2;
    DatabaseHelper db;

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

        question = findViewById(R.id.txt_question);
        btn2 = findViewById(R.id.btn_next_2);
        db = new DatabaseHelper(this);

        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String ques = question.getText().toString();

                Boolean insert2 = db.insert2(ques);
                if (insert2==true) {

                    Toast.makeText(getApplicationContext(), "Data 2 saved", Toast.LENGTH_SHORT).show();
                    Intent intent2 = new Intent(Activity2.this, Activity3.class);
                    startActivity(intent2);
                }
                else {
                    Toast.makeText(getApplicationContext(), "Data 2 error", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

Activity3.java

package com.example.multipletable;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Activity3 extends AppCompatActivity {

    EditText green, purple, maroon;
    Button btn3;
    DatabaseHelper db;

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

        green = findViewById(R.id.txt_green);
        purple = findViewById(R.id.txt_purple);
        maroon = findViewById(R.id.txt_maroon);
        btn3 = findViewById(R.id.btn_next_3);
        db = new DatabaseHelper(this);

        btn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String grn = green.getText().toString();
                String ppl = purple.getText().toString();
                String mrn = maroon.getText().toString();

                Boolean insert3 = db.insert3(grn, ppl, mrn);
                if (insert3==true) {
                    Toast.makeText(getApplicationContext(), "Data 3 saved", Toast.LENGTH_SHORT).show();
                    Intent intent3 = new Intent(Activity3.this, FINISH.class);
                    startActivity(intent3);
                }
                else  {
                    Toast.makeText(getApplicationContext(), "Data 3 error", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

您能帮我找到解决方案并告诉我出了什么问题吗:(

标签: javasqliteandroid-studio

解决方案


我不确定您的错误来自哪里,但是我假设它是在启动时或在您插入数据时。

我创建了如下所示的 SQL 表。

但是,我确实遇到了一个非常烦人的问题,如果我更改我的表,我的应用程序会因为找不到它而崩溃。解决方法是在将应用程序从 android studio 上传到手机之前,我需要先卸载手机上的应用程序。希望能帮助到你

public class DatabaseHelper extends SQLiteOpenHelper {

    public static final String DATABASE_NAME ="TESTING.db";
    // Database Version
    private static final int DATABASE_VERSION = 1;
    public static final String TABLE_1 = "T1";
    public static final String TABLE_2 = "T2";
    public static final String TABLE_3  = "T3";

    public static final String COL1 = "ID";
    public static final String COL2 = "D1";
    public static final String COL3 = "D2";
    public static final String COL4 = "D3";
    public static final String COL5 = "D4";
    public static final String COL6 = "D5";
    public static final String COL7 = "D6";
    public static final String COL8 = "time";


    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {

        // creating required tables
        String Created_TABLE_1= "CREATE TABLE " + TABLE_1 + " (ID INTEGER PRIMARY KEY, " +
                "D1 TEXT, D2 TEXT, D3, TEXT, D4 TEXT, D5 TEXT, D6 TEXT, TIME TEXT)";
        String Created_TABLE_2= "CREATE TABLE " + TABLE_2 + " (ID INTEGER PRIMARY KEY, " +
                "D1 TEXT, D2 TEXT, D3, TEXT, D4 TEXT, D5 TEXT, D6 TEXT, TIME TEXT)";
        String Created_TABLE_3= "CREATE TABLE " + TABLE_3 + " (ID INTEGER PRIMARY KEY, " +
                "D1 TEXT, D2 TEXT, D3, TEXT, D4 TEXT, D5 TEXT, D6 TEXT, TIME TEXT)";


        db.execSQL(Created_TABLE_1);
        db.execSQL(Created_TABLE_2);
        db.execSQL(Created_TABLE_3);

    }

PS大家注意安全


推荐阅读