gpt4 book ai didi

android - 在 Android 上,int 作为 null 传递给数据库

转载 作者:行者123 更新时间:2023-11-30 05:11:51 25 4
gpt4 key购买 nike

似乎在 Android 上,整数在用作准备语句的参数时作为 null 传递给数据库,例如在

db.execute("INSERT INTO keycounter (key, counter) VALUES (?, ?)", key, counter);

在模拟器中,当 counter 是 Integer 和 counter 是 String 时,这个语句工作正常。

在 Android 上,当计数器是一个整数时它会失败并违反 NULL 约束,但当计数器是一个字符串时它工作正常。

这个问题可以用下面的表格来复制。

亲切的问候,弗兰斯

import com.codename1.db.Database;
import com.codename1.ui.Button;
import com.codename1.ui.Form;
import com.codename1.ui.Label;
import com.codename1.ui.layouts.BoxLayout;

public class DatabaseIntAsNullForm extends Form
{
public DatabaseIntAsNullForm()
{
super("int is passed as null to db", BoxLayout.y());
Button passInt = new Button("Pass int");
passInt.addActionListener(e -> test("key", 1));
add(passInt);
Button passStr = new Button("Pass String");
passStr.addActionListener(e -> test("key", String.valueOf(1)));
add(passStr);
}

private void test(String key, Object counter)
{
try
{
Database db = Database.openOrCreate("IntAsNull");
try
{
db.execute("CREATE TABLE keycounter (key TEXT NOT NULL PRIMARY KEY, counter INTEGER NOT NULL)");
try
{
db.execute("INSERT INTO keycounter (key, counter) VALUES (?, ?)", key, counter);
}
finally
{
db.execute("DROP TABLE keycounter");
}
}
finally
{
db.close();
}
add(new Label("Success"));
revalidate();
}
catch (Exception e)
{
e.printStackTrace();
add(new Label(e.toString()));
revalidate();
}
}
}

最佳答案

这似乎是执行方法的 Android 实现中的错误。这已在此处的 git 提交中修复:https://github.com/codenameone/CodenameOne/commit/77c9ad1b9ecf107cb49bbfb95ebe31ecc09235a8

它将在本周五(2018 年 12 月 7 日)的更新中可用。

关于android - 在 Android 上,int 作为 null 传递给数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53591953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com