Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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
Android 为什么我的数据库表没有';当我使用SQLite3检查时是否显示?_Android_Sqlite_Android Sqlite - Fatal编程技术网

Android 为什么我的数据库表没有';当我使用SQLite3检查时是否显示?

Android 为什么我的数据库表没有';当我使用SQLite3检查时是否显示?,android,sqlite,android-sqlite,Android,Sqlite,Android Sqlite,我对Android Studio中的SQLite有一些问题 我已经创建了一个数据库,但无法获取我创建的表。 问题出在这里 这是我的SQLiteOpenHelper类 public class GreenSQLiteHelper extends SQLiteOpenHelper { private static final String DB_NAME = "greencampus.db"; private static final int DB_VERSION = 2;

我对Android Studio中的SQLite有一些问题

我已经创建了一个数据库,但无法获取我创建的表。
问题出在这里

这是我的
SQLiteOpenHelper

public class GreenSQLiteHelper extends SQLiteOpenHelper {

    private static final String DB_NAME = "greencampus.db";
    private static final int DB_VERSION = 2;

    //table USER
    public static final String USER_TABLE = "USER";
    public static final String COLLUMN_USERNAME = "USERNAME";
    public static final String COLLUMN_PASSWORD = "PASWORD";
    public static final String COLLUMN_NOREK=  "NOREK";
    public static final String COLLUMN_EMAIL = "EMAIL";
    public static final String CREATE_USER =
            "CREATE TABLE" + USER_TABLE + "("
                    + COLLUMN_NOREK + "TEXT PRIMARY KEY,"
            +COLLUMN_USERNAME + "TEXT,"
            + COLLUMN_PASSWORD + "TEXT,"
            + COLLUMN_EMAIL + "TEXT)";

    //table tapcash
    public static final String TAPCASH_TABLE = "TAPCASH";
    public static final String COLLUMN_FNAME = "FNAME";
    public static final String COLLUMN_LNAME = "LNAME";
    public static final String COLLUMN_SALDOT = "SALDOT";
    public static final String COLLUMN_SALDOR = "SALDOR";
    public static final String FOREIGN_KEY_NOREK = "USER_NOREK";
    public static final String CREATE_TAPCASH =
        "CREATE TABLE" + TAPCASH_TABLE +"("
                + BaseColumns._ID + "INTEGER PRIMARY KEY AUTOINCREMENT," +
                COLLUMN_SALDOT + "TEXT, " +
                COLLUMN_SALDOR + "TEXT, " +
                COLLUMN_FNAME + "TEXT, " +
                COLLUMN_LNAME + "TEXT, " +
                FOREIGN_KEY_NOREK + "TEXT, " +
                "FOREIGN KEY(" + FOREIGN_KEY_NOREK + ") REFERENCES USER(NOREK)";


    //table bus
    public static final String BUS_TABLE = "BUS";
    public static final String COLLUMN_NOBUS = "NOBUS";
    public static final String COLLUMN_JADWAL = "JADWAL";
    public static final String FOREIGN_KEY_SHELTER ="SHELTER_ID";
    public static final String CREATE_BUS =
    "CREATE TABLE" + BUS_TABLE + "("
            + BaseColumns._ID + "INTEGER PRIMARY KEY AUTOINCREMENT," +
            COLLUMN_NOBUS + "TEXT, " +
            COLLUMN_JADWAL + "TEXT, " +
            FOREIGN_KEY_SHELTER + "INTEGER, " +
            "FOREIGN KEY(" + FOREIGN_KEY_SHELTER + ") REFERENCES SHELTER(_ID)";

    //table shelter
    public static final String SHELTER_TABLE = "SHELTER";
    public static final String COLLUMN_NAMAS = "NAMA";
    public static final String COLLUMN_KOORDINATS = "KOORDINAT";
    public static final String CREATE_SHELTER =
        "CREATE TABLE" + SHELTER_TABLE + "("
                + BaseColumns._ID + "INTEGER PRIMARY KEY AUTOINCREMENT," +
        COLLUMN_NAMAS + "TEXT, " +
        COLLUMN_KOORDINATS + "TEXT) ";

    //table map
    public static final String MAP_TABLE = "MAP";
    public static final String COLLUMN_NAMAM = "NAMA MAP";
    public static final String COLLUMN_KOORDINATM = "KOORDINAT";
    public static final String CREATE_MAP =
        "CREATE TABLE" + MAP_TABLE + "("
                + BaseColumns._ID + "INTEGER PRIMARY KEY AUTOINCREMENT," +
        COLLUMN_NAMAM + "TEXT, " +
        COLLUMN_KOORDINATM + "TEXT) ";

    public GreenSQLiteHelper(Context context){
        super(context, DB_NAME, null, DB_VERSION );
        SQLiteDatabase db = this.getWritableDatabase();
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        try{
            db.execSQL(CREATE_USER);
            db.execSQL(CREATE_TAPCASH);
            db.execSQL(CREATE_BUS);
            db.execSQL(CREATE_SHELTER);
            db.execSQL(CREATE_MAP);
        }
        catch (SQLException e){
            e.printStackTrace();
        }

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
       try {
           db.execSQL("DROP TABLE IF EXIST " + USER_TABLE);
           db.execSQL("DROP TABLE IF EXIST " + TAPCASH_TABLE);
           db.execSQL("DROP TABLE IF EXIST " + BUS_TABLE);
           db.execSQL("DROP TABLE IF EXIST " + SHELTER_TABLE);
           db.execSQL("DROP TABLE IF EXIST " + MAP_TABLE);
           onCreate(db);
       }
       catch (SQLException e){
           e.printStackTrace();
       }
    }
}
我正在使用一个数据源类

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;

public class GreenDataSource {
    private Context mContext;
    GreenSQLiteHelper mGreenSQLiteHelper;

    public GreenDataSource(Context context){
        mContext = context;
        mGreenSQLiteHelper = new GreenSQLiteHelper(context);
        SQLiteDatabase database = mGreenSQLiteHelper.getReadableDatabase();
        database.close();
    }
}
这是我的活动

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

public class RegisterActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.register_activity);
        GreenDataSource myDb =  new GreenDataSource(this);
    }
}
他们说在SQLiteOpenHelper中onCreate只运行一次。那我该怎么办


请帮帮我,我已经到了截止日期

所有的表创建命令在名称、数据类型和/或语句之间缺少必要的空格

它们需要这样重写:

public static final String CREATE_USER =
        "CREATE TABLE " + USER_TABLE + "("
                + COLLUMN_NOREK + " TEXT PRIMARY KEY,"
        +COLLUMN_USERNAME + " TEXT,"
        + COLLUMN_PASSWORD + " TEXT,"
        + COLLUMN_EMAIL + " TEXT)";

//table tapcash
public static final String TAPCASH_TABLE = "TAPCASH";
public static final String COLLUMN_FNAME = "FNAME";
public static final String COLLUMN_LNAME = "LNAME";
public static final String COLLUMN_SALDOT = "SALDOT";
public static final String COLLUMN_SALDOR = "SALDOR";
public static final String FOREIGN_KEY_NOREK = "USER_NOREK";
public static final String CREATE_TAPCASH =
    "CREATE TABLE " + TAPCASH_TABLE +"("
            + BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
            COLLUMN_SALDOT + " TEXT, " +
            COLLUMN_SALDOR + " TEXT, " +
            COLLUMN_FNAME + " TEXT, " +
            COLLUMN_LNAME + " TEXT, " +
            FOREIGN_KEY_NOREK + " TEXT, " +
            "FOREIGN KEY(" + FOREIGN_KEY_NOREK + ") REFERENCES USER(NOREK))";


//table bus
public static final String BUS_TABLE = "BUS";
public static final String COLLUMN_NOBUS = "NOBUS";
public static final String COLLUMN_JADWAL = "JADWAL";
public static final String FOREIGN_KEY_SHELTER ="SHELTER_ID";
public static final String CREATE_BUS =
"CREATE TABLE " + BUS_TABLE + "("
        + BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
        COLLUMN_NOBUS + " TEXT, " +
        COLLUMN_JADWAL + " TEXT, " +
        FOREIGN_KEY_SHELTER + " INTEGER, " +
        "FOREIGN KEY(" + FOREIGN_KEY_SHELTER + ") REFERENCES SHELTER(_ID))";

//table shelter
public static final String SHELTER_TABLE = "SHELTER";
public static final String COLLUMN_NAMAS = "NAMA";
public static final String COLLUMN_KOORDINATS = "KOORDINAT";
public static final String CREATE_SHELTER =
    "CREATE TABLE " + SHELTER_TABLE + "("
            + BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
    COLLUMN_NAMAS + " TEXT, " +
    COLLUMN_KOORDINATS + " TEXT) ";

//table map
public static final String MAP_TABLE = "MAP";
public static final String COLLUMN_NAMAM = "NAMA MAP";
public static final String COLLUMN_KOORDINATM = "KOORDINAT";
public static final String CREATE_MAP =
    "CREATE TABLE " + MAP_TABLE + "("
            + BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
    COLLUMN_NAMAM + " TEXT, " +
    COLLUMN_KOORDINATM + " TEXT) ";

创建表字符串错误,缺少一些空格。例如,在创建用户表时:

public static final String CREATE_USER =
        "CREATE TABLE" + USER_TABLE + "("
                + COLLUMN_NOREK + "TEXT PRIMARY KEY,"
        +COLLUMN_USERNAME + "TEXT,"
        + COLLUMN_PASSWORD + "TEXT,"
        + COLLUMN_EMAIL + "TEXT)";
上面的代码将包含以下字符串:

public static final String CREATE_USER = "CREATE TABLEUSER(NOREKTEXT PRIMARY KEY,USERNAMETEXT,PASSWORDTEXT,EMAILTEXT)";
正确的解决方案是:

public static final String CREATE_USER =
        "CREATE TABLE " + USER_TABLE + " ("
                + COLLUMN_NOREK + " TEXT PRIMARY KEY,"
        +COLLUMN_USERNAME + " TEXT,"
        + COLLUMN_PASSWORD + " TEXT,"
        + COLLUMN_EMAIL + " TEXT)";

我希望您能看到其中包含的空格的不同之处。再次检查SQL脚本字符串,修复它们并再次尝试运行代码。

是的,谢谢。接下来我该怎么办?他们说在SQLiteOpenHelper中onCreate只运行一次?那么我要做什么呢?卸载并重新安装你的应用程序我已经这样做了,但在我再次与adb检查后,没有数据库文件夹。那我该怎么办?现在你在哪里寻找数据库文件夹呢?adb shell->cd data/data/com.example.username.myproject/yeah对了,谢谢。接下来我该怎么办?他们说在SQLiteOpenHelper中onCreate只运行一次?那么我要做什么呢?你有两个选择:1)删除你的应用程序,然后重新安装2。)增加数据库的版本号,然后重新安装应用程序。将调用onUpgrade方法,它将使用更正的脚本创建表。我已经这样做了,但在再次与adb检查后,没有databases文件夹。那我该怎么办?现在我发现代码中还有另一个语法问题。使用外键创建表时,没有用括号关闭CREATETABLE命令。所以在CREATE_TAPCASH和CREATE_BUS strings的末尾加上“')。好了,你要做的就是卸载你的应用程序,更改数据库名称,然后重新安装。你成功了吗?