Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的应用程序已停止工作(SQLite)_Java_Android_Sqlite_Android Sqlite - Fatal编程技术网

Java 我的应用程序已停止工作(SQLite)

Java 我的应用程序已停止工作(SQLite),java,android,sqlite,android-sqlite,Java,Android,Sqlite,Android Sqlite,我是Android开发的新手,我正在尝试使用SQLite创建一个数据库,我已经尝试了几个小时来解决这个问题,但我不知道问题出在哪里 这是Logcat中显示的内容 04-22 20:40:11.801 3134-3134/? D/AndroidRuntime: >>>>>> START com.android.internal.os.RuntimeInit uid 0 <<<<<< 04-22 20:40:11.802 313

我是Android开发的新手,我正在尝试使用SQLite创建一个数据库,我已经尝试了几个小时来解决这个问题,但我不知道问题出在哪里

这是Logcat中显示的内容

04-22 20:40:11.801 3134-3134/? D/AndroidRuntime: >>>>>> START com.android.internal.os.RuntimeInit uid 0 <<<<<<
04-22 20:40:11.802 3134-3134/? D/AndroidRuntime: CheckJNI is ON
04-22 20:40:11.813 3134-3134/? D/ICU: No timezone override file found: /data/misc/zoneinfo/current/icu/icu_tzdata.dat
04-22 20:40:11.825 3134-3134/? E/memtrack: Couldn't load memtrack module (No such file or directory)
04-22 20:40:11.825 3134-3134/? E/android.os.Debug: failed to load memtrack module: -2
04-22 20:40:11.826 3134-3134/? I/Radio-JNI: register_android_hardware_Radio DONE
04-22 20:40:11.834 3134-3134/? D/AndroidRuntime: Calling main entry com.android.commands.am.Am
04-22 20:40:11.836 1300-1816/? I/ActivityManager: Force stopping com.example.carlos.assigment appid=10057 user=0: from pid 3134
04-22 20:40:11.836 1300-1816/? I/ActivityManager: Killing 3109:com.example.carlos.assigment/u0a57 (adj 9): stop com.example.carlos.assigment
04-22 20:40:11.854 1300-1481/? W/ActivityManager: Spurious death for ProcessRecord{f73785a 0:com.example.carlos.assigment/u0a57}, curProc for 3109: null
04-22 20:40:11.858 3134-3134/? D/AndroidRuntime: Shutting down VM
04-22 20:40:11.863 1300-2975/? E/Surface: getSlotFromBufferLocked: unknown buffer: 0xa1373490
04-22 20:40:11.869 1300-1498/? W/InputMethodManagerService: Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@3e0c026 attribute=null, token = android.os.BinderProxy@f5dce74
04-22 20:40:12.043 1300-1319/? W/AppOps: Finishing op nesting under-run: uid 1000 pkg android code 24 time=0 duration=0 nesting=0
04-22 20:40:12.363 3147-3147/? D/AndroidRuntime: >>>>>> START com.android.internal.os.RuntimeInit uid 0 <<<<<<
04-22 20:40:12.364 3147-3147/? D/AndroidRuntime: CheckJNI is ON
04-22 20:40:12.372 3143-3143/? D/AndroidRuntime: >>>>>> START com.android.internal.os.RuntimeInit uid 0 <<<<<<
04-22 20:40:12.373 3143-3143/? D/AndroidRuntime: CheckJNI is ON
04-22 20:40:12.383 3143-3143/? D/ICU: No timezone override file found: /data/misc/zoneinfo/current/icu/icu_tzdata.dat
04-22 20:40:12.394 3147-3147/? D/ICU: No timezone override file found: /data/misc/zoneinfo/current/icu/icu_tzdata.dat
04-22 20:40:12.405 3143-3143/? E/memtrack: Couldn't load memtrack module (No such file or directory)
04-22 20:40:12.405 3143-3143/? E/android.os.Debug: failed to load memtrack module: -2
04-22 20:40:12.406 3143-3143/? I/Radio-JNI: register_android_hardware_Radio DONE
04-22 20:40:12.418 3147-3147/? E/memtrack: Couldn't load memtrack module (No such file or directory)
04-22 20:40:12.418 3147-3147/? E/android.os.Debug: failed to load memtrack module: -2
04-22 20:40:12.419 3147-3147/? I/Radio-JNI: register_android_hardware_Radio DONE
04-22 20:40:12.423 3143-3143/? D/AndroidRuntime: Calling main entry com.android.commands.wm.Wm
04-22 20:40:12.424 3143-3143/? D/AndroidRuntime: Shutting down VM
04-22 20:40:12.435 3147-3147/? D/AndroidRuntime: Calling main entry com.android.commands.am.Am
04-22 20:40:12.438 1300-1497/? I/ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.example.carlos.assigment/.MainActivity} from uid 0 on display 0
04-22 20:40:12.439 3143-3159/? E/art: Thread attaching while runtime is shutting down: Binder_2
04-22 20:40:12.439 3143-3159/? I/AndroidRuntime: NOTE: attach of thread 'Binder_2' failed
04-22 20:40:12.449 3147-3147/? D/AndroidRuntime: Shutting down VM
04-22 20:40:12.461 3162-3162/? I/art: Not late-enabling -Xcheck:jni (already on)
04-22 20:40:12.470 1300-1495/? I/ActivityManager: Start proc 3162:com.example.carlos.assigment/u0a57 for activity com.example.carlos.assigment/.MainActivity
04-22 20:40:12.508 3162-3162/? W/System: ClassLoader referenced unknown path: /data/app/com.example.carlos.assigment-1/lib/x86
04-22 20:40:12.545 2305-2337/? E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb4092ee0
04-22 20:40:12.585 3162-3162/? E/SQLiteLog: (1) near "TABLEtable": syntax error
04-22 20:40:12.586 3162-3162/? D/AndroidRuntime: Shutting down VM
04-22 20:40:12.586 3162-3162/? E/AndroidRuntime: FATAL EXCEPTION: main
                                                 Process: com.example.carlos.assigment, PID: 3162
                                                 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.carlos.assigment/com.example.carlos.assigment.MainActivity}: android.database.sqlite.SQLiteException: near "TABLEtable": syntax error (code 1): , while compiling: CREATE TABLEtable(Conductivity FLOATOxygen INTEGERpHFLOAT usernameSTRING PRIMARY KEY passwordTEXTmoisture INTEGER );
                                                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
                                                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                                                     at android.app.ActivityThread.-wrap11(ActivityThread.java)
                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
                                                     at android.os.Handler.dispatchMessage(Handler.java:102)
                                                     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)
                                                  Caused by: android.database.sqlite.SQLiteException: near "TABLEtable": syntax error (code 1): , while compiling: CREATE TABLEtable(Conductivity FLOATOxygen INTEGERpHFLOAT usernameSTRING PRIMARY KEY passwordTEXTmoisture INTEGER );
                                                     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.executeSql(SQLiteDatabase.java:1674)
                                                     at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1605)
                                                     at com.example.carlos.assigment.DBAdapter.onCreate(DBAdapter.java:43)
                                                     at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251)
                                                     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
                                                     at com.example.carlos.assigment.DBAdapter.databaseToString(DBAdapter.java:75)
                                                     at com.example.carlos.assigment.MainActivity.printDatabase(MainActivity.java:62)
                                                     at com.example.carlos.assigment.MainActivity.onCreate(MainActivity.java:40)
                                                     at android.app.Activity.performCreate(Activity.java:6237)
                                                     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
                                                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
                                                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                                                     at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                                                     at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                     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) 
04-22 20:40:12.587 1300-1481/? W/ActivityManager:   Force finishing activity com.example.carlos.assigment/.MainActivity
04-22 20:40:12.601 952-952/? E/EGL_emulation: tid 952: eglCreateSyncKHR(1294): error 0x3004 (EGL_BAD_ATTRIBUTE)
04-22 20:40:12.685 1300-2975/? I/OpenGLRenderer: Initialized EGL, version 1.4
04-22 20:40:12.707 1300-2975/? W/EGL_emulation: eglSurfaceAttrib not implemented
04-22 20:40:12.707 1300-2975/? W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x9c3e5960, error=EGL_SUCCESS
04-22 20:40:13.121 1300-1314/? W/ActivityManager: Activity pause timeout for ActivityRecord{4a19467 u0 com.example.carlos.assigment/.MainActivity t6 f}
04-22 20:40:13.162 2305-2337/? W/EGL_emulation: eglSurfaceAttrib not implemented
04-22 20:40:13.162 2305-2337/? W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa0975000, error=EGL_SUCCESS
这就是我执行SQL操作的地方

package com.example.carlos.assigment;

import android.content.*;
import android.database.*;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBAdapter extends SQLiteOpenHelper {



    private static final int DATA_VERSION = 1;
    private static final String DATABASE_NAME = "database.db";
    public static final String TABLE = "table";
    public static final String COLUMN_CONDUCTIVITY ="Conductivity";
    public static final String COLUMN_OXYGEN = "Oxygen";
    public static final String COLUMN_PH = "pH";
    public static final String COLUMN_USERNAME = "username";
    public static final String COLUMN_PASSWORD = "password";
    public static final String COLUMN_MOISTURE = "moisture";

    public DBAdapter(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, DATABASE_NAME, factory, DATA_VERSION);
    }

    public DBAdapter(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) {
        super(context, name, factory, version, errorHandler);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        String query = "CREATE TABLE" + TABLE + "(" +
                COLUMN_CONDUCTIVITY+ " FLOAT" +
                COLUMN_OXYGEN+ " INTEGER" +
                COLUMN_PH+ "FLOAT " +
                COLUMN_USERNAME+ "STRING PRIMARY KEY " +
                COLUMN_PASSWORD + "TEXT" +
                COLUMN_MOISTURE+ " INTEGER "+
                ");";

        db.execSQL(query);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP_TABLE_IF_EXITS" + TABLE);
        onCreate(db);
    }
    //Add a new row to the database
    public void addData(DatabaseList data){
        ContentValues values = new ContentValues();
        values.put(COLUMN_CONDUCTIVITY, data.getConductivity());

        values.put(COLUMN_OXYGEN, data.getDate());
        values.put(COLUMN_OXYGEN, data.getOxygen());
        values.put(COLUMN_PASSWORD, data.getPassword());
        values.put(COLUMN_USERNAME, data.getUsername());
        values.put(COLUMN_PH, data.getpH());

        SQLiteDatabase db = getWritableDatabase();
        db.insert(TABLE, null, values);
        db.close();
    }
    //Delete data

    public void deleteData(){
        SQLiteDatabase db = getWritableDatabase();
        db.execSQL("DROP TABLE IF EXIST, TABLE");
    }
    public String databaseToString(){

        String dbString = "";
        SQLiteDatabase db = getWritableDatabase();
        String query = "SELECT * FROM" + TABLE + "WHERE 1";
        Cursor c = db.rawQuery(query,null);
        c.moveToFirst();
        while(!c.isAfterLast()){
            if(c.getString(c.getColumnIndex("Conductivity"))!= null){
                dbString += c.getString(c.getColumnIndex(("Conductivity")));
                dbString += "\n";
            }
        }
        db.close();
        return dbString;

    }
}
这是我数据库的列表

package com.example.carlos.assigment;

/**
 * Created by Carlos on 22/04/2016.
 */
public class DatabaseList {





        private String username;
        private String password;
        private float conductivity;
        private float pH;
        private int oxygen;
        private String date;

        public DatabaseList(){}

        public DatabaseList(String username, String password, String date, int oxygen, float pH, float conductivity){
            this.conductivity = conductivity;
            this.date = date;
            this.oxygen = oxygen;
            this.password = password;
            this.pH = pH;
            this.username = username;
        }

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public float getConductivity() {
            return conductivity;
        }

        public void setConductivity(float conductivity) {
            this.conductivity = conductivity;
        }

        public float getpH() {
            return pH;
        }

        public void setpH(float pH) {
            this.pH = pH;
        }

        public int getOxygen() {
            return oxygen;
        }

        public void setOxygen(int oxygen) {
            this.oxygen = oxygen;
        }

        public String getDate() {
            return date;
        }

        public void setDate(String date) {
            this.date = date;
        }
    }
这是我的主要网站的内容布局

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.example.carlos.assigment1.MainActivity"
    tools:showIn="@layout/activity_main">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:id="@+id/textView" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/addButton"
        android:layout_marginTop="48dp"
        android:layout_below="@+id/textView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginLeft="45dp"
        android:layout_marginStart="45dp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="delete"
        android:id="@+id/deleteButton"
        android:layout_alignTop="@+id/addButton"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginRight="61dp"
        android:layout_marginEnd="61dp" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/exampleInput1"
        android:layout_above="@+id/exampleInput2"
        android:layout_toRightOf="@+id/exampleInput"
        android:layout_toEndOf="@+id/exampleInput" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/exampleInput2"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/addButton"
        android:layout_toEndOf="@+id/addButton" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/exampleInput3"
        android:layout_marginTop="13dp"
        android:layout_below="@+id/exampleInput2"
        android:layout_toRightOf="@+id/exampleInput5"
        android:layout_toEndOf="@+id/exampleInput5" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/exampleInput4"
        android:layout_below="@+id/exampleInput3"
        android:layout_toRightOf="@+id/addButton"
        android:layout_toEndOf="@+id/addButton"
        android:layout_marginTop="25dp" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/exampleInput5"
        android:layout_marginTop="16dp"
        android:layout_below="@+id/exampleInput4"
        android:layout_toLeftOf="@+id/exampleInput4"
        android:layout_toStartOf="@+id/exampleInput4" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/exampleInput"
        android:layout_above="@+id/exampletext"
        android:layout_alignRight="@+id/addButton"
        android:layout_alignEnd="@+id/addButton" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Large Text"
        android:id="@+id/exampletext"
        android:layout_alignTop="@+id/exampleInput1"
        android:layout_toRightOf="@+id/deleteButton"
        android:layout_toEndOf="@+id/deleteButton" />
</RelativeLayout>


我真的陷入了这一困境,没有什么想法了。

SQLiteOpenHelper.onCreate
中修复您的查询。缺少一些空格:

Caused by: android.database.sqlite.SQLiteException: near "TABLEtable":
   syntax error (code 1): , while compiling: 
   CREATE TABLEtable(Conductivity FLOATOxygen INTEGERpHFLOAT usernameSTRING PRIMARY KEY passwordTEXTmoisture INTEGER );

对于初学者,您需要处理create语句

String query = "CREATE TABLE " + TABLE + " (" +
                COLUMN_CONDUCTIVITY+ " FLOAT, " +
                COLUMN_OXYGEN+ " INTEGER, " +
                COLUMN_PH + " FLOAT, " +
                COLUMN_USERNAME+ " STRING PRIMARY KEY, " +
                COLUMN_PASSWORD + " TEXT," +
                COLUMN_MOISTURE+ " INTEGER "+
                ");";

记录原始查询是一个好主意,这样您就可以将它们作为SQL查询读取,这样更容易发现查询格式中的错误。

编辑如下创建表代码

 String query = "CREATE TABLE" + TABLE + "( " +
            COLUMN_CONDUCTIVITY + " FLOAT " +
            COLUMN_OXYGEN + " INTEGER " +
            COLUMN_PH + " FLOAT " +
            COLUMN_USERNAME + " STRING PRIMARY KEY " +
            COLUMN_PASSWORD + " TEXT" +
            COLUMN_MOISTURE + " INTEGER " +
            " );";

还要记住,
TABLE
是一个保留的SQL关键字,不能按原样使用。
 String query = "CREATE TABLE" + TABLE + "( " +
            COLUMN_CONDUCTIVITY + " FLOAT " +
            COLUMN_OXYGEN + " INTEGER " +
            COLUMN_PH + " FLOAT " +
            COLUMN_USERNAME + " STRING PRIMARY KEY " +
            COLUMN_PASSWORD + " TEXT" +
            COLUMN_MOISTURE + " INTEGER " +
            " );";