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

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

这几天公司给安排接手了一个项目, 客户那边提供的数据源,一顿沟通下来, 客户那边没办法直接提供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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,050评论 4 370
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,538评论 1 306
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,673评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,622评论 0 218
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,047评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,974评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,129评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,893评论 0 209
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,654评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,828评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,297评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,619评论 3 262
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,326评论 3 243
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,176评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,975评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,118评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,909评论 2 278

推荐阅读更多精彩内容