为什么表格不是在SQLite Android studio 3.1.4或3.2.1中创建的?我在家里使用这个代码在Android studio 3.1上工作得很好,但在我在学校使用的3.1.4和3.2.1中,它可以创建数据库,但不能创建表。
我已经使用logcat打印查询并将其粘贴到db浏览器中,它可以完美地工作并创建表。我在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_";
}
}发布于 2018-10-26 04:02:32
将上面的代码分别复制到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 (自动递增或不自动递增)使列??(在本例中为id)特殊列rowid的别名。rowid是一个无符号的64位整数。它最初将是1,然后通常会递增1(尽管不能保证它会递增)。
因此,您可能没有使用声音方法检查表是否存在(上面的代码中包含了声音方法的一个示例),或者由于环境不同,存在一些外部约束。
采用上面查询 sqlite_master 表的代码,将显示该表是否正在创建。
https://stackoverflow.com/questions/52988726
复制相似问题