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

时间:2016-12-14 13:12:02

标签: java android sqlite

@After插入一行数据库再次创建。我可以解决这个问题,我可以检查数据库是android设备监视器 @After插入一行数据库再次创建。我可以解决这个问题,我可以检查数据库是android设备监视器 @After插入一行数据库再次创建。我可以解决这个问题,我可以检查数据库是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();
                }
            }
        });


    }
}

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

您每次都在调用创建新表,创建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。

重新运行app,它将重建数据库表。