如何只在SQLite中存储时间?

时间:2016-11-28 08:22:12

标签: android sqlite datetime android-sqlite

如何在SQLite中存储时间?

我将时间用作static final值。我一直在插入和检索SQLite的时间。

我提到了谷歌的一些网站:

  

SQLite没有为存储日期留出的存储类   和/或时间。相反,SQLite的内置日期和时间函数   能够将日期和时间存储为TEXT,REAL或INTEGER   值:

     

TEXT as ISO8601 strings(" YYYY-MM-DD HH:MM:SS.SSS")。真如朱利安   日数,11月以来格林威治中午以来的天数   公元前24,4714根据公历格里高利历。整数   as Unix Time,自1970-01-01 00:00:00 UTC以来的秒数。   应用程序可以选择在任何这些中存储日期和时间   使用内置日期格式和格式之间自由转换   时间函数。

但我很困惑。
我收到了这个错误。

  

引起:android.database.sqlite.SQLiteException:near" From&#34 ;:语法错误(代码1):,同时编译:CREATE TABLE IF NOT EXISTS proname(ImageID INTEGER,Title TEXT,From INTEGER ,到INTEGER);在android.database.sqlite.SQLiteConnection.nativePrepareStatem ent(本机方法)

public static final String[] titles = new String[]{"Akilam 360","Ipadikku Idhayam",
        "Palsuvai Thoranam"};

public static  final String[] fromtime = new String[]{"05:00:00","07:00:00","09:00:00"};

public static  final String[] totime = new String[]{"07:00:00","09:00:00","11:00:00"};


public static final Integer[] images = {R.drawable.akilam_360,
        R.drawable.ipadikku_idhayam, R.drawable.palsuvai_thoranam};

ListView listView;
List<Program> rowItems;
int  iImageId;
String sTitle,sFrom,sTo ;
SQLiteDatabase db;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.dbcon);

    Calendar c = Calendar.getInstance();

    int seconds = c.get(Calendar.SECOND);
    int minutes = c.get(Calendar.MINUTE);
    int hour = c.get(Calendar.HOUR_OF_DAY);
    String time = hour+":"+minutes+":"+seconds;

    timer = (TextView) findViewById(R.id.timer);
    timer.setText(time);


    db =openOrCreateDatabase("MukilProgram", Context.MODE_PRIVATE,null);
    db.execSQL("CREATE TABLE IF NOT EXISTS proname(ImageID INTEGER,Title TEXT,From TEXT);");

    rowItems = new ArrayList<Program>();
    for (int i = 0; i < titles.length; i++) {
        Program item = new Program(images[i], titles[i],fromtime[i],totime[i]);
        rowItems.add(item);
    }


    db.execSQL("DELETE FROM proname;");

    listView = (ListView) findViewById(listview);
    final ProgramAdapter adapter = new ProgramAdapter(this,rowItems, false);
    listView.setAdapter (adapter);


    for (int i = 0; i < adapter.getCount(); i++) {
        Program rowItem = (Program) adapter.getItem(i);

            iImageId = rowItem.getImageId();
            sTitle = rowItem.getTitle();
            sFrom = rowItem.getFromtime();
            sTo  = rowItem.getTotime();


            //sQuantity = rowItem.getQuantity();
           db.execSQL("INSERT INTO proname VALUES("+ iImageId + ",'" + sTitle + "','"+sFrom+"','"+sTo+"');");
            Toast.makeText(Databaseconnection.this, "Added to the Table..", Toast.LENGTH_SHORT).show();

    }

1 个答案:

答案 0 :(得分:0)

首先,FROM是SQLite中的保留字。不要将它用作列名。

如果你只关心&#34;从早上5点到早上7点&#34 ;,那么,自从一天开始以来,存储两个INTEGER字段&#34;秒&#34;。或分钟/小时,具体取决于您拥有的数据的粒度。

如果你需要更复杂的东西(比如,你的时间在午夜重叠,而from是一天,但to是第二天),那么,显然,你&#39 ; ll必须以不同的方式存储数据。

但是,您希望实现这取决于您,但从

开始
final String TABLE_NAME = "proname";
db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "(" 
 +  "ImageID INTEGER, " 
 +  "Title TEXT, " 
 +  "FromTime INTEGER, "
 +  "ToTime INTEGER" // I think you missed this field
 +  ");");

至于代码的其余部分 - 我真的不明白加载适配器,然后加载数据库。您可以只加载数据库,并对ListView使用CursorAdapter

除此之外,"have you tried the insert() method instead of execSQL?"