eclipse:Unable to execute dex: GC overhead limit exceeded

今天打包程序时,由于程序较大,eclipse一开始报Unable to execute dex: GC overhead limit exceeded或后来又报ava heap space,这两个异常意思基本一样,都是内存不够用的情况,后来从网上搜索了一下,转载原文如下:据说是因为升级了ADT缘故(好像是Android小组的回复),将最新的ADT换回之前的,或者使用Android小组(?)说的Fix了的版本就可以了(这一点我没有试验)。

其实,继续使用ADT14也是可以的,这需要修改Eclipse的配置文件,也就是网上很多人说的那样,修改Eclipse安装目录下eclipse.ini文件:

1)在文件开头添加

-vm 
D:\Program Files\Java\jre6\bin\javaw.exe

其中,D:\Program Files\Java\jre6是本人机器上JRE的路径,需要根据实际情况修改

2)搜索–launcher.XXMaxPermSize,将其下一行的

256m

改为

512m

其中,红色标出的部分可能不同的Eclipse版本,数字(256)不同。

3)搜索-vmargs

-vmargs 
-Xms40m 
-Xmx384m

-Xms40m 
-Xmx384m

改为

-Xms512m 
-Xmx1024m

并在其后加上

-XX:MaxPermSize=256m

同上,可能不同版本的Eclipse,红色标出的部分,数字(40和384)会不同。

然后重启Eclipse,编译出错的工程即可。

网上有人说这样不行,不知道是不是因为原文作者没有详细的描述怎么修改,因为在我机器上解决了这个问题^_^

### QSQL Error 1062 和 QMYSQL3 Unable to Execute Statement 的解决方案 QSQL Error 1062 通常表示在插入数据时违反了唯一性约束(Unique Constraint),即尝试插入的值已经存在于数据库中。而 QMYSQL3 Unable to Execute Statement 则可能与驱动程序配置、SQL 语句语法或数据库连接状态有关。 以下是对问题的详细分析和解决方法: #### 1. **QSQL Error 1062: Duplicate Entry** 该错误表明在执行 `INSERT` 操作时,尝试插入的数据违反了表中的唯一性约束。例如,如果某个字段被定义为 `UNIQUE` 或主键(Primary Key),则不能插入重复值。 - **检查 SQL 语句**:确保插入的值没有重复。可以通过查询数据库来验证是否存在重复值: ```sql SELECT * FROM your_table WHERE unique_column = 'value'; ``` - **修改逻辑**:在插入之前,先检查是否已存在该记录。如果存在,则更新记录;否则插入新记录。 - 示例代码: ```cpp QSqlQuery query; if (!query.exec("SELECT * FROM your_table WHERE unique_column = 'value'")) { qDebug() << "Error checking for duplicate:" << query.lastError(); } if (query.next()) { // 更新现有记录 if (!query.exec("UPDATE your_table SET column_name = 'new_value' WHERE unique_column = 'value'")) { qDebug() << "Error updating record:" << query.lastError(); } } else { // 插入新记录 if (!query.exec("INSERT INTO your_table (unique_column, column_name) VALUES ('value', 'new_value')")) { qDebug() << "Error inserting record:" << query.lastError(); } } ``` - **参考信息**:此问题通常与数据库设计相关[^5]。 --- #### 2. **QMYSQL3 Unable to Execute Statement** 此错误可能由以下原因引起: - **驱动程序未正确加载**:确保 QMYSQL 驱动已正确编译并放置在 Qt 的插件目录中。 - 检查可用驱动列表: ```cpp qDebug() << QSqlDatabase::drivers(); ``` 如果输出中不包含 `QMYSQL`,则需要重新编译驱动程序[^2]。 - 编译步骤: 1. 下载并安装 MySQL 开发库(包括头文件和库文件)。 2. 修改 `mysql.pro` 文件以匹配 MySQL 版本和路径。 3. 使用 Qt Creator 打开 `mysql.pro` 项目,执行 `qmake` 和 `build` 步骤。 4. 将生成的 `qsqlmysql.dll` 拷贝到 Qt 的插件目录(如 `plugins/sqldrivers`)。 5. 确保 `libmysql.dll` 存在于 Qt 的 `bin` 目录中。 - **SQL 语句语法错误**:检查 SQL 语句是否符合 MySQL 语法规范。 - 示例代码: ```cpp QSqlQuery query; if (!query.exec("INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2')")) { qDebug() << "Error executing statement:" << query.lastError(); } ``` - **事务未正确开启**:如果涉及事务操作,确保事务已正确开启和提交。 - 示例代码: ```cpp QSqlDatabase db = QSqlDatabase::database(); if (!db.transaction()) { qDebug() << "Error starting transaction:" << db.lastError(); } QSqlQuery query; if (!query.exec("INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2')")) { qDebug() << "Error executing statement:" << query.lastError(); db.rollback(); return; } if (!db.commit()) { qDebug() << "Error committing transaction:" << db.lastError(); } ``` - **参考信息**:此问题可能与驱动程序配置或事务管理相关[^4]。 --- ### 总结 - QSQL Error 1062 是由于插入重复值导致的,需检查唯一性约束并调整插入逻辑。 - QMYSQL3 Unable to Execute Statement 可能由驱动程序未加载、SQL 语句错误或事务管理不当引起,需逐一排查。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值