Android 为什么我的数据库表没有';当我使用SQLite3检查时是否显示?
我对Android Studio中的SQLite有一些问题 我已经创建了一个数据库,但无法获取我创建的表。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;
问题出在这里 这是我的
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的末尾加上“')。好了,你要做的就是卸载你的应用程序,更改数据库名称,然后重新安装。你成功了吗?