Android开发经验谈程序猿阵线联盟-汇总各类技术干货Android技术

操作外部数据库 从.sql转换开始·

2018-07-20  本文已影响200人  阴天吃鱼

最近楼主换了一家公司,好不习惯的说。习惯了之前公司的后台给处理数据,习惯了拿到现成的东西去添枝加叶,习惯吃饭的时候张口美女给喂...哈哈,言归正传

这几天公司给安排接手了一个项目, 客户那边提供的数据源,一顿沟通下来, 客户那边没办法直接提供android操作的数据库文件,他们是oracle数据库,所以只能导出.sql文件。 嗯,好吧, 明显需要我来处理一下数据,作为一个从来不处理后台数据的我。唉·此时的心情,如下图:

嗯哼·.jpg

一 、这是.sql数据源

set feedback off
set define off
prompt Creating XTGL_DEPARTMENT...
create table XTGL_DEPARTMENT
(
  bmid   NVARCHAR2(64),
  id     NVARCHAR2(64) not null,
  name   NVARCHAR2(64),
  parent NVARCHAR2(64),
  unit   NVARCHAR2(200),
  desr   NVARCHAR2(200)
)
;

prompt Loading XTGL_DEPARTMENT...
insert into XTGL_DEPARTMENT (bmid, id, name, parent, unit, desr)
values ('E62B4AFE556CC6AEE0', '2110135', 'name', '21101360700', '36211013600002110136075', null);
insert into XTGL_DEPARTMENT (bmid, id, name, parent, unit, desr)
values ('E62B4AFE556CC6AEE0', '21106', '公路管理局安', '21101360700', '36211013600002110136', null);
insert into XTGL_DEPARTMENT (bmid, id, name, parent, unit, desr)
values ('E62B4AFE556CC6AEE0', '211017', '公路分局', '21101360700', '36211013600002110136', null);
commit;
prompt 123 records loaded

二、txt文本的一系列操作

txt.png

三、复制语句

txt.png

三、新建一个db文件

db.png

四、执行sql语句

sql.png

以上就是转换的全过程,这样之后我就可以直接操作db文件,来进行手机端的本地数据的操作。
\n
\n


以下是操作外部数据库

我用的greendao数据库框架· 你也可以用别的,基本理论上都是一样的。话不多说,直接上代码。

app.gradle中:
apply plugin: 'org.greenrobot.greendao' // 添加应用依赖插件
 

greendao{
        schemaVersion 1 //每次新增表需要 更改数据库版本·
        daoPackage'com.hdsx.ncgl.greendb.gen'//包名下对应的green的根目录,用来greendao生成对应的Dao实例
        targetGenDir'src/main/java'
    }

   //数据库
    compile 'org.greenrobot:greendao:3.2.2'
  
//版本号 那个类添加
   classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // 添加插件 更好支持GreenDao

因为是操作的外部数据库,所以我们不需要新建表的。而是使用数据库已经存在的表,所以需要映射一下,具体操作如下:


image.png

@Entity 对应表 nameInDb映射的名称。createInDb = false,不需要在重新建表。
@Property字段 nameInDb字段映射的名称。
注意: 映射的时候,不需要自己新增Long id什么的, 需要同步 数据库表,一模一样。

操作完了之后,记得build -->>make project一下,让greendao自动生成Dao实体。

在Application 类 做的操作。
//数据库
    private static DaoSession daoSession;
    private Database db;
    private String db_name = "ncgl.db";

    /*
        数据库
     */
    private void initLoginDB() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                InputStream in = null;
                FileOutputStream out = null;
                String path = "/data/data/" + getPackageName() + "/databases/";
                File file = new File(path + db_name);
                //创建文件夹
                File filePath = new File(path);

                Log.e("数据库路径", filePath.getAbsolutePath() + "");
                if (!filePath.exists()) {
                    filePath.mkdirs();
                    try {
                        in = getAssets().open(db_name); // 从assets目录下复制
                        out = new FileOutputStream(file);
                        int length = -1;
                        byte[] buf = new byte[1024];
                        while ((length = in.read(buf)) != -1) {
                            out.write(buf, 0, length);
                        }
                        out.flush();
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        try {
                            if (in != null) in.close();
                            if (out != null) out.close();
                        } catch (IOException e1) {
                            e1.printStackTrace();
                        }
                    }
                }
                //生成daoSession对象, 操作数据的对象。
                DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(mContext, "ncgl.db");
                db = helper.getWritableDb();
                DaoMaster daoMaster = new DaoMaster(db);
                daoSession = daoMaster.newSession();
            }
        }).start();
    }

    /*
        别的页面获取对象的时候,来操作数据库
     */
    public static DaoSession getDaoSession() {
        return daoSession;
    }
使用 :
   DaoSession daoSession = BaseApplication.getDaoSession();
        //查询所有的 数据。
        List<DepartMentForm> list = daoSession.getDepartMentFormDao().queryBuilder().list();
        //查询bmid 为 xx的数据,返回当前条件的所有数据。
        daoSession.getDepartMentFormDao().queryBuilder().where(DepartMentFormDao.Properties.Bmid.eq("xx")).list();
        //模糊查询name为张某的数据,返回集合。
        daoSession.getDepartMentFormDao().queryBuilder().where(DepartMentFormDao.Properties.Name.like("张_")).list();
        

提醒别忘了加权限哦,

好了好了,可算写完了,技术太菜望见谅,我是一名又懒又菜的猿。

是我.png
上一篇下一篇

猜你喜欢

热点阅读