java - 如何在 execSQL() 中使用变量?

标签 java android sqlite

我正在尝试获取从 EditText 字段存储的一些值并将它们存储到我的 SQLLite 数据库中。

我有以下字符串变量:

网站名称 _地址 _用户 _pass

这是我尝试使用的 Sql 命令:

SQLiteDatabase db = openOrCreateDatabase("SiteManager", MODE_PRIVATE,
                null);
        db.execSQL("CREATE TABLE IF NOT EXISTS SiteTable (Name VARCHAR, Address VARCHAR, Usernname VARCHAR, Password VARCHAR, PORT INT(4), Passive BIT);");
        db.execSQL("INSERT INTO SiteTable VALUES ('" + site_name + "','"
                + _address + "','" + _user + "','" + _pass + "'," + _port + ","
                + _passive + ");");

我正在另一个 Activity 中检查这样的值:

SQLiteDatabase db = openOrCreateDatabase("SiteManager",
                        MODE_PRIVATE, null);
                Cursor c = db.rawQuery("SELECT * FROM SiteTable", null);
                c.moveToFirst();
                Toast.makeText(this, c.getString(c.getColumnIndex("Name")),
                        Toast.LENGTH_LONG).show();
                db.close();

在调试器中,它显示 c 没有任何值,但列名在那里。所以这让我觉得我尝试在 SQL 语句中使用变量的方式有问题。我做错了什么?

最佳答案

如果您使用的是标准 Android 绑定(bind),其 Javadoc 为 here ,然后您可以通过查看 Javadoc 中的 execSQL 重载来找到要调用的正确代码。请参阅SQLiteDatabase.html#execSQL(String, Object[]) .

现在,Javadoc 表示 execSQL 不能用于 SELECT/INSERT/UPDATE/DELETE。相反,存在三个 insertXXX 方法,每个方法都在 ContentValues 对象中获取附加数据。因此,您可以使用新行的数据构造该对象,它看起来像一个 Map

关于java - 如何在 execSQL() 中使用变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16409994/

相关文章:

java - 多个入口点

java - AVL树高度方法堆栈溢出错误

java - Java 中的数字格式化

java - 使用 Drools Flow 和/或 OSWorkflow 的经验?

android - 要为 Android Activity 设置半透明背景?

android - Youtube 视频未在 android 的 webview 中加载

SQL 更新查询中的 Python 变量

android - 如何在 SQLite 中以古吉拉特语存储数据?

java - SQLite、NetBeans、EclipseLink 和 JPA - NetBeans 不断启动 Apache Derby 而不是 SQLite DB

java代码使存储过程在DAO层返回结果集