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

作者: 阴天吃鱼 | 来源:发表于2018-07-20 16:06 被阅读200次

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

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

    嗯哼·.jpg
    • 转换成.db文件,整理后分为以下几步:

      1.什么都不说,先打开sql文件,看看是个什么样子。

      2.自己建个txt文件,utf-8格式的。 复制create建表语句,以及insert的数据源。一些oracle自带函数不进行复制。随后保存为.sql文件。

      3.新建一个db文件,作为手机端操作的数据库

      4.SQLite Expert Personal 3这个软件用来进行db数据库的操作。

      5.执行.sql文件,执行语句完毕走人··

    一 、这是.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文档, 左侧的是我的.sql数据,右侧是我的txt文本。
      右键打开txt文件。

    三、复制语句

    txt.png
    • 只复制sql语句,多余的不要复制,有些函数只存在于oracle,转换的过程中运行sql会报错。蓝色我圈起来的,就是举个例子,像todate这样的,客户那边调用的函数,我们是没办法识别的。 所以还需要跟客户沟通这样的数据如何处理。


      image.png
    • 文本另存为, 编码格式为utf-8,不要整错格式了。而后缀名也记得改成.sql文件。
      这里是为了后续的执行sql。

    三、新建一个db文件

    db.png
    • 新建个db文件,打开SQLite Expert Personal 3这个软件。
      http://www.onlinedown.net/soft/117987.htm 这个地址可以下这个软件,在最下面下载。 打开刚才新建的db文件,会生成一个db数据库,但是这个数据库没有表。对的,要是的就是这样。

    四、执行sql语句

    sql.png
    • 记得右侧的栏目要选择到sql上,打开上方的sql菜单,才会让你可以点击load Sql script


      sql2.png
    • 加载选择之前的demo.sql文件,然后运行sql语句。就直接插入到表里了,效果图如下:


      over我是效果图.png

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


    以下是操作外部数据库

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

    • 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实体。

    • 把最开始新建的那个db文件,复制到assets目录下。我们需要copy一份到手机本地,操作本地的数据库文件。
      ps:SQLite软件已经把数据插入到db文件里了,直接拿桌面上的db文件就好了,不需要操作 保存阿,或者别的一些别的操作。
    在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

    相关文章

      网友评论

      • Sun_丶:写的不错,感谢博主分享

      本文标题:操作外部数据库 从.sql转换开始·

      本文链接:https://www.haomeiwen.com/subject/azzfmftx.html