建数据库,新建一个JAVA工程,生成主类,数据库的表字符创建,点击项目右击,运行,就会在先前建的mian下Java-gen文件夹下文件
public class ExampleGenerator { public static void main(String[] args) throws Exception { // 正如你所见的,你创建了一个用于添加实体(Entity)的模式(Schema)对象。 // 两个参数分别代表:数据库版本号与自动生成代码的包路径。 Schema schema = new Schema(1, "me.greendao"); // 当然,如果你愿意,你也可以分别指定生成的 Bean 与 DAO 类所在的目录,只要如下所示: // Schema schema = new Schema(1, "me.itangqi.bean"); // schema.setDefaultJavaPackageDao("me.itangqi.dao"); // 模式(Schema)同时也拥有两个默认的 flags,分别用来标示 entity 是否是 activie 以及是否使用 keep sections。 // schema2.enableActiveEntitiesByDefault(); // schema2.enableKeepSectionsByDefault(); // 一旦你拥有了一个 Schema 对象后,你便可以使用它添加实体(Entities)了。 addNote(schema); // 最后我们将使用 DAOGenerator 类的 generateAll() 方法自动生成代码,此处你需要根据自己的情况更改输出目录(既之前创建的 java-gen)。 // 其实,输出目录的路径可以在 build.gradle 中设置,有兴趣的朋友可以自行搜索,这里就不再详解。 new DaoGenerator().generateAll(schema, "D:\\android_studioWorkPlace\\DoFunFM\\app\\src\\main\\java-gen"); } /** * @param schema */ private static void addNote(Schema schema) { // 一个实体(类)就关联到数据库中的一张表,此处表名为「Note」(既类名) Entity note = schema.addEntity("Note"); // 你也可以重新给表命名 // note.setTableName("NODE"); // greenDAO 会自动根据实体类的属性值来创建表字段,并赋予默认值 // 接下来你便可以设置表中的字段: note.addIdProperty(); note.addStringProperty("province").notNull();//省份 // 与在 Java 中使用驼峰命名法不同,默认数据库中的命名是使用大写和下划线来分割单词的。 note.addStringProperty("fm_frequency");//电台频率 note.addStringProperty("fm_name");//电台名称 } }
在Application
public class UILApplication extends Application { public static DaoSession daoSession; public SQLiteDatabase db; public DaoMaster.DevOpenHelper helper; public DaoMaster daoMaster; @TargetApi(Build.VERSION_CODES.GINGERBREAD) @SuppressWarnings("unused") @Override public void onCreate() { if (Constants.Config.DEVELOPER_MODE && Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll().penaltyDialog().build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll().penaltyDeath().build()); } super.onCreate(); helper = new DaoMaster.DevOpenHelper(this, Constants.DB_NAME, null); db = helper.getWritableDatabase(); // 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。 daoMaster = new DaoMaster(db); daoSession = daoMaster.newSession(); } public static NoteDao getNoteDao() { // 通过 BaseApplication 类提供的 getDaoSession() 获取具体 Dao // return ((UILApplication) this.getApplicationContext()).getDaoSession().getNoteDao(); return daoSession.getNoteDao(); } public DaoSession getDaoSession() { return daoSession; } public SQLiteDatabase getDb() { return db; } }
读取文件转换数据,插图数据,查询数据
//读取TXT文件内容,存入数据库 private void readFromRaw() { NoteDao note = UILApplication.getNoteDao(); try { InputStream is = getResources().openRawResource(R.raw.fmname); String text = readTextFromSDcard(is); Log.e("读取txt文本","-------:"+text); String[] arrays = text.split("\n"); for(String s : arrays) { Log.e("---------arrays---","------------:"+s); String[] str = s.split(" +"); Note fm = new Note(); fm.setProvince(str[0]); fm.setFm_name(str[1]); fm.setFm_frequency(str[2]); note.insert(fm); for (String ss :str){ Log.e("----str-----arrays","-----------:"+ss); } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private String readTextFromSDcard(InputStream is) throws Exception { InputStreamReader reader = new InputStreamReader(is); StringBuffer buffer = new StringBuffer(""); BufferedReader bufferedReader = new BufferedReader(reader); String str; while ((str = bufferedReader.readLine()) != null) { buffer.append(str); buffer.append("\n"); } return buffer.toString(); } //查询数据电台名称 private void queryData(){ String address = PreferencesUtils.getString(MainActivity.this,"GaoDeDingWei",null); String fm_frequency = query_tv; String query_name = null; Log.e("-----查询数据--条件----","-----------:"+address+"-"+fm_frequency); if((address !=null)&&(fm_frequency !=null)){ Query query = UILApplication.getNoteDao().queryBuilder() .where(NoteDao.Properties.Fm_frequency.eq(fm_frequency)) .where(NoteDao.Properties.Province.eq(address)) .orderAsc(NoteDao.Properties.Id) .build(); // 查询结果以 List 返回 List list = query.list(); if( list.size() > 0){ for (int i=0 ;i < list.size();i++){ Note s =(Note) list.get(i); query_name = s.getFm_name(); Log.e("-----查询数据--size()----","-----------:"+query_name); } }else { } chinaMusicVoice.setText(query_name); }else { query_name = "未知"; Log.e("-----无数据=0----","-----------:"+query_name); } } //存入数据,只执行一次,若清空共享参数。。。 private void comeOne(){ int count = PreferencesUtils.getInt(MainActivity.this,"cout",0); //判断程序与第几次运行,如果是第一次运行则存入数据 if (count == 0) { readFromRaw(); } //记录共享参数 PreferencesUtils.putInt(MainActivity.this,"cout",++count); }