为什么未在SQLite Android Studio 3.1.4或3.2.1中创建表 我在Android Studio 3.1上在家中使用此代码可以完美地工作,但是在学校中使用的3.1.4和3.2.1中,它可以使数据库而不是表可以使用。
我已经使用logcat来打印查询并将其粘贴到数据库浏览器中,它可以完美地工作并创建表。我已经在onCreate()方法中完成了多个Log.d,以确认代码正在到达该方法中,并且代码也已到达该方法中。
public class SQLCon extends SQLiteOpenHelper
{
public static final String DBNAME = "unidb.db";
public static int VER = 1;
private SQLiteDatabase db;
final String CREATEUSERTABLE = "CREATE Table IF NOT EXISTS "+
ContractSQL.User.TABLE_NAME+"( "+
ContractSQL.User.ID+" INTEGER PRIMARY KEY autoincrement,"+
ContractSQL.User.FN+" varchar(45),"+
ContractSQL.User.SN+" varchar(45),"+
ContractSQL.User.EM+" varchar(45),"+
ContractSQL.User.GROUP+" varchar(45),"+
ContractSQL.User.PW+ " varchar(45));";
public SQLCon(Context context) {
super(context, DBNAME, null, VER);
this.getWritableDatabase();
//onCreate(this.getWritableDatabase());
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.d("CREATEUSERTABLETAG", CREATEUSERTABLE);
db.execSQL(CREATEUSERTABLE);
//this.getWritableDatabase().execSQL(CREATEUSERTABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
Contract Class:
public final class ContractSQL
{
private ContractSQL(){}
public static class User
{
public static final String TABLE_NAME = "_user_";
public static final String ID = "_id_";
public static final String FN = "_fn_";
public static final String SN = "_sn_";
public static final String GROUP = "_group_";
public static final String PW = "_pw_";
public static final String EM = "_em_";
}
}
答案 0 :(得分:0)
分别将上述代码复制到SQLCon.java和ContractSQL.java中,然后使用以下活动从活动中使用代码:-
public class MainActivity extends AppCompatActivity {
AdminSQLiteOpenHelper mASQLiteHlpr;
SQLCon mSQLcon;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSQLcon = new SQLCon(this);
Cursor csr = mSQLcon.getWritableDatabase().query("sqlite_master",null,null,null,null,null,null);
while (csr.moveToNext()) {
Log.d("DBINFO", "Found Item " + csr.getString(csr.getColumnIndex("name")));
}
csr.close();
}
}
工作正常,并在日志中显示以下内容:-
10-25 19:40:37.311 1164-1164/axtest.axtest D/CREATEUSERTABLETAG: CREATE Table IF NOT EXISTS _user_( _id_ INTEGER PRIMARY KEY autoincrement,_fn_ varchar(45),_sn_ varchar(45),_em_ varchar(45),_group_ varchar(45),_pw_ varchar(45));
10-25 19:40:37.311 1164-1164/axtest.axtest D/DBINFO: Found Item android_metadata
10-25 19:40:37.311 1164-1164/axtest.axtest D/DBINFO: Found Item _user_
10-25 19:40:37.311 1164-1164/axtest.axtest D/DBINFO: Found Item sqlite_sequence
?? INTEGER PRIMARY KEY
(带有或不带有AUTOINCREMENT)会使列?? (在您的情况下为 id )特殊列 rowid 的别名。 rowid 是无符号的64位整数。最初将是1,然后通常将增加1(尽管不能保证会)。 这样,您似乎没有在使用声音方法检查表是否存在(上面的代码中包含声音方法的示例),或者由于环境不同而存在一些外部约束。
采用上面的代码查询 sqlite_master
表,将显示是否正在创建该表。