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

标签 android codenameone

似乎在 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/

相关文章:

android - 使用 setUseNativeTextInput(false) 时,Android 上的 TextField 中的文本乱码;

android - 为什么 TextView.setText 会导致封闭的 ScrollView 滚动?

android - Android如何轮询NFC设备

database - Codename One 数据库打印行范围

codenameone - 代号一 - 从大图像创建小图像(并存储它)

java - Codenameone MediaPlayer 在 Android 上生成 'can' t 播放此视频的错误我如何拦截对话框以使其静默失败

android - ListView 中的 NullPointerException

android - iOS/Android 的 Mono 打开还是关闭?付费还是免费?

java - ListView 上的可点击图像

java - 从数组循环创建动态按钮时,代号一给出 java NullPointerException 错误