Ошибка синтаксиса в Android sqlite - PullRequest
0 голосов
/ 24 августа 2011

Здравствуйте, мой любимый справочный ресурс ...

Я обычный программист на Android, делающий приложение, предназначенное просто для случайного рисования имени из массива и его отображения ... Проблема в том, чтобы поместить это приложение вРелизная версия состоит в том, что в базе данных должны храниться редактируемые строки, поэтому я, естественно, обратился к реализации sql lite для android.Честно говоря, я не знал об этом первым, пока не просмотрел исходный код примера, который нашел.Я использую модифицированную версию этого примера, чтобы просто сохранить имя (строку) и идентификатор строки ... Я сталкиваюсь с синтаксической ошибкой, я буду отображать данные logcat позже в вопросе ... любые другие вещиВы можете найти в моем коде, что он может быть неправильным, или даже некоторые советы, будет очень признателен ... Вот идет натиск кода ...

peopleDatabaseHelper

package com.b.wom.peopledatabase;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class peopleDatabaseHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "applicationdata";

    private static final int DATABASE_VERSION = 1;

    // Database creation sql statement
    private static final String DATABASE_CREATE = "create table todo (_id integer primary key autoincrement, "
            + "name text not null);";

    public peopleDatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    // Method is called during creation of the database
    @Override
    public void onCreate(SQLiteDatabase database) {
        database.execSQL(DATABASE_CREATE);
    }

    // Method is called during an upgrade of the database, e.g. if you increase
    // the database version
    @Override
    public void onUpgrade(SQLiteDatabase database, int oldVersion,
            int newVersion) {
        Log.w(peopleDatabaseHelper.class.getName(),
                "Upgrading database from version " + oldVersion + " to "
                        + newVersion + ", which will destroy all old data");
        database.execSQL("DROP TABLE IF EXISTS todo");
        onCreate(database);
    }
}

peopleDbAdapter

    package com.b.wom.peopledatabase;

    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.SQLException;
    import android.database.sqlite.SQLiteDatabase;

    public class peopleDbAdapter {

        // Database fields
        public static final String KEY_ROWID = "_id";
        public static final String KEY_NAME = "name";
        private static final String DATABASE_TABLE = "table";
        private Context context;
        private SQLiteDatabase database;
        private peopleDatabaseHelper dbHelper;

        public peopleDbAdapter(Context context) {
            this.context = context;
        }

        public peopleDbAdapter open() throws SQLException {
            dbHelper = new peopleDatabaseHelper(context);
            database = dbHelper.getWritableDatabase();
            return this;
        }

        public void close() {
            dbHelper.close();
        }

        /**
         * Create a new todo If the todo is successfully created return the new
         * rowId for that note, otherwise return a -1 to indicate failure.
         */
        public long createPerson(String name) {
            ContentValues initialValues = createContentValues(name);

            return database.insert(DATABASE_TABLE, null, initialValues);
        }

        /**
         * Update the todo
         */
        public boolean updatePerson(long rowId, String name) {
            ContentValues updateValues = createContentValues(name);

            return database.update(DATABASE_TABLE, updateValues, KEY_ROWID + "="
                    + rowId, null) > 0;
        }

        /**
         * Deletes todo
         */
        public boolean deletePerson(long rowId) {
            return database.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
        }

        /**
         * Return a Cursor over the list of all people in the database
         * 
         * @return Cursor over all people
         */
        public Cursor fetchAllPeople() {
            return database.query(DATABASE_TABLE, new String[] { KEY_ROWID,
                    KEY_NAME }, null, null, null, null, null);
        }

        /**
         * Return a Cursor positioned at the defined person
         */
        public Cursor fetchPerson(long rowId) throws SQLException {
            Cursor mCursor = database.query(true, DATABASE_TABLE, new String[] {
                    KEY_ROWID, KEY_NAME }, KEY_ROWID + "=" + rowId, null, null,
                    null, null, null);
            if (mCursor != null) {
                mCursor.moveToFirst();
            }
            return mCursor;
        }

        private ContentValues createContentValues(String name) {
            ContentValues values = new ContentValues();
            values.put(KEY_NAME, name);
            return values;
        }
    }

peoplesetting (где пользователь вводит новых людей для добавления в базу данных)

package com.b.wom;

import com.b.wom.peopledatabase.peopleDbAdapter;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.Toast;

public class peoplesettings extends Activity {
    public TableRow tr;
    public EditText n;
    public int currentimage;
    public TableLayout tl;
    public Button add;
    public EditText et;
    public SharedPreferences s;
    private peopleDbAdapter database;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.peoplesettings);
        // sets up database
        database = new peopleDbAdapter(this);
        database.open();
        // Adds button for adding more people
        Button add = (Button) findViewById(R.id.add);
        // allocates the namebox
        Button pb = (Button) findViewById(R.id.peoplebutton);
        pb.setBackgroundColor(0x0106000d);
        pb.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                Intent myIntent = new Intent(peoplesettings.this, peopleListView.class);
                startActivity(myIntent);
            }

        });
        n = (EditText) findViewById(R.id.namebox);
        add.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // Adds another person
                add();
            }
        });
    }

    void add() {
        // checks the text in the name box to make sure it isn't empty
        if (n.toString() == "") {
            Toast.makeText(this, "Please enter a name into the text box...",
                    2000).show();
        }
        if (n.toString() != "") {
            database.open();
            database.createPerson(n.getText().toString());
            n.setText("");
            Toast.makeText(this, "Person added...",
                    2000).show();
            database.close();
        }
    }

}

peopleListView (где приложение отображает всех людей в базе данных)

package com.b.wom;

import com.b.wom.peopledatabase.peopleDbAdapter;

import android.app.ListActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

public class peopleListView extends ListActivity {
    private Cursor cursor;
    private peopleDbAdapter database;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        updatelistview();
    }

    void updatelistview() {
        ListView lv = getListView();
        database.open();
        cursor = database.fetchAllPeople();
        startManagingCursor(cursor);
        String[] from = new String[] { peopleDbAdapter.KEY_NAME };
        int[] to = { R.id.person_name, R.id.person_num };
        // Now create an array adapter and set it to display using our row
        SimpleCursorAdapter people = new SimpleCursorAdapter(this,
                R.layout.person_textview, cursor, from, to);
        lv.setAdapter(people);
        database.close();
    }
}

Данные Logcat ...

    08-24 09:08:59.056: ERROR/Database(872): Error inserting name=BB
08-24 09:08:59.056: ERROR/Database(872): android.database.sqlite.SQLiteException: near "table": syntax error: , while compiling: INSERT INTO table(name) VALUES(?);
08-24 09:08:59.056: ERROR/Database(872):     at android.database.sqlite.SQLiteProgram.native_compile(Native Method)
08-24 09:08:59.056: ERROR/Database(872):     at android.database.sqlite.SQLiteProgram.compile(SQLiteProgram.java:110)
08-24 09:08:59.056: ERROR/Database(872):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
08-24 09:08:59.056: ERROR/Database(872):     at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41)
08-24 09:08:59.056: ERROR/Database(872):     at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1027)
08-24 09:08:59.056: ERROR/Database(872):     at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1413)
08-24 09:08:59.056: ERROR/Database(872):     at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1286)
08-24 09:08:59.056: ERROR/Database(872):     at com.b.wom.peopledatabase.peopleDbAdapter.createPerson(peopleDbAdapter.java:40)
08-24 09:08:59.056: ERROR/Database(872):     at com.b.wom.peoplesettings.add(peoplesettings.java:65)
08-24 09:08:59.056: ERROR/Database(872):     at com.b.wom.peoplesettings$2.onClick(peoplesettings.java:53)
08-24 09:08:59.056: ERROR/Database(872):     at android.view.View.performClick(View.java:2364)
08-24 09:08:59.056: ERROR/Database(872):     at android.view.View.onTouchEvent(View.java:4179)
08-24 09:08:59.056: ERROR/Database(872):     at android.widget.TextView.onTouchEvent(TextView.java:6541)
08-24 09:08:59.056: ERROR/Database(872):     at android.view.View.dispatchTouchEvent(View.java:3709)
08-24 09:08:59.056: ERROR/Database(872):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
08-24 09:08:59.056: ERROR/Database(872):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
08-24 09:08:59.056: ERROR/Database(872):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
08-24 09:08:59.056: ERROR/Database(872):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
08-24 09:08:59.056: ERROR/Database(872):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
08-24 09:08:59.056: ERROR/Database(872):     at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
08-24 09:08:59.056: ERROR/Database(872):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
08-24 09:08:59.056: ERROR/Database(872):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
08-24 09:08:59.056: ERROR/Database(872):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
08-24 09:08:59.056: ERROR/Database(872):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
08-24 09:08:59.056: ERROR/Database(872):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
08-24 09:08:59.056: ERROR/Database(872):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
08-24 09:08:59.056: ERROR/Database(872):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
08-24 09:08:59.056: ERROR/Database(872):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
08-24 09:08:59.056: ERROR/Database(872):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
08-24 09:08:59.056: ERROR/Database(872):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
08-24 09:08:59.056: ERROR/Database(872):     at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
08-24 09:08:59.056: ERROR/Database(872):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
08-24 09:08:59.056: ERROR/Database(872):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
08-24 09:08:59.056: ERROR/Database(872):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-24 09:08:59.056: ERROR/Database(872):     at android.os.Looper.loop(Looper.java:123)
08-24 09:08:59.056: ERROR/Database(872):     at android.app.ActivityThread.main(ActivityThread.java:4363)
08-24 09:08:59.056: ERROR/Database(872):     at java.lang.reflect.Method.invokeNative(Native Method)
08-24 09:08:59.056: ERROR/Database(872):     at java.lang.reflect.Method.invoke(Method.java:521)
08-24 09:08:59.056: ERROR/Database(872):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
08-24 09:08:59.056: ERROR/Database(872):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
08-24 09:08:59.056: ERROR/Database(872):     at dalvik.system.NativeStart.main(Native Method)

Огромное спасибо за все, что вы можете предоставить,

Приветствия ...

1 Ответ

1 голос
/ 24 августа 2011

Код вставки базы данных:
INSERT INTO table(name) VALUES(?)
Итак, вы просто пропустите имя переменной "TABLE_NAME". Вы объявили свой стол как todo и используете его как table.
Просто поставьте:
private static final String DATABASE_TABLE = "todo"; в людяхDBAdapter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...