如何在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();
}
答案 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?"