我有一个存储过程,如果出现任何问题,我想在其中回滚。为了做到这一点,我使用了这样的 EXIT HANDLER:
DECLARE EXIT HANDLER FOR sqlexception
begin
ROLLBACK;
end;
Run Code Online (Sandbox Code Playgroud)
但是这样,当我调用这个存储过程时,如果有任何错误,存储过程就会成功,我不知道实际问题是什么。我希望客户端 (php) 记录错误以便对其进行故障排除。所以我这样修改:
DECLARE EXIT HANDLER FOR sqlexception
begin
get diagnostics condition 1
@p1 = MESSAGE_TEXT;
ROLLBACK;
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = @p1;
end;
Run Code Online (Sandbox Code Playgroud)
所以现在存储过程回滚而不是抛出处理程序拦截的异常。这很酷,但有时 MESSAGE_TEXT 超过 128 个字符,在这种情况下我得到:
错误代码:1648。条件项“MESSAGE_TEXT”的数据太长
当然这个解决方案是不可接受的:
DECLARE EXIT HANDLER FOR sqlexception
begin
get diagnostics condition 1
@p1 = MESSAGE_TEXT;
ROLLBACK;
SET @p1=SUBSTRING(@p1,1,128);
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = @p1;
end;
Run Code Online (Sandbox Code Playgroud)
有什么方法可以拦截任何异常,回滚然后向客户端抛出相同的异常?非常感谢您的帮助
我正在尝试在AWS容器服务上运行Elasticsearch.这里是我关注的文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html#docker-cli-run-prod-mode
应在/etc/sysctl.conf中永久设置vm_map_max_count设置:
$ grep vm.max_map_count /etc/sysctl.conf
vm.max_map_count = 262144
要在实时系统上应用该设置,请执行以下操作:sysctl -w vm.max_map_count = 262144
有没有办法通过脚本设置vm.max_map_count?每次运行新容器时我都不想手动执行此操作.
谢谢
我有一张200万行的表.我有两个索引(状态,性别)和(生日).
我觉得很奇怪,这个查询需要3.6秒或更长时间查询N°1
SELECT COUNT(*) FROM ts_user_core
WHERE birthday BETWEEN '1980-01-01' AND '1985-01-01'
AND status='ok' AND gender='female';
Run Code Online (Sandbox Code Playgroud)
同样的:QUERY N°2
SELECT COUNT(*) FROM ts_user_core
WHERE status='ok' AND gender='female'
AND birthday between '1980-01-01' AND '1985-01-01';
Run Code Online (Sandbox Code Playgroud)
虽然此查询需要0.140秒QUERY N°3
select count(*) from ts_user_core where (birthday between '1990-01-01' and '2000-01-01');
Run Code Online (Sandbox Code Playgroud)
此查询也需要0.2秒QUERY N°4
select count(*) from ts_user_core where status='ok' and gender='female'
Run Code Online (Sandbox Code Playgroud)
我希望第一个查询更快,这种行为怎么可能?我无法处理这个查询这么多时间.
这里的结果是:

我知道我可以添加一个包含3列的新索引,但有没有办法在不为每个where子句添加索引的情况下获得更快的查询?
谢谢你的建议
我在我的移动应用程序中使用FCM.Firebase文档说明可以刷新令牌(在极少数情况下).我想测试刷新令牌后应用程序的行为方式,如何使令牌无效并触发刷新?
谢谢
我在我的应用上添加了一个共享功能,如下所示:
Intent share = new Intent(android.content.Intent.ACTION_SEND);
share.setType("text/plain");
// Add data to the intent, the receiving app will decide what to do with it.
share.putExtra(Intent.EXTRA_TEXT, toShare);
startActivity(Intent.createChooser(share, getResources().getString(R.string.share)));
Run Code Online (Sandbox Code Playgroud)
当我选择与Facebook分享时,我可以看到正确的图像预览:

只有当我与Android共享时才会发生这种情况,如果我从iOS共享,则图像预览会正确显示.你知道什么是问题吗?以下是共享链接的示例:http://pixide.org/it/share/?t = F61CAD079F61F540757E569F68332275
谢谢
在 MySQL 5.7 中,我们有 JSON_ARRAY 对象。我想执行类似于 a 的操作SELECT GROUP_CONCAT(field),但将结果放入 JSON_ARRAY 中。
我当前的查询是:
SELECT GROUP_CONCAT(name) FROM users;
Run Code Online (Sandbox Code Playgroud)
结果:约翰、迈克尔、索菲亚
我希望结果是: ["john","michael","sofia"]
我当前的解决方案是:
select @j:=json_array_append(@j,'$',name) from users
Run Code Online (Sandbox Code Playgroud)
但这非常低效,因为它会为每一行重新计算。是否有可能更有效地实现这一目标?
我有一个移动应用程序(iOS 和 Android),我需要用用户的语言翻译城市名称。我可以在移动设备或我的服务器(运行 php)上进行翻译。
截至目前,我设法翻译了国家/地区名称,这里是翻译所有可能语言的所有可能国家/地区的 java 代码:
import java.util.Locale;
public class ListCountry {
public static void main(String[] args) {
ListCountry obj = new ListCountry();
obj.getListOfCountries();
}
public void getListOfCountries() {
String[] locales = Locale.getISOCountries();
for (String countryCode : locales) {
Locale obj = new Locale("", countryCode);
String[] lingue = Locale.getISOLanguages();
for (String languageCode : lingue) {
System.out.println("Country Code = " + obj.getCountry()
+ ", Country Name = " + obj.getDisplayCountry(new Locale(languageCode)) + ", language = " + (new Locale(languageCode)).getDisplayLanguage());
} …Run Code Online (Sandbox Code Playgroud) 我正在使用wamp的笔记本电脑上进行开发,而mysql几周后运行良好。今天,在启动mysql崩溃60秒后,我在日志中发现以下错误:
2016-03-17T20:34:37.662021Z 0 [ERROR] InnoDB: Cannot allocate 4294956804 bytes of memory after 60 retries over 60 seconds. OS error: Not enough space (12). Check if you should increase the swap file or ulimits of your operating system. Note that on most 32-bit computers the process memory space is limited to 2 GB or 4 GB.
2016-03-17 21:34:37 0x2b74 InnoDB: Assertion failure in thread 11124 in file ut0ut.cc line 938
InnoDB: Failing assertion: !m_fatal
InnoDB: We intentionally generate a memory trap. …Run Code Online (Sandbox Code Playgroud) 我正在使用TabLyout,但是文本和文本下方的行之间的距离太大。

当然我已经尝试过填充,但是没有运气,有什么办法可以减少这种内部填充吗?
这是我的代码:
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="0dp"
app:tabPadding="0dp"
app:tabGravity="center"
app:tabIndicatorColor="#ddffffff"
app:tabMaxWidth="0dp"
app:tabMode="scrollable"
android:visibility="visible"
app:tabSelectedTextColor="#ffffff"
app:tabTextColor="#ffffff" />
Run Code Online (Sandbox Code Playgroud)
谢谢
几个月前我开始在 Android 上开发我的应用程序,今天我在清单中发现了以下内容:
<application android:label="@string/app_name" ...>
...
<activity android:name="com.facebook.FacebookActivity" />
...
</application>
Run Code Online (Sandbox Code Playgroud)
如您所见,有 Facebook 活动。如果您阅读此处的Facebook 文档,您可以找到:
- 将适用于 Android 的 Facebook SDK 添加到您的移动开发环境
- 获取正确配置并链接到您的 Android 应用程序的 Facebook 应用程序 ID。请参阅 - Android 入门,添加 Facebook 应用程序 ID
- 生成 Android 密钥哈希并将其添加到您的开发者资料中
- 添加 Facebook Activity 并将其包含在 AndroidManifest.xml 中
但如果您阅读入门文档,您将找不到任何对 Facebook Activity 的引用。不再需要 Facebook 活动了吗?
谢谢
mysql ×4
android ×3
facebook ×2
php ×2
arrays ×1
crash ×1
docker ×1
firebase ×1
group-concat ×1
handler ×1
icu ×1
java ×1
performance ×1
share ×1
sqlexception ×1
translation ×1