繁体   English   中英

每次在android sql中插入一行后创建数据库

[英]every time creating database after insert a row in android sql

@插入行后数据库再次创建。我该如何解决此问题,我可以检查数据库是否为android设备监视器@插入行后数据库是否再次创建。我如何解决此问题,我可以检查数据库是否为android设备监视器@插入行后,数据库再次创建。如何解决此问题,我可以检查数据库是否为android设备监视器

public class DatabaseOperations extends SQLiteOpenHelper {

public static final int Database_version = 2;

public static final String Tag = DatabaseOperations.class.getSimpleName();

private static final String SQL_CREATE_ENTRIES =
        "CREATE TABLE " + TableData.TableInfo.TABLE_NAME + " (" +
                TableData.TableInfo.USER_ID + " INTEGER PRIMARY KEY," +
                TableData.TableInfo.USER_PASS +" TEXT "+ "," +
                TableData.TableInfo.USER_EMAIL +" TEXT "+ ");";

public DatabaseOperations(Context context) {
super(context, TableData.TableInfo.DATABASE_NAME, null,Database_version);
    Log.d("Tag", "Database created");
}

@Override
public void onCreate(SQLiteDatabase sdb) {
    sdb.execSQL(SQL_CREATE_ENTRIES);
    Log.d("Tag", "Table created");

}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

public void putInformation(DatabaseOperations drop, String name, String   pass, String email) {
    SQLiteDatabase SQ = drop.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(TableData.TableInfo.USER_ID, name);
    cv.put(TableData.TableInfo.USER_PASS, pass);
    cv.put(TableData.TableInfo.USER_EMAIL, email);
    long k = SQ.insert(TableData.TableInfo.TABLE_NAME, null, cv);
    Log.d("Tag", "inert a row");
 }

public Cursor getInformation(DatabaseOperations dop) {
    SQLiteDatabase SQ = dop.getReadableDatabase();
    String[] coloumns = {TableData.TableInfo.USER_ID,  TableData.TableInfo.USER_PASS, TableData.TableInfo.USER_EMAIL};
    Cursor CR = SQ.query(TableData.TableInfo.TABLE_NAME, coloumns, null, null, null, null, null);
    return CR;
}
}

RegisterActivity

public class RegisterActivity extends AppCompatActivity {


    EditText USER_NAME, USER_PASS, CON_PASS, USER_EMAIL;
    String user_name, user_pass, con_pass, user_email;
    Button REG;
    Context ctx = this;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        USER_NAME = (EditText) findViewById(R.id.reg_user);
        USER_PASS = (EditText) findViewById(R.id.reg_pass);
        CON_PASS = (EditText) findViewById(R.id.con_pass);
        USER_EMAIL = (EditText) findViewById(R.id.reg_email);
        REG = (Button) findViewById(R.id.user_reg);
        REG.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                user_name = USER_NAME.getText().toString();
                user_pass = USER_PASS.getText().toString();
                con_pass = CON_PASS.getText().toString();
                user_email = USER_EMAIL.getText().toString();
                if (!(user_pass.equals(con_pass))) {
                    Toast.makeText(getBaseContext(), "Password are not matching", Toast.LENGTH_LONG).show();
                    USER_NAME.setText("");
                    USER_PASS.setText("");
                    CON_PASS.setText("");
                    USER_EMAIL.setText("");
                } else {
                    DatabaseOperations DB = new DatabaseOperations(ctx);
                    DB.putInformation(DB, user_name, user_pass, user_email);
                    Toast.makeText(getBaseContext(), "Registration is suessful", Toast.LENGTH_LONG).show();
                    finish();
                }
            }
        });


    }
}

这是因为每次插入一行时都在创建表。 要解决此问题,您需要更改创建表查询“如果不存在则创建表'TABLE_NAME'” 如果创建一次,则“ IF NOT EXISTS”将限制系统再次创建数据库。

您每次都在调用创建一个新表时,创建一个DatabaseOperations实例-作为您的SQL语句“ CREATES”

SQL_CREATE_ENTRIES修改为如下所示

private static final String SQL_CREATE_ENTRIES =
        "CREATE TABLE IF NOT EXISTS  " + TableData.TableInfo.TABLE_NAME + " (" +
                TableData.TableInfo.USER_ID + + " integer primary key autoincrement, "+
                TableData.TableInfo.USER_PASS +" TEXT "+ "," +
                TableData.TableInfo.USER_EMAIL +" TEXT "+ ");";

编辑 1)我已经更新查询以包括自动增加您的主键

2)在您的onUpgrade方法中添加以下行

    db.execSQL("DROP TABLE IF EXISTS " + TableData.TableInfo.TABLE_NAME);

更改数据库版本时,这将删除该表。

接下来,将版本1更新为3。

重新运行应用程序,它将重新构建数据库表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM