近期小结--Android系统时间获取及AVD模拟GPS相关调试

本文总结了近期在Android开发中遇到的问题,包括如何准确获取系统时间以及在AVD虚拟设备上进行GPS模拟调试的步骤,同时探讨了相关BUG的排查和解决策略。
   

       GPS应用调试

近期在AVD上调试GPS应用时,获取location信息,但是往往在调试中loc是null的,因为首先需要在AVD中手动添加GPS信息,有两种手动添加方法

1、在eclipse下,windows-->open perspective-->DDMS-->Emulator control-->Manual下手动设置经纬度,并按send按钮。
2、在cmd下手动添加信息。
      (1)首先打开模拟器,然后运行cmd,输入telnet localhost 5554(注:5554是模拟器在本机的端口,具体端口号模拟器左上方有显示的),这样会出现
      Android Console: type 'help' for a list of commands OK的字样。

     如果是使用WIN7的朋友,控制台可能会提示telnet无效什么的,那是因为WIN7下默认是不出现telnet的,需要手动打开。

     具体为:[1]控制面板-->程序-->打开或关闭Windows功能,然后将Telnet服务器和Telnet客户端勾选上。[2]然后在管理工具-->服务中手动启动Telnet

     (2)使用geo命令模拟发送GPS信号:
geo fix 经度 纬度

     (3)这时就会发现在模拟器的状态栏上多了一个GPS的标志,此时就可以正常调试了


      Android系统时间的获取


     *******************************


      应用调试错误

      log如下、

    

  java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.xxx.xxx/com.xxx.xxx.   MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.xxx.xxx.MainActivity" on path: DexPathList[[zip file "/data/app/xxx.xxx.bgr-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.xxx.bgr-1, /vendor/lib, /system/lib]]

       幸好改动了不多就发现了这个问题,仔细检查了下,是因为想改下报名,于是只在AndroidManifest.xml里改了下package的名字,最后仔细看了下指定MainActivity的那行的路径因为报名改了所以一直不能加载到MainActivity所以报错了。我的原因就是如此,但是大概类似的问题可能都跟改包名类名有关吧。


 关于android系统时间的获取,可以看下这个blog,还是比较详细的。

      http://blog.youkuaiyun.com/zhanghaofor/article/details/46300649

<think>我们正在处理一个数据库迁移任务:从MySQL迁移人大金仓(Kingbase)人大金仓是一种兼容PostgreSQL的国产数据库,因此迁移策略可以借鉴PostgreSQL的迁移方法,但需要注意Kingbase特有的兼容性问题。 根据引用内容,数据库迁移通常包括两个主要方面: 1. 结构迁移:表结构、索引、约束等的迁移 2. 数据迁移:实际数据的转移 参考引用[3]中提到的方法:对于简单的建表脚本,可以直接从MSSQL复制到MySQL并尝试运行。类似地,我们可以尝试将MySQL的DDL语句在Kingbase中运行,但需要注意两者之间的语法差异。 另外,引用[5]介绍了使用sqlalchemy-migrate进行数据库迁移,这是一种基于版本控制的迁移方法,适用于长期维护的项目。但考虑到我们是从MySQL迁移Kingbase,可能更倾向于一次性迁移迁移步骤建议: 1. **结构迁移**: - 导出MySQL数据库的结构(DDL语句)。可以使用`mysqldump --no-data`选项。 - 检查并修改DDL语句以适应Kingbase的语法。特别注意: - 数据类型映射(如MySQL的`DATETIME`对应Kingbase的`TIMESTAMP`) - 自增字段(MySQL的`AUTO_INCREMENT`对应Kingbase的`SERIAL`或使用序列) - 字符串编码(确保使用UTF8) - 索引和约束的语法差异 2. **数据迁移**: - 使用`mysqldump`导出数据(可以导出为SQL文件,但注意格式兼容性),然后修改脚本中的语法使其符合Kingbase要求。 - 或者使用ETL工具(如Pentaho, Talend)或自定义脚本进行数据迁移。 3. **应用适配**: - 修改应用程序的数据库连接配置,指向Kingbase。 - 修改SQL语句中不兼容的部分(如函数、分页查询等)。Kingbase的分页使用`LIMIT`和`OFFSET`,与MySQL类似,但其他函数可能有差异。 4. **测试验证**: - 迁移后必须进行充分测试,确保数据完整性和应用功能正常。 由于人大金仓兼容PostgreSQL,我们可以参考PostgreSQL的迁移工具。例如,可以使用`pgloader`工具(支持从MySQL到PostgreSQL的迁移),然后针对Kingbase做调整。 具体步骤: **步骤1:在目标服务器安装人大金仓数据库** **步骤2:导出MySQL数据库结构** ```bash mysqldump -u [user] -p[password] --no-data [database] > schema.sql ``` **步骤3:修改schema.sql以兼容Kingbase** - 将`ENGINE=InnoDB`等存储引擎声明删除 - 将`AUTO_INCREMENT`改为`SERIAL`(或自定义序列) - 检查并修改数据类型,例如: - MySQL的`TINYINT(1)`通常对应Kingbase的`BOOLEAN` - `DATETIME` -> `TIMESTAMP` - `TEXT`类型在Kingbase中不需要指定长度 - 将反引号`改为双引号"`(Kingbase遵循SQL标准,使用双引号引用标识符) - 注释掉或删除Kingbase不支持的选项 **步骤4:导出MySQL数据** ```bash mysqldump -u [user] -p[password] --no-create-info [database] > data.sql ``` **步骤5:修改data.sql以兼容Kingbase** - 将`INSERT INTO `table` ...`中的反引号改为双引号 - 注意日期时间格式,确保Kingbase能够正确解析 - 将`\`转义字符修改为Kingbase兼容的格式(Kingbase默认使用标准SQL的转义) **步骤6:在Kingbase中创建数据库和用户** ```sql CREATE DATABASE target_db; CREATE USER target_user WITH PASSWORD &#39;password&#39;; GRANT ALL PRIVILEGES ON DATABASE target_db TO target_user; ``` **步骤7:将修改后的schema.sql和data.sql导入Kingbase** ```bash ksql -U target_user -d target_db -f schema.sql ksql -U target_user -d target_db -f data.sql ``` **替代方案:使用pgloader** 如果Kingbase完全兼容PostgreSQL(大部分情况下是),可以使用pgloader进行迁移: 1. 安装pgloader(支持从MySQL到PostgreSQL的迁移) 2. 创建迁移配置文件(例如`load.load`): ```conf LOAD DATABASE FROM mysql://[user]:[password]@[mysql_host]/[database] INTO kingbase://[user]:[password]@[kingbase_host]/[database] WITH include no drop, truncate, create no tables, create no indexes, reset no sequences ALTER SCHEMA &#39;[database]&#39; RENAME TO &#39;public&#39; ; ``` 3. 运行pgloader: ```bash pgloader load.load ``` 注意:使用pgloader前需要确保Kingbase的JDBC驱动或PostgreSQL兼容接口已配置好。 **迁移后的验证** - 检查表结构和数据量是否一致 - 运行应用程序的测试用例 - 特别关注事务、存储过程、触发器等高级特性 **注意事项**: - 人大金仓可能有自己的特殊语法或扩展,建议查阅官方文档。 - 如果遇到不兼容的SQL语句,需要手动调整。 §§相关问题§§ 1. 人大金仓数据库MySQL的主要区别是什么? 2. 使用pgloader迁移数据库时出现错误如何解决? 3. 数据库迁移后如何验证数据一致性? 4. 人大金仓数据库对存储过程和触发器的支持情况如何?</think>### 如何将 MySQL 数据库迁移人大金仓Kingbase人大金仓Kingbase)是国产关系型数据库,兼容 PostgreSQL 和 Oracle 语法。迁移过程需解决数据类型、SQL 语法和函数差异等问题,以下是具体步骤: #### 一、迁移前准备 1. **环境检查** - 确认源 MySQL 版本(如 5.7/8.0) - 安装目标 Kingbase 数据库(建议 V8 以上版本) - 安装数据传输工具:`kb_dump`(Kingbase 自带)或第三方工具如 Navicat 2. **结构分析** - 对比数据类型差异(如 MySQL 的 `DATETIME` → Kingbase 的 `TIMESTAMP`) - 检查不兼容语法: - MySQL 的 `AUTO_INCREMENT` → Kingbase 的 `SERIAL` - MySQL 的 `LIMIT` 分页 → Kingbase 的 `LIMIT/OFFSET`(语法相同) - 识别存储过程/触发器(需手动重写)[^1] #### 二、结构迁移(DDL 迁移) 1. **导出 MySQL 结构** ```bash mysqldump -u root -p --no-data dbname > schema.sql ``` 2. **转换关键语法** 手动修改 `schema.sql`: - 替换 `ENGINE=InnoDB` → 删除(Kingbase 自动管理存储) - 替换 `COMMENT` 语法 → Kingbase 的 `COMMENT ON COLUMN table.column IS &#39;注释&#39;` - 自增字段:`INT AUTO_INCREMENT` → `SERIAL PRIMARY KEY` ```sql /* 修改前 (MySQL) */ CREATE TABLE user ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) ); /* 修改后 (Kingbase) */ CREATE TABLE user ( id SERIAL PRIMARY KEY, name VARCHAR(50) ); ``` #### 三、数据迁移(DML 迁移) 1. **导出 MySQL 数据** ```bash mysqldump -u root -p --no-create-info dbname > data.sql ``` 2. **处理数据差异** - 日期格式:`&#39;2023-01-01 00:00:00&#39;` → Kingbase 支持相同格式 - 二进制数据:`BLOB` → `BYTEA` - 转义字符:移除 MySQL 特有的 `\` 转义 3. **导入 Kingbase** ```bash ksql -U kingbase_user -d dbname -f schema.sql # 导入结构 ksql -U kingbase_user -d dbname -f data.sql # 导入数据 ``` #### 四、高级对象迁移 1. **存储过程/函数** 需手动重写,例如 MySQL 的 `DATE_ADD()` → Kingbase 的 `date + interval &#39;1 day&#39;` ```sql /* MySQL */ CREATE FUNCTION add_days(d DATE, days INT) RETURNS DATE BEGIN RETURN DATE_ADD(d, INTERVAL days DAY); END /* Kingbase */ CREATE FUNCTION add_days(d DATE, days INT) RETURNS DATE AS $$ BEGIN RETURN d + (days || &#39; days&#39;)::INTERVAL; END; $$ LANGUAGE plpgsql; ``` 2. **索引优化** - 将 MySQL 的 `BTREE` 索引改为 Kingbase 默认索引(两者算法兼容) - 全文索引:MySQL 的 `FULLTEXT` → Kingbase 的 `CREATE INDEX ... USING GIN` #### 五、验证与测试 1. **数据一致性检查** ```sql -- 在 MySQLKingbase 分别执行 SELECT COUNT(*) AS total_rows, MD5(GROUP_CONCAT(id)) AS hash FROM table GROUP BY 1; ``` 2. **应用连接测试** 修改应用配置,指向 Kingbase 的 JDBC URL: ```java jdbc:kingbase8://host:port/dbname ``` #### 六、工具推荐 1. **官方工具** - Kingbase 的 `KDTS`(数据传输工具)支持可视化迁移 2. **开源方案** - 使用 `pgloader`(通过适配 PostgreSQL 兼容层迁移) ```bash pgloader mysql://user:pass@host/dbname kingbase://user:pass@host/dbname ``` > **注意**:迁移后需重点验证事务隔离级别(Kingbase 默认 `READ COMMITTED` 与 MySQL 的 `REPEATABLE READ` 不同)和字符集(推荐统一为 `UTF8`)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值