1
public class MyAct extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        SQLiteDatabase db = openOrCreateDatabase("MyDb",MODE_PRIVATE,null);
        db.execSQL("CREATE TABLE IF NOT EXISTS MyTab (Month INT(2),Date INT(2),Year INT(4),Event VARCHAR;");
        db.execSQL("INSERT INTO MyTab VALUES (0,1,2012,'mini_proj');");
        db.close();

    }
}

我写了这个小片段来创建一个表,但它不起作用。这段代码有什么问题?

4

1 回答 1

2

在您的第一个查询中,您缺少一个右大括号:

CREATE TABLE IF NOT EXISTS MyTab (
    Month INT(2),
    Date INT(2),
    Year INT(4),
    Event VARCHAR;

它应该是:

CREATE TABLE IF NOT EXISTS MyTab (
    Month INT(2),
    Date INT(2),
    Year INT(4),
    Event VARCHAR
)

另外,请注意,查询不需要以 a 结尾;,如文档中所述:

参数
sql要执行的 SQL 语句。不支持以分号分隔的多个语句。

此外,您应该始终检查您的 LogCat 输出,因为这应该会抛出一个SQLiteException.


一些进一步的 SQLite 注释:

  1. SQLite 没有VARCHAR-type。它只有TEXT并将任何类似文本的类型转换为它。
  2. 请注意,SQLite 也忽略了数据类型的长度:

SQLite不对SQLITE_MAX_LENGTH字符串、BLOB 或数值的长度施加任何长度限制(除了大的全局限制) 。

于 2012-12-15T15:35:42.253 回答