java - 将日期(TextView)添加到 SQLite 数据库中

标签 java android

我正在创建一个 SQLiteDatabase,我能够将所有 EditText 值添加到数据库中,但是当尝试添加我使用 DatePicker 查找并输入到 TextView 的日期时,应用程序崩溃了。

是否有不同的方法将 TextView 值插入 SQLiteDatabase。

主要 Activity :

public class MainActivity extends AppCompatActivity implements DatePickerDialog.OnDateSetListener {

    DatabaseHelper peopleDB;

    TextView etDate;
    Button btnAddData, btnViewData;
    EditText etName, etEmail, etAddress;

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

        peopleDB = new DatabaseHelper(this);

        etName = (EditText) findViewById(R.id.editName);
        etEmail = (EditText) findViewById(R.id.editEmail);
        etAddress = (EditText) findViewById(R.id.editAddress);
        etDate = (TextView) findViewById(R.id.textView4);
        btnAddData = (Button) findViewById(R.id.btnAddData);
        btnViewData = (Button) findViewById(R.id.btnViewData);


        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                DialogFragment datePicker = new DatePickerFragment();
                datePicker.show(getSupportFragmentManager(), "date picker");
            }
        });



        AddData();
        ViewData();

    }



    public void AddData() {
        btnAddData.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                String name = etName.getText().toString();
                String email = etEmail.getText().toString();
                String tvShow = etAddress.getText().toString();
                String date = etDate.getText().toString();

                boolean insertData = peopleDB.addData(name, email, tvShow, date);

                if (insertData == true) {
                    Toast.makeText(MainActivity.this, "Data Successfully Inserted!", Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(MainActivity.this, "Something went wrong :(.", Toast.LENGTH_LONG).show();
                }
            }
        });
    }

    @Override
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, month);
        c.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        String currentDateString = DateFormat.getDateInstance(DateFormat.FULL).format(c.getTime());

        TextView textView = (TextView) findViewById(R.id.textView4);
        textView.setText(currentDateString);
    }

    public void ViewData() {
        btnViewData.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Cursor data = peopleDB.showData();

                if(data.getCount() == 0) {
                    display("Error", "No Data Found.");
                    return;

                }
                //display message
                String datestring = etDate.getText().toString();

                StringBuffer buffer = new StringBuffer();
                while (data.moveToNext()){
                    buffer.append("ID: " + data.getString(0) + "\n");
                    buffer.append("Name: " + data.getString(1) + "\n");
                    buffer.append("Email: " + data.getString(2) + "\n");
                    buffer.append("Address: " + data.getString(3) + "\n");
                    buffer.append("Date: " + data.getString(4) + "\n");


                }
                display("All Stored Data:", buffer.toString());

            }
        });
    }

数据库助手 Activity :

public class DatabaseHelper extends SQLiteOpenHelper {

    public static final String DATABASE_NAME = "people.db";
    public static final String TABLE_NAME = "people_table";
    public static final String COL1 = "ID";
    public static final String COL2 = "NAME";
    public static final String COL3 = "EMAIL";
    public static final String COL4 = "ADDRESS";
    public static final String COL5 = "DATE";

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        String createTable = "CREATE TABLE " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
                " NAME TEXT, EMAIL TEXT, ADDRESS TEXT)";
        db.execSQL(createTable);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }

    public  boolean addData(String name, String email, String address, String date){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COL2, name);
        contentValues.put(COL3, email);
        contentValues.put(COL4, address);
        contentValues.put(COL5, date);

        long result = db.insert(TABLE_NAME, null, contentValues);

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

    }

    public Cursor showData(){
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor data = db.rawQuery("SELECT * FROM " + TABLE_NAME, null);
        return data;
    }


}

最佳答案

我认为您没有在创建数据库语句中添加日期列,因此请在 DatabaseHelper 类中更改它

@Override 
public void onCreate(SQLiteDatabase db) {
    String createTable = "CREATE TABLE " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
            " NAME TEXT, EMAIL TEXT, ADDRESS TEXT)";
    db.execSQL(createTable);
}

@Override
public void onCreate(SQLiteDatabase db) {
    String createTable = "CREATE TABLE " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
            " NAME TEXT, EMAIL TEXT, ADDRESS TEXT , DATE DATETIME)";
    db.execSQL(createTable);
}

要获得最佳代码重构变量名称,请单击shift+F6,然后重命名

public static final String COL1 = "ID";
public static final String COL2 = "NAME";
public static final String COL3 = "EMAIL";
public static final String COL4 = "ADDRESS";
public static final String COL5 = "DATE";

public static final String COL_ID = "ID";
public static final String COL_NAME = "NAME";
public static final String COL_EMAIL = "EMAIL";
public static final String COL_ADDRESS = "ADDRESS";
public static final String COL_DATE = "DATE";

并将创建语句更改为

@Override
public void onCreate(SQLiteDatabase db) {
    String createTable = "CREATE TABLE " + TABLE_NAME + " (" +
              COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
              COL_NAME +" TEXT," +
              COL_EMAIL +" TEXT,"+
              COL_ADDRESS + " TEXT ,"+
              COL_DATE + " DATETIME)";
    db.execSQL(createTable);
}

关于java - 将日期(TextView)添加到 SQLite 数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59204680/

相关文章:

java - 如何在 jTDS 连接 url 中指定信任库和信任库密码?

java - 使用 Class<T> 和 <T extends A> 在 java 中无法进行强制转换

android - Facebook SDK WebView 不注销

Android Market 屏蔽电子邮件的生命周期

java - RecyclerView 在运行应用程序时未显示

android - 寻找新的 Android API setMediaButtonReceiver 的示例

java - 无法从 Android 中的 Web 服务解析

java - 使用 Hibernate Criteria 加入而不使用 Alias on Restriction

java - 在 java 中解析时出现 'illegal XML character' 问题

java - 如何在android中使用java制作ImageView?