【问题标题】:How to insert a new row of table of sqlite in android?如何在android中插入新的sqlite表行?
【发布时间】:2017-10-23 12:19:40
【问题描述】:

我正在为教师开发出勤应用程序。我创建了数据库并尝试插入新行,但出现错误。我在下面给出了一些必要的代码。 数据库创建如下:

String aquery="CREATE TABLE "+ATTENDANCE_TABLE_NAME+" ( COLUMN_DATE TEXT PRIMARY KEY );";
            db.execSQL(aquery);

ALTER 表格为:

String aquery="ALTER TABLE "+ATTENDANCE_TABLE_NAME+" ADD COLUMN '"+new_col_name+"' TEXT;";
db.execSQL(aquery);

现在我将一行插入一个新行:

ContentValues Values=new ContentValues();
        SQLiteDatabase db=getWritableDatabase();
        // finding all column
        Cursor dbCursor = db.query(ATTENDANCE_TABLE_NAME, null, null, null, null, null, null);
        String[] columnNames = dbCursor.getColumnNames();
        String zero="0";

        for (int i=0;i<columnNames.length;i++)
        {
            // saving values to each specific column
            if(i==0)
                Values.put("COLUMN_DATE", date );
            else
                Values.put(columnNames[i],"'"+zero+"'");
        }
            check = db.insert(ATTENDANCE_TABLE_NAME, null , Values);

但我收到此错误:

05-25 18:52:23.023 19480-19480/com.example.vikas.scannerproject E/SQLiteLog: (1) near "14202": syntax error
05-25 18:52:23.023 19480-19480/com.example.vikas.scannerproject E/SQLiteDatabase: Error inserting COLUMN_DATE=2017-05-25 14202='0'
android.database.sqlite.SQLiteException: near "14202": syntax error (code 1): , while compiling: INSERT INTO CSE_OS_2017_ATTENDANCE(COLUMN_DATE,14202) VALUES (?,?)
                                                                                  at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
                                                                                  at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887)
                                                                                  at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498)
                                                                                  at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
                                                                                  at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
                                                                                  at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
                                                                                  at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469)
                                                                                  at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341)
                                                                                  at com.example.vikas.scannerproject.Index_DBHandler.takingAttendance(Index_DBHandler.java:148)
                                                                                  at com.example.vikas.scannerproject.ScanresultActivity.takeAttendance(ScanresultActivity.java:44)
                                                                                  at com.example.vikas.scannerproject.ScanresultActivity.onCreate(ScanresultActivity.java:32)
                                                                                  at android.app.Activity.performCreate(Activity.java:6303)
                                                                                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
                                                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2376)
                                                                                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2483)
                                                                                  at android.app.ActivityThread.access$900(ActivityThread.java:153)
                                                                                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349)
                                                                                  at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                  at android.os.Looper.loop(Looper.java:148)
                                                                                  at android.app.ActivityThread.main(ActivityThread.java:5441)
                                                                                  at java.lang.reflect.Method.invoke(Native Method)
                                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)
                                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)

帮我插入新行。

【问题讨论】:

  • Values.put(columnNames[i],"'"+zero+"'"); 留下引号,就像 Values.put(columnNames[i],zero); 一样放零。
  • @Opiatefuchs 我已经尝试了两种方法,但同样的错误即将到来。
  • 你的aquery也不对,留下引号,最后加括号String aquery="ALTER TABLE "+ATTENDANCE_TABLE_NAME+" ADD COLUMN "+new_col_name+" TEXT);";
  • 然后卸载你的应用,重新安装。每次您进行一些影响列(添加或子)的更改时,您就不能再使用现有的数据库了。此外,通过向现有表添加列,您必须升级数据库。见:stackoverflow.com/questions/8291673/…
  • @Opiatefuchs 我已经检查过了,但仍然出现语法错误(代码 1)

标签: android database insert syntax-error android-sqlite


【解决方案1】:

SqLite 中的列名不能以数字[0-9] 开头。将列名称更改为“A14202”之类的名称。

顺便说一句,为每个作业添加一列可能不是最好的设计。 SqlLite 将只允许 2000 列。

【讨论】:

    【解决方案2】:

    sqlite 中的列名应该以字母{A-Z,a-z} 开头。 它不应该以数值开头。 试试这个:

    String aquery="ALTER TABLE "+ATTENDANCE_TABLE_NAME+" ADD COLUMN '"+"A"+new_col_name+"' TEXT;";
    db.execSQL(aquery);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      相关资源
      最近更新 更多