Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Android中从Java添加到SQLite数据库的日期值总是空的?_Java_Android_Sqlite_Android Sqlite - Fatal编程技术网

为什么Android中从Java添加到SQLite数据库的日期值总是空的?

为什么Android中从Java添加到SQLite数据库的日期值总是空的?,java,android,sqlite,android-sqlite,Java,Android,Sqlite,Android Sqlite,我是Android的绝对初学者。我在Android中使用date时遇到问题。现在,我将从EditText字段向一个SQLite表列插入一个值,该列是date数据库date。将其添加到数据库时,它始终为空。我的代码有什么问题 我的数据库助手类 public class DatabaseHelper extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 1; private static fin

我是Android的绝对初学者。我在Android中使用date时遇到问题。现在,我将从EditText字段向一个SQLite表列插入一个值,该列是date数据库date。将其添加到数据库时,它始终为空。我的代码有什么问题

我的数据库助手类

public class DatabaseHelper extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "todo.db";
    private static final String TABLE_NAME = "task";
    private static final String COLUMN_ID = "id";
    private static final String COLUMN_DESCRIPTION = "description";
    private static final String COLUMN_DATE ="date";
    private static final String COLUMN_DONE = "done";
    private static final String CREATE_TABLE = "CREATE TABLE "+TABLE_NAME+" ("+COLUMN_ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"+COLUMN_DESCRIPTION+" TEXT,"+
    COLUMN_DATE+" DATE,"+COLUMN_DONE+" BOOLEAN)";
    SQLiteDatabase db;

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


    @Override
    public void onCreate(SQLiteDatabase db)
    {
        this.db = db;
        db.execSQL(CREATE_TABLE);
    }

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

    public  void insertTask(Task task)
    {
        db = getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(COLUMN_DESCRIPTION,task.getDescription());
        values.put(COLUMN_DATE,task.getDate().toString());
        values.put(COLUMN_DONE,Boolean.FALSE.toString());
        db.insert(TABLE_NAME, null, values);
        db.close();
    }
}
public class DatabaseHelper extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "todo.db";
    private static final String TABLE_NAME = "task";
    private static final String COLUMN_ID = "id";
    private static final String COLUMN_DESCRIPTION = "description";
    private static final String COLUMN_DATE ="date";
    private static final String COLUMN_DONE = "done";
    private static final String CREATE_TABLE = "CREATE TABLE "+TABLE_NAME+" ("+COLUMN_ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"+COLUMN_DESCRIPTION+" TEXT,"+
    COLUMN_DATE+" DATE,"+COLUMN_DONE+" BOOLEAN)";
    SQLiteDatabase db;

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


    @Override
    public void onCreate(SQLiteDatabase db)
    {
        this.db = db;
        db.execSQL(CREATE_TABLE);
    }

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

    public  void insertTask(Task task)
    {
        db = getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(COLUMN_DESCRIPTION,task.getDescription());
        values.put(COLUMN_DATE,task.getDate().toString());
        values.put(COLUMN_DONE,Boolean.FALSE.toString());
        db.insert(TABLE_NAME, null, values);
        db.close();
    }
}
这是我在片段中的保存方法

public void saveTask()
    {
        String description = tfDescription.getText().toString();
        String date = tfDate.getText().toString();

        if(description.isEmpty())
        {
            Toast.makeText(getActivity().getBaseContext(),"Description is required",Toast.LENGTH_SHORT).show();
        }
        else if(date.isEmpty())
        {
            Toast.makeText(getActivity().getBaseContext(),"Date is required",Toast.LENGTH_SHORT).show();
        }
        else if(description.length()<getResources().getInteger(R.integer.min_description_length))
        {
            String minChar = String.valueOf(getResources().getInteger(R.integer.min_description_length));
            Toast.makeText(getActivity().getBaseContext(),"Description should be minium "+minChar+" characters",Toast.LENGTH_SHORT).show();
        }
        else{
            //check date
            SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
            boolean parseOk = false;
            Date taskDate = new Date();
            try{
                taskDate = format.parse(date);
                Task task = new Task();
                task.setDescription(description);
                task.setDate(taskDate);
                dbHelper.insertTask(task);
                parseOk = true;
            }
            catch(ParseException e)
            {
                parseOk = false;
            }

            if(parseOk)
            {
                //insert task to database
                Toast.makeText(getActivity().getBaseContext(),"Task saved",Toast.LENGTH_SHORT).show();
            }
            else{
                Toast.makeText(getActivity().getBaseContext(),"Invalid date format",Toast.LENGTH_SHORT).show();
            }
        }
    }
这是我完整的DatabaseHelper类

public class DatabaseHelper extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "todo.db";
    private static final String TABLE_NAME = "task";
    private static final String COLUMN_ID = "id";
    private static final String COLUMN_DESCRIPTION = "description";
    private static final String COLUMN_DATE ="date";
    private static final String COLUMN_DONE = "done";
    private static final String CREATE_TABLE = "CREATE TABLE "+TABLE_NAME+" ("+COLUMN_ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"+COLUMN_DESCRIPTION+" TEXT,"+
    COLUMN_DATE+" DATE,"+COLUMN_DONE+" BOOLEAN)";
    SQLiteDatabase db;

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


    @Override
    public void onCreate(SQLiteDatabase db)
    {
        this.db = db;
        db.execSQL(CREATE_TABLE);
    }

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

    public  void insertTask(Task task)
    {
        db = getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(COLUMN_DESCRIPTION,task.getDescription());
        values.put(COLUMN_DATE,task.getDate().toString());
        values.put(COLUMN_DONE,Boolean.FALSE.toString());
        db.insert(TABLE_NAME, null, values);
        db.close();
    }
}
public class DatabaseHelper extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "todo.db";
    private static final String TABLE_NAME = "task";
    private static final String COLUMN_ID = "id";
    private static final String COLUMN_DESCRIPTION = "description";
    private static final String COLUMN_DATE ="date";
    private static final String COLUMN_DONE = "done";
    private static final String CREATE_TABLE = "CREATE TABLE "+TABLE_NAME+" ("+COLUMN_ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"+COLUMN_DESCRIPTION+" TEXT,"+
    COLUMN_DATE+" DATE,"+COLUMN_DONE+" BOOLEAN)";
    SQLiteDatabase db;

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


    @Override
    public void onCreate(SQLiteDatabase db)
    {
        this.db = db;
        db.execSQL(CREATE_TABLE);
    }

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

    public  void insertTask(Task task)
    {
        db = getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(COLUMN_DESCRIPTION,task.getDescription());
        values.put(COLUMN_DATE,task.getDate().toString());
        values.put(COLUMN_DONE,Boolean.FALSE.toString());
        db.insert(TABLE_NAME, null, values);
        db.close();
    }
}

为什么我的日期值在数据库中总是空的?文本字段的输入格式是MM/dd/yyyy,表示日期。

我曾经有过这个问题,我很疯狂,我特别的问题是日期的格式。 首先,再次检查此行,并确保其具有以下值: 字符串日期=tfDate.getText.toString

如果正确,请在插入数据库之前将日期格式化为该yyyy MM dd

类似于Task类中的内容:

public String getDateStr()
{
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    String date = dateFormat.format(this.TaskDate);
    return date;
}

我试了很多方法。我试图通过将格式设置为yyyy-MM-dd来插入日期,但无法正常工作

最好的方法是:

1-将Task类的taskDate属性的数据类型转换为String,而数据库中taskDate属性的数据类型为Date。但这是一种值得推荐的方式。它工作得很好

2-将日期作为BIGINT存储在数据库中。因此,任务类属性的数据类型将很长。这也是推荐的方式

我使用了第一种选择


能否为您的表提供创建表脚本?还有一种更好的方法可以将数据库中的数据保存为毫秒。我刚刚更新了我的问题,添加了完整的数据库助手classI。我建议您阅读SQLite文档和特殊的类型格式。我建议您在SQLite中存储日期,因为它既小又简单。字符串太大了。使用Date.gettimehanks。我是个绝对的初学者,我会做的。这是有效的。为什么Sqlite不知道像mm/dd/yyyy这样的格式在php与MySq、l或.NET与MsSql一起使用?您应该阅读文档:或者回答:这工作不正常。很抱歉它插入了日期,但是没有。