Android 数据未保存在Sqlite数据库中
我想将城市对象保存在数据库中。我将对象信息保存在哈希表中,并使用内容值将其插入数据库中。在终端中可以看到,表是在数据库中创建的,但在选择时没有显示任何内容,也没有保存数据。 可以从终端的SQL查询中看到。 在主活动中,保存函数由城市对象调用,城市对象应保存在数据库中。 请告知我哪里做错了?请帮忙 这是终点站Android 数据未保存在Sqlite数据库中,android,sqlite,Android,Sqlite,我想将城市对象保存在数据库中。我将对象信息保存在哈希表中,并使用内容值将其插入数据库中。在终端中可以看到,表是在数据库中创建的,但在选择时没有显示任何内容,也没有保存数据。 可以从终端的SQL查询中看到。 在主活动中,保存函数由城市对象调用,城市对象应保存在数据库中。 请告知我哪里做错了?请帮忙 这是终点站 generic_x86_arm:/data/data/com.example.worldclocktest/databases # sqlite3 Cities.db SQLite vers
generic_x86_arm:/data/data/com.example.worldclocktest/databases # sqlite3 Cities.db
SQLite version 3.28.0 2020-05-06 18:46:38
Enter ".help" for usage hints.
sqlite> .tables
City android_metadata
sqlite> .schema
CREATE TABLE android_metadata (locale TEXT);
CREATE TABLE City (Id TEXT PRIMARY KEY, Name TEXT,Time TEXT,Important INTEGER);
sqlite> SELECT * FROM City
...>
下面是实现接口的数据库类的代码
public class CItyDao implements ICityDao {
private Context context;
SQLiteDatabase db;
public CItyDao(Context ctx){
context = ctx;
}
@Override
public void save(Hashtable<String, String> attributes) {
DbHelper dbHelper= new DbHelper(context);
db = dbHelper.getWritableDatabase();
ContentValues content = new ContentValues();
Enumeration<String> keys = attributes.keys();
while (keys.hasMoreElements()){
String key = keys.nextElement();
content.put(key,attributes.get(key));
}
db.insert("City",null,content);
}
@Override
public void save(ArrayList<Hashtable<String, String>> objects) {
for(Hashtable<String,String> obj : objects){
save(obj);
}
}
@Override
public ArrayList<Hashtable<String, String>> load()
{
DbHelper dbHelper= new DbHelper(context);
db = dbHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM City",null);
ArrayList<Hashtable<String, String>> objects = new ArrayList<Hashtable<String, String>>();
while(cursor.moveToNext())
{
String [] columns = cursor.getColumnNames();
Hashtable<String, String> obj = new Hashtable<String,String>();
for(String col : columns) {
obj.put(col.toLowerCase(), cursor.getString(cursor.getColumnIndex(col)));
}
objects.add(obj);
}
return objects;
}
@Override
public Hashtable<String, String> load(String id) {
return null;
}
}
这是具有保存功能的City类
public class City implements Serializable {
private String id;
private String name;
private boolean important;
private TimeZone time;
String timevalue;
private transient ICityDao dao = null;
public City(String name,String time,ICityDao dao){
init();
this.name = name;
this.important = false;
this.dao = dao;
//this.time = time
this.time = TimeZone.getTimeZone(time);
Date date = new Date();
SimpleDateFormat df = new SimpleDateFormat("hh:mm");
df.setTimeZone(this.time);
timevalue = df.format(date);
}
private void init() {
this.id = UUID.randomUUID().toString();
}
public String getName() {
return name;
}
public void setImportant(boolean val) {
this.important = val;
}
public boolean isCity(City city) {
if (this.name.equals(city.name)) // ==?
return true;
else
return false;
}
public boolean isImportant() {
return this.important;
}
public String getTime()
{
return timevalue;
}
//Database
public void save(ICityDao dao)
{
if (this.dao == null)
{
this.dao =dao;
}
if(dao != null) {
Hashtable<String, String> row = new Hashtable<String, String>();
SimpleDateFormat df = new SimpleDateFormat("hh:mm");
row.put("id", id);
row.put("name", name);
row.put("important", important ? "true" : "false"); //Todo Learn this as well
row.put("time", timevalue);
dao.save(row);
}
}
公共类城市实现可序列化{
私有字符串id;
私有字符串名称;
私有布尔重要;
私人时区时间;
字符串时间值;
私有瞬态ICityDao=null;
公共城市(字符串名称、字符串时间、ICityDao){
init();
this.name=名称;
这一点很重要=错误;
this.dao=dao;
//这个时间
this.time=TimeZone.getTimeZone(time);
日期=新日期();
SimpleDataFormat df=新的SimpleDataFormat(“hh:mm”);
df.setTimeZone(这个时间);
时间值=df.格式(日期);
}
私有void init(){
this.id=UUID.randomUUID().toString();
}
公共字符串getName(){
返回名称;
}
公共void setImportant(布尔值){
this.important=val;
}
公共城市(城市){
如果(this.name.equals(city.name))//=?
返回true;
其他的
返回false;
}
公共布尔值是重要的(){
归还这个。重要的;
}
公共字符串getTime()
{
返回时间值;
}
//数据库
公共作废保存(ICityDao)
{
if(this.dao==null)
{
this.dao=dao;
}
if(dao!=null){
Hashtable行=新的Hashtable();
SimpleDataFormat df=新的SimpleDataFormat(“hh:mm”);
行。放置(“id”,id);
行。放置(“名称”,名称);
row.put(“重要的”,重要的?:“真的”:“假的”);//也要学习这个
row.put(“时间”,时间值);
保存(行);
}
}
sqlite>SELECT*FROM City…>
正在等待更多输入,因为您尚未完成该语句。请使用SELECT*FROM City;
即分号来完成该语句/命令。
public class City implements Serializable {
private String id;
private String name;
private boolean important;
private TimeZone time;
String timevalue;
private transient ICityDao dao = null;
public City(String name,String time,ICityDao dao){
init();
this.name = name;
this.important = false;
this.dao = dao;
//this.time = time
this.time = TimeZone.getTimeZone(time);
Date date = new Date();
SimpleDateFormat df = new SimpleDateFormat("hh:mm");
df.setTimeZone(this.time);
timevalue = df.format(date);
}
private void init() {
this.id = UUID.randomUUID().toString();
}
public String getName() {
return name;
}
public void setImportant(boolean val) {
this.important = val;
}
public boolean isCity(City city) {
if (this.name.equals(city.name)) // ==?
return true;
else
return false;
}
public boolean isImportant() {
return this.important;
}
public String getTime()
{
return timevalue;
}
//Database
public void save(ICityDao dao)
{
if (this.dao == null)
{
this.dao =dao;
}
if(dao != null) {
Hashtable<String, String> row = new Hashtable<String, String>();
SimpleDateFormat df = new SimpleDateFormat("hh:mm");
row.put("id", id);
row.put("name", name);
row.put("important", important ? "true" : "false"); //Todo Learn this as well
row.put("time", timevalue);
dao.save(row);
}
}