未在Android Studio中创建表

时间:2018-11-24 07:57:29

标签: database sqlite android-studio

我已经在这个问题上停留了一段时间了,而且我似乎无法弄清楚出什么问题了。我正在尝试创建数据库表,将值插入表中,并检查电子邮件是否已经存在。最初,至少是告诉我正在插入值,现在,该应用程序仅停止了。

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "People.db";
public static final String TABLE_NAME = "user";
public static final String COL1 = "email";
public static final String COL2 = "password";


public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, 1); 
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE " + TABLE_NAME + "(" +
    COL1 + "TEXT PRIMARYKEY," + 
    COL2 + "TEXT)");
    }

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

    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
    onCreate(db);
}
/*Inserting into database*/

  public boolean add(String email, String password) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();  
    to database
    contentValues.put(COL1, email);
    contentValues.put(COL2, password);
    long ins = db.insert(TABLE_NAME, null, contentValues);

    if (ins == -1) return false;
    else return true;
    }

    /*checking if email exist*/
    public Boolean chkemail(String email) {

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery("SELECT * from TABLE_NAME where email = ?", 
    new String[]{email});
    if (cursor.getCount() > 0) return false;
    else return true;

    }
  }

这是SignUp活动,用于插入和检查信息。

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.powell.randomeats.MainActivity;
import com.powell.randomeats.R;

public class SignUp extends AppCompatActivity {

DatabaseHelper db;
EditText email, pass, pass1;
Button sign;
boolean optionsSwitch;

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

    db = new DatabaseHelper(this);
    email = (EditText) findViewById(R.id.Email);
    pass = (EditText) findViewById(R.id.Password);
    pass1 = (EditText) findViewById(R.id.Confirm);
    sign = (Button) findViewById(R.id.Signup);


    sign.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String s1 = email.getText().toString();
            String s2 = pass.getText().toString();
            String s3 = pass1.getText().toString();
            if (s1.equals("") || s2.equals("") || s3.equals("")) {
                Toast.makeText(getApplicationContext(), "Fields are empty", 
            Toast.LENGTH_SHORT).show();

            } else {
                if (s2.equals(s3)) {
                    Boolean chkemail = db.chkemail(s1);
                    if (chkemail == true) {
                        Boolean insert = db.add(s1, s2);
                        if (insert == true) {
                            Toast.makeText(getApplicationContext(), 
                            "Registered Succesfully", 
                            Toast.LENGTH_SHORT).show();
                            Log();
                            if (optionsSwitch == true) {
                                openLog();
                            }

                        }
                    } else {
                        Toast.makeText(getApplicationContext(), "Email 
                        Already exists,", Toast.LENGTH_SHORT).show();

                    }

                } else {
                    Toast.makeText(getApplicationContext(), "Passwords do 
                not match", Toast.LENGTH_SHORT).show();
                }
            }
        }
    });


 }

public void Log() {
    optionsSwitch = true;
}

public void openLog() {
    Intent intent = new Intent(this, MainActivity.class);
    startActivity(intent);
  }

}

2 个答案:

答案 0 :(得分:0)

您的问题

我相信正在创建该表。但是,没有期望的列名。

那是由于允许空格,create语句解析为:-

mission_table

因此,表格中的列将包含emailTEXT而不是email和passwordText列,而不是password。

由于这些列不存在,当尝试使用电子邮件和密码列时,这将导致问题。

其他PRIMARYKEY无效,因此将create语句更改为

planet_id

将使用正确的列创建表,但电子邮件列不会拒绝重复的值。

因此,您需要在PRIMARY和KEY之间添加一个空格,因此创建应为:-

planet_table

建议的修复程序

您的代码可以更改为:-

planet_id

请注意,除非删除数据库或强制调用 onCreate ,否则您可以执行以下操作之一:-

  1. 删除应用程序的数据(删除数据库)。
  2. 卸载应用程序(删除数据库)。
  3. 增加数据库版本(超级调用的第四个参数,例如使用mission_table 1 更改为 2 ))(导致 onUpgrade 方法将被调用,从而删除表,然后调用 onCreate 。)

答案 1 :(得分:0)

更改此行:

Cursor cursor = db.rawQuery("SELECT * from TABLE_NAME where email = ?", new String[]{email});

Cursor cursor = db.rawQuery("SELECT * from " + TABLE_NAME + " where email = ?", new String[]{email});

,以使sql语句中的表名称为users,而不是TABLE_NAME