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

时间:2013-05-07 01:49:03

标签: java android sqlite

我正在尝试从EditText字段中存储一些值并将它们存储到我的SQLLite DB中。

我有以下字符串变量:

SITE_NAME _地址 _用户 _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语句中尝试使用变量的方式有问题。我做错了什么?

2 个答案:

答案 0 :(得分:1)

如果您正在使用其Javadoc位于http://developer.android.com/reference/android/database/sqlite/package-summary.html的标准Android绑定,那么您可以通过查看Javadoc以查找execSQL的重载来找到要调用的正确代码。请参阅http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#execSQL(java.lang.String,%20java.lang.Object [])。

现在,Javadoc说execSQL不能用于SELECT/INSERT/UPDATE/DELETE。相反,有三个insertXXX方法,每个方法都在ContentValues对象中获取其他数据。因此,您使用新行的数据构造该对象,看起来像Map

答案 1 :(得分:0)

这是您正在搜索的答案

sqLiteDatabase.execSQL("insert into userTable (username,name,password,email) 
values('"+username+"','"+name+"','"+password+"','"+email+"') ");