在国家 - 省份 - 城市 - 县城的跳转中出现问题在城市 - 县城这个流程出现了问题点击出现崩溃。
对问题进行搜查,发现县(县城)表已经建立,但是并没有写入表内容。
开始搜寻为什么没有写入表内容:
因为迟迟找不到问题,现在对整个代码重新分析。
1,首先创建数据库:文件放在分贝包内。
一,使用的是SQLITE数据库。用的是SQL语法。新建一个类,CoolWeatherOpenHelper,这是一个建库类(在建立数据库同时调用建库类里面的的onCreate方法建表)。由于表已经建立,这里没有语法错误。
B,在SRC新建一个模型包,用于建立市,县,省类,这些类用于歌厅和设置。
C,之后DB包内建立CoolWeatherDB类,这个类用于定义一些接下来要用到的操作,可以认为是个工具箱。
以上流程总结为数据库操作:建表 - >表的操作对象 - >数据库工具类。
以下将对CoolWeatherDB进行分析
包com.coolweather.app.db;
进口的java.util.ArrayList;
进口的java.util.List;
进口com.coolweather.app.model.City;
进口com.coolweather.app.model.County;
进口com.coolweather.app.model.Province;
进口android.content.ContentValues;
进口android.content.Context;
进口android.database.Cursor;
进口android.database.sqlite.SQLiteDatabase;
公共类CoolWeatherDB {
/ **
*数据库名
* /
公共静态最后弦乐DB_NAME =“cool_weather”;
/ **
*数据库版本
* /
公共静态最终诠释VERSION = 1;
私有静态CoolWeatherDB coolWeatherDB;
私人SQLiteDatabase分贝;
/ **
*将构造方法私有化,
* /
私人CoolWeatherDB(上下文的背景下){
CoolWeatherOpenHelper dbHelper =新CoolWeatherOpenHelper(背景下,DB_NAME,空,VERSION);
DB = dbHelper.getWritableDatabase();
}
//这个构造方法的意思是,传入建库需要的数据,定义一个建库配置dbHelper。用dbHelper调用getWritableDatabase()方法建立数据库(自动初始化的onCreate语句建表)<预NAME =“代码”级=的“java”>
</pre><p></p><pre>
/ ** *获取CoolWeatherDB的实例 * /公共同步静态CoolWeatherDB的getInstance(上下文的背景下){如果(coolWeatherDB == NULL){coolWeatherDB =新CoolWeatherDB(背景);}返回coolWeatherDB;}这里的同步我没有见过也不会用。但是应该是这个方法一次只能被一个线程调用的意思。这里的上下文我还不懂,不明白意思,以后再填。
/ **
*将省实例存储到数据库
*
* /
公共无效saveProvince(省省){
如果(省!= NULL){
ContentValues值=新ContentValues();
values.put(“province_name”,province.getProvinceName());
values.put(“PROVINCE_CODE”,province.getProvinceCode());
db.insert(“省”,空,价值);
}
}
/ **
*从数据库读取全国所有省份的信息
* /
公开名单<市> loadProvinces(){
名单<市>列表=新的ArrayList <市>();
光标光标= db.query(“省”,NULL,NULL,NULL,NULL,NULL,NULL);
如果(cursor.moveToFirst()){
做{
省省=新的省();
province.setId(cursor.getInt(cursor.getColumnIndex(“ID”)));
province.setProvinceName(cursor.getString(cursor.getColumnIndex(“province_name”)));
province.setProvinceCode(cursor.getString(cursor.getColumnIndex(“PROVINCE_CODE”)));
list.add(省);
}
的<span style =“白色空间:前”> </ SPAN>而(cursor.moveToNext());}
的<span style =“白色空间:前”> </ span>如果(指针!= NULL){cursor.close();}返回列表;}/ ** *将市实例存储到数据库 * /公共无效saveCity(市城市){如果(市!= NULL){ContentValues值=新ContentValues();values.put(“CITY_NAME”,city.getCityName());values.put(“CITY_CODE”,city.getCityCode());values.put(“province_id”,city.getProvinceId());db.insert(“城市”,空,价值);}}/ ** *从数据库读取某省下所有的城市信息 * /公开名单<市> loadCities(INT provinceId){名单<市>列表=新的ArrayList <市>();光标光标= db.query(“城市”,NULL,“province_id =?”,新的String [] {将String.valueOf(provinceId)},NULL,NULL,NULL);如果(cursor.moveToFirst()){做{市城市=新城区();city.setId(cursor.getInt(cursor.getColumnIndex(“ID”)));city.setCityName(cursor.getString(cursor.getColumnIndex(“CITY_NAME”)));city.setCityCode(cursor.getString(cursor.getColumnIndex(“CITY_CODE”)));city.setProvinceId(provinceId);list.add(市);}而(cursor.moveToNext());}如果(指针!= NULL){cursor.close();}返回列表;}/ ** *将县实例存储到数据库 * /公共无效saveCounty(县县){如果(县!= NULL){ContentValues值=新ContentValues();values.put(“COUNTY_NAME”,county.getCountyName());values.put(“county_code”,county.getCountyCode());values.put(“city_id”,county.getCityId());db.insert(“县志”,空,价值);}}/ ** *从数据库读取某城市下所有的县信息 * * /公开名单<县> loadCounties(INT cityId){名单<县>列表=新的ArrayList <县>();光标光标= db.query(“县志”,NULL,“cityId =?”,新的String [] {将String.valueOf(cityId)},NULL,NULL,NULL);如果(cursor.moveToFirst()){做{县县=新安县();county.setId(cursor.getInt(cursor.getColumnIndex(“ID”)));county.setCountyName(cursor.getString(cursor.getColumnIndex(“COUNTY_NAME”)));county.setCountyCode(cursor.getString(cursor.getColumnIndex(“county_code”)));county.setCityId(cityId);list.add(县);}而(cursor.moveToNext());}如果(指针!= NULL){cursor.close();}返回列表;}}
//好啦程序的已经找到,在上面的“?cityId =”中意思是SELECT * FROM县哪里= cityId; 这里的问题是表的列名是city_Id;这个错误找了好久..