SQLite数据库中不会添加数据

时间:2017-05-27 23:43:19

标签: android sqlite android-sqlite

我正在创建一个应用程序,用户将在纯文本字段中放入一些信息并将其添加到数据库中。用户还可以单击“显示数据库”按钮,表格的内容将显示在屏幕上。但由于某种原因,我不能在我的数据库中添加信息。我甚至用firefoxe的sql管理器检查过。第一个是主要活动,秒是DBHelper类。提前致谢。 (如果有人想我可以发送一个压缩文件,应用程序只清理300 kb)

package com.example.pavleas.testsqlite;

import android.database.Cursor;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
//instance creation
    DBHelper movDB;
    //define 4 variables for texts and two for button
    EditText editName, editYear, editGenre, editRated;
    Button btnAdd, btnView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //new instance
        //calls constructor of DBHelper class, and in the constructor we are creating the database
        //and table
        movDB = new DBHelper(this); //argument is the context

        editName = (EditText)findViewById(R.id.editText_Name);
        editYear = (EditText)findViewById(R.id.editText_Year);
        editGenre = (EditText)findViewById(R.id.editText_Genre);
        editRated = (EditText)findViewById(R.id.editText_Rated);
        btnAdd = (Button)findViewById(R.id.button_Add);
        btnView = (Button)findViewById(R.id.button_View);
        AddValues();
        viewAll();

    }
    //after casting is done, btnAdd will add it, this is what this method does
    public void AddValues(){
        btnAdd.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        //calls adddata method using instance DBHelper class and takes values from editTexts
                       boolean isInserted = movDB.addData(editName.getText().toString(),
                                editYear.getText().toString(),
                                editGenre.getText().toString(),
                                editRated.getText().toString() );
                        if (isInserted = true)
                            Toast.makeText(MainActivity.this,"Data inserted", Toast.LENGTH_LONG).show();
                        else
                            Toast.makeText(MainActivity.this,"Data not inserted", Toast.LENGTH_LONG).show();

                    }
                }
        );
    }

    //method for calling set on click listener
    public void viewAll(){
        btnView.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                       Cursor res = movDB.getData();
                        if(res.getCount()==0) {
                            //method for showinf error
                            showMessage("Error","No data found");
                            return;
                        }

                        StringBuffer buffer = new StringBuffer();
                        //moves to the nexrt result
                        while (res.moveToNext()){
                            //take next result and store it to buffer
                            buffer.append("ID :"+res.getString(0)+"\n");//0 is index of column
                            buffer.append("MovieName :"+res.getString(1)+"\n");
                            buffer.append("YearReleased :"+res.getString(2)+"\n");
                            buffer.append("Genre :"+res.getString(3)+"\n");
                            buffer.append("Rated :"+res.getString(4)+"\n\n"); //double line to notice next data

                        }
                        //show all data
                        showMessage("Data", buffer.toString());
                    }
                }
        );
    }
    public void showMessage(String title, String Message){
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setCancelable(true);
        builder.setTitle(title);
        builder.setMessage(Message);
        builder.show();
    }
}

=============================================== =========================

package com.example.pavleas.testsqlite;

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



/**
 * Created by Pavleas on 27/5/2017.
 */

//extend using sqlite helper
public class DBHelper extends SQLiteOpenHelper {
    public static final String DATABASE_NAME = "MoviesInfo.db";  //database name
    public static final String TABLE_NAME = "MoviesData"; //table name
    //columns
    public static final String COL1 = "ID";
    public static final String COL2 = "MovieName";
    public static final String COL3 = "YearReleased";
    public static final String COL4 = "Genre";
    public static final String COL5 = "Rated";

//constructor

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        //query for table creation
        db.execSQL("create table "+ TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, MovieName TEXT," +
                " YearReleased INTEGER, GENRE TEXT, RATED TEXT); " );

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //drops table if it already exists
        db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
        onCreate(db);
    }
    //method to insert data
    // call function which creats the database.
    public boolean addData(String name, String year, String genre, String rated){
        SQLiteDatabase db = this.getWritableDatabase();
        //instance of our class called content value
        ContentValues contentValues = new ContentValues();
        contentValues.put(COL2, name);
        contentValues.put(COL3, year);
        contentValues.put(COL4, genre);
        contentValues.put(COL5, rated);
        //using db instance we insert data
        //if data is not be insurted, ,method will return -1, so i defined it as long
        long result = db.insert(TABLE_NAME,null ,contentValues);
        if (result == -1)
            return false;
        else
            return true;
    }
//for displaying data
    public Cursor getData(){
        SQLiteDatabase db = this.getWritableDatabase();
        //instance of cursor class
        Cursor res = db.rawQuery("select * from "+TABLE_NAME,null);
        return res;

    }

}

编辑1:

05-28 04:27:21.239 4006-4006/? I/art: Not late-enabling -Xcheck:jni (already on)
05-28 04:27:21.317 4006-4006/com.example.pavleas.testsqlite W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/app/com.example.pavleas.testsqlite-2/split_lib_dependencies_apk.apk --oat-file=/data/dalvik-cache/x86/data@app@com.example.pavleas.testsqlite-2@split_lib_dependencies_apk.apk@classes.dex) because non-0 exit status
05-28 04:27:21.497 4006-4006/com.example.pavleas.testsqlite W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/app/com.example.pavleas.testsqlite-2/split_lib_slice_0_apk.apk --oat-file=/data/dalvik-cache/x86/data@app@com.example.pavleas.testsqlite-2@split_lib_slice_0_apk.apk@classes.dex) because non-0 exit status
05-28 04:27:21.537 4006-4006/com.example.pavleas.testsqlite W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/app/com.example.pavleas.testsqlite-2/split_lib_slice_1_apk.apk --oat-file=/data/dalvik-cache/x86/data@app@com.example.pavleas.testsqlite-2@split_lib_slice_1_apk.apk@classes.dex) because non-0 exit status
05-28 04:27:21.555 4006-4006/com.example.pavleas.testsqlite W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/app/com.example.pavleas.testsqlite-2/split_lib_slice_2_apk.apk --oat-file=/data/dalvik-cache/x86/data@app@com.example.pavleas.testsqlite-2@split_lib_slice_2_apk.apk@classes.dex) because non-0 exit status
05-28 04:27:21.593 4006-4006/com.example.pavleas.testsqlite W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/app/com.example.pavleas.testsqlite-2/split_lib_slice_3_apk.apk --oat-file=/data/dalvik-cache/x86/data@app@com.example.pavleas.testsqlite-2@split_lib_slice_3_apk.apk@classes.dex) because non-0 exit status
05-28 04:27:21.615 4006-4006/com.example.pavleas.testsqlite W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/app/com.example.pavleas.testsqlite-2/split_lib_slice_4_apk.apk --oat-file=/data/dalvik-cache/x86/data@app@com.example.pavleas.testsqlite-2@split_lib_slice_4_apk.apk@classes.dex) because non-0 exit status
05-28 04:27:21.646 4006-4006/com.example.pavleas.testsqlite W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/app/com.example.pavleas.testsqlite-2/split_lib_slice_5_apk.apk --oat-file=/data/dalvik-cache/x86/data@app@com.example.pavleas.testsqlite-2@split_lib_slice_5_apk.apk@classes.dex) because non-0 exit status
05-28 04:27:21.667 4006-4006/com.example.pavleas.testsqlite W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/app/com.example.pavleas.testsqlite-2/split_lib_slice_6_apk.apk --oat-file=/data/dalvik-cache/x86/data@app@com.example.pavleas.testsqlite-2@split_lib_slice_6_apk.apk@classes.dex) because non-0 exit status
05-28 04:27:21.685 4006-4006/com.example.pavleas.testsqlite W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/app/com.example.pavleas.testsqlite-2/split_lib_slice_7_apk.apk --oat-file=/data/dalvik-cache/x86/data@app@com.example.pavleas.testsqlite-2@split_lib_slice_7_apk.apk@classes.dex) because non-0 exit status
05-28 04:27:21.712 4006-4006/com.example.pavleas.testsqlite W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/app/com.example.pavleas.testsqlite-2/split_lib_slice_8_apk.apk --oat-file=/data/dalvik-cache/x86/data@app@com.example.pavleas.testsqlite-2@split_lib_slice_8_apk.apk@classes.dex) because non-0 exit status
05-28 04:27:21.732 4006-4006/com.example.pavleas.testsqlite W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/app/com.example.pavleas.testsqlite-2/split_lib_slice_9_apk.apk --oat-file=/data/dalvik-cache/x86/data@app@com.example.pavleas.testsqlite-2@split_lib_slice_9_apk.apk@classes.dex) because non-0 exit status
05-28 04:27:21.734 4006-4006/com.example.pavleas.testsqlite W/System: ClassLoader referenced unknown path: /data/app/com.example.pavleas.testsqlite-2/lib/x86
05-28 04:27:21.736 4006-4006/com.example.pavleas.testsqlite I/InstantRun: starting instant run server: is main process
05-28 04:27:21.858 4006-4006/com.example.pavleas.testsqlite W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
05-28 04:27:22.210 4006-4062/com.example.pavleas.testsqlite D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true

                                                                              [ 05-28 04:27:22.213  4006: 4006 D/         ]
                                                                              HostConnection::get() New Host Connection established 0xaa995180, tid 4006


                                                                              [ 05-28 04:27:22.261  4006: 4062 D/         ]
                                                                              HostConnection::get() New Host Connection established 0xac3d2c00, tid 4062
05-28 04:27:22.267 4006-4062/com.example.pavleas.testsqlite I/OpenGLRenderer: Initialized EGL, version 1.4
05-28 04:27:22.267 4006-4062/com.example.pavleas.testsqlite W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
05-28 04:27:22.421 4006-4006/com.example.pavleas.testsqlite W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
05-28 04:27:42.727 4006-4006/com.example.pavleas.testsqlite E/SQLiteLog: (1) table MoviesData has no column named MovieName
05-28 04:27:42.729 4006-4006/com.example.pavleas.testsqlite E/SQLiteDatabase: Error inserting Rated=r MovieName=logan Genre=action YearReleased=2017
                                                                              android.database.sqlite.SQLiteException: table MoviesData has no column named MovieName (code 1): , while compiling: INSERT INTO MoviesData(Rated,MovieName,Genre,YearReleased) VALUES (?,?,?,?)
                                                                                  at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
                                                                                  at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887)
                                                                                  at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498)
                                                                                  at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
                                                                                  at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
                                                                                  at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
                                                                                  at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469)
                                                                                  at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341)
                                                                                  at com.example.pavleas.testsqlite.DBHelper.addData(DBHelper.java:58)
                                                                                  at com.example.pavleas.testsqlite.MainActivity$1.onClick(MainActivity.java:46)
                                                                                  at android.view.View.performClick(View.java:5198)
                                                                                  at android.view.View$PerformClick.run(View.java:21147)
                                                                                  at android.os.Handler.handleCallback(Handler.java:739)
                                                                                  at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                  at android.os.Looper.loop(Looper.java:148)
                                                                                  at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                                  at java.lang.reflect.Method.invoke(Native Method)
                                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
05-28 04:27:42.853 4006-4062/com.example.pavleas.testsqlite V/RenderScript: 0xa26bb000 Launching thread(s), CPUs 2
05-28 04:27:46.258 4006-4062/com.example.pavleas.testsqlite E/Surface: getSlotFromBufferLocked: unknown buffer: 0xaa9affe0

1 个答案:

答案 0 :(得分:0)

  

android.database.sqlite.SQLiteException:表MoviesData没有   名为MovieName的列(代码1):,在编译时:INSERT INTO   MoviesData(Rated,MovieName,Genre,YearReleased) VALUES (?,?,?,?)

#。您的错误日志表明您正在尝试将insert数据导入MoviesData表,该列为:

`Rated, MovieName, Genre, YearReleased`

但是在你的create table语句中,你使用的列是不同的:

`MovieName, YearReleased, GENRE, RATED`

#。更新您的create table语句,如下所示:

public static final String TABLE_NAME = "MoviesData";
public static final String COL1 = "ID";
public static final String COL2 = "MovieName";
public static final String COL3 = "YearReleased";
public static final String COL4 = "Genre";
public static final String COL5 = "Rated";

public static final String CREATE_TABLE_MOVIES_DATA = "CREATE TABLE " + TABLE_NAME 
                                   + "(" + COL1 + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
                                   + COL2 + " TEXT, " + COL3 + " INTEGER, " 
                                   + COL4 " TEXT, " + COL5 + " TEXT " + ")";

@Override
public void onCreate(SQLiteDatabase db) {
    //query for table creation
    db.execSQL(CREATE_TABLE_MOVIES_DATA);
}

#。 Uninstall您的申请和Re-install。希望这会起作用〜