Java Android Studio SQLite数据库创建不起作用?

Java Android Studio SQLite数据库创建不起作用?,java,android,database,sqlite,Java,Android,Database,Sqlite,对于Android Studio和/或Java编程,我不是一个有经验的用户。我正在从事一个项目,该项目要求应用程序使用SQLite DB 根据一些指南,我创建了一个Java类,以便在本地管理我将使用的非常特定的DB,代码如下: public class gestionedb { static final String KEY_RIGAID = "_id"; static final String KEY_EMAIL = "email"; static final String KEY_PASSW

对于Android Studio和/或Java编程,我不是一个有经验的用户。我正在从事一个项目,该项目要求应用程序使用SQLite DB

根据一些指南,我创建了一个Java类,以便在本地管理我将使用的非常特定的DB,代码如下:

public class gestionedb {
static final String KEY_RIGAID = "_id";
static final String KEY_EMAIL = "email";
static final String KEY_PASSWORD = "password";
static final String KEY_NICKNAME = "nickname";
static final String TAG = "gestionedb";
static final String DATABASE_NOME = "superchat5db";
static final String DATABASE_TABELLA = "users";
static final int DATABASE_VERSIONE = 1;

static final String DATABASE_CREAZIONE = "create table clienti (_id integer primary key autoincrement, " + "email text not null, password text not null, nickname text not null);";

final Context context;
DatabaseHelper DBHelper;
SQLiteDatabase db;

public gestionedb(Context ctx){
    this.context = ctx;
    DBHelper = new DatabaseHelper(context);
}

private static class DatabaseHelper extends SQLiteOpenHelper {
    DatabaseHelper(Context context) {
        super(context, DATABASE_NOME, null, DATABASE_VERSIONE);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        try {
            db.execSQL(DATABASE_CREAZIONE);
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.d("Test", "in onUpgrade. Old is: " + oldVersion + " New is: " + newVersion);
    }
}

public gestionedb open() throws SQLException {
    db = DBHelper.getWritableDatabase();
    return this;
}

public void close() {
    DBHelper.close();
}

public Cursor obtainallusers() {
    return db.query(DATABASE_TABELLA, new String[] {KEY_RIGAID, KEY_EMAIL, KEY_NICKNAME}, null, null, null, null, null);
}

public Cursor obtainuser(long rigaId) throws SQLException {
    Cursor mCursore = db.query(true, DATABASE_TABELLA, new String[] {KEY_RIGAID, KEY_EMAIL, KEY_NICKNAME}, KEY_RIGAID + "=" + rigaId, null, null, null, null, null);
    if (mCursore != null) {
        mCursore.moveToFirst();
    }
    return mCursore;
}

public long adduser(String email, String password, String nickname) {
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_EMAIL, email);
    initialValues.put(KEY_PASSWORD, password);
    initialValues.put(KEY_NICKNAME, nickname);
    return db.insert(DATABASE_TABELLA, null, initialValues);
}

public boolean deleteuser(long rigaId) {
    return db.delete(DATABASE_TABELLA, KEY_RIGAID + "=" + rigaId, null) > 0;
}

public boolean updatenickname(long rigaId, String nickname) {
    ContentValues args = new ContentValues();
    args.put(KEY_NICKNAME, nickname);
    return db.update(DATABASE_TABELLA, args, KEY_RIGAID + "=" + rigaId, null) > 0;
}

public boolean updatepsw(long rigaId, String password){
    ContentValues args = new ContentValues();
    args.put(KEY_PASSWORD, password);
    return db.update(DATABASE_TABELLA, args, KEY_RIGAID + "=" + rigaId, null) > 0;
}
}

当然,为了使这个类适应我想要使用的DB,我必须稍微调整变量。我使用的指南是意大利语的,因此变量的名称是意大利语的,对此表示抱歉

我决定通过从MainActivity创建一个按钮来测试所有这些,该按钮启动一个名为“ProvaDB”(TestDB)的全新活动,该活动执行以下操作:

gestionedb db = new gestionedb(this);

    db.open();
    long id = db.adduser("prova@gmail.com", "prova123", "prova1");
    id = db.adduser("prova2@gmail.com", "prova123", "prova2");
    db.close();

    db.open();
    Cursor c = db.obtainallusers();
    if (c.moveToFirst()){
        do{
            Toast.makeText(this,
                    "id: " + c.getString(0) + "\n" +
                    "Email: " + c.getString(1) + "\n" +
                    "Nickname: " + c.getString(2),
                    Toast.LENGTH_LONG).show();
        } while (c.moveToNext());
    }
    db.close();

}
它应该创建数据库并添加几个用户,然后用一个长的Toast文本列出他们。当我尝试运行应用程序时,单击按钮转到“ProvaDB”后,应用程序崩溃。查看日志,我注意到数据库丢失了,这很奇怪。我不明白这有什么不对,因为正如我前面提到的,我不是一个有经验的用户。有什么想法吗

日志的一部分:

2018-12-10 19:11:05.175 17701-17701/com.example.lorenzo.superchat5 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.lorenzo.superchat5, PID: 17701
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.lorenzo.superchat5/com.example.lorenzo.superchat5.ProvaDB}: android.database.sqlite.SQLiteException: no such table: users (code 1): , while compiling: SELECT _id, email, nickname FROM users
#################################################################
Error Code : 1 (SQLITE_ERROR)
Caused By : SQL(query) error or missing database.
    (no such table: users (code 1): , while compiling: SELECT _id, email, nickname FROM users)

非常感谢。

当您更改各种名称时,可能忘记了以下内容:

DATABASE_TABELLA = "users";
将其更改为:

DATABASE_TABELLA = "clienti";

并检查代码的其他部分,确定您可能已经硬编码了这些名称,并将它们更改为新名称。

您完全正确。。我很笨。非常感谢你。我意识到这是一个愚蠢的问题。非常感谢你。