【问题标题】:mysqlite table already in database must create via code数据库中已经存在的 sqlite 表必须通过代码创建
【发布时间】:2015-06-18 22:13:31
【问题描述】:

我在 SqliteBrowser 上创建了一个表(结果),第一个代码抱怨该表不存在。插入以下代码即可:

 db.execSQL("create table Results (_id integer primary key autoincrement, Question text not null, Rights text not null, Wrongs text not null);");

但是当我使用以下代码检查数据库的数据时,数据不存在:

 public void checkTable(String table)  {
          String sqlQuery = "SELECT * FROM " + table + "" ;
    Cursor d = myDataBase.rawQuery(sqlQuery, null);
    while (d.moveToNext()) {
        Log.d("CheckTable Content:", "" + table + ":Fields:" + d.getString(1) + " " + d.getString(2) + " " + d.getString(3));

    }
}

为什么代码不能识别已经通过sqlitebrowser创建的表,为什么我又创建了表?如果 insertorthrow 工作正常,为什么我看不到表中的数据?

【问题讨论】:

    标签: android sqlite android-studio sqliteopenhelper


    【解决方案1】:

    我不知道您是否编写了创建数据库的函数,但请检查我是如何做到的: 首先创建java以在字符串中创建表

    String sqlCreate   = "CREATE TABLE Tutores       (_id INTEGER PRIMARY KEY, nombre_tutor TEXT)";
    String sqlCreate2  = "CREATE TABLE Tutorados     (_id INTEGER PRIMARY KEY, nombre_tutorado TEXT, id_tutor REFERENCES Tutores(_id))";
    
    public AgendaSqlite(Context context, String name, CursorFactory factory,int version) {
        super(context, name, factory, version);
    
    }
    

    运行sql语句在同一个java中创建

    @Override
    public void onCreate(SQLiteDatabase db) {
         //Se ejecuta la sentencia SQL de creacion de la tabla
        db.execSQL(sqlCreate);
        db.execSQL(sqlCreate2);
    }
    
    @Override
    public void onOpen(SQLiteDatabase db) {
        super.onOpen(db);
        if (!db.isReadOnly()) {
            // Enable foreign key constraints
            db.execSQL("PRAGMA foreign_keys=ON;");
        }
    }
    

    更新表格

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //eliminamos la version anterior de la tabla
        db.execSQL("DROP TABLE IF EXISTS Tutores"); 
        db.execSQL("DROP TABLE IF EXISTS Tutorados"); 
    
        //aqui creamos la nueva version de la tabla
        db.execSQL(sqlCreate);
        db.execSQL(sqlCreate2);
    
    }
    

    然后,在主活动中连接到 AgendaSqlite 或您所称的任何内容,然后输入以下代码:

    AgendaSqlite usdbh = new AgendaSqlite(this, ArchivoDB, null, 1);        
            SQLiteDatabase db = usdbh.getWritableDatabase();
    

    接下来,在一个按钮中,您可以检查数据库中是否有内容

    if(db != null)
                    {
                            //do something select, insert, etc
    
                    }
    

    希望对你有帮助,再见

    【讨论】:

    • 我已经在mysqlite浏览器中创建了表,为什么还要创建表?
    • 好吧,就像你说的:“为什么我要再次创建表?”我宁愿用 java 类而不是其他方式,所以,我建议你这样做,但这取决于你
    猜你喜欢
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 2019-09-01
    相关资源
    最近更新 更多