簡體   English   中英

連接到數據庫時出現SQlite錯誤

[英]SQlite error when connecting to database

我是Android的新手,正在使用SQlite數據庫開發應用程序。 不幸的是,當應用程序應該從數據庫中檢索數據時,它總是崩潰。 我找不到錯誤,因此非常感謝任何提示或幫助。

這是活動:

import android.app.ListActivity;
import android.content.DialogInterface;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.ListAdapter;
import android.widget.SimpleCursorAdapter;

import java.util.ArrayList;

import de.die_web_agenten.www.runinstant.db.TaskContract;
import de.die_web_agenten.www.runinstant.db.TaskDBHelper;

public class SecondListActivity extends ListActivity {

    // declare class variables
    private ArrayList<Item> m_parts = new ArrayList<Item>();
    private Runnable viewParts;
    private ItemAdapter m_adapter;
    private ListAdapter listAdapter;
    private TaskDBHelper helper;

    /** Called when the activity is first created. */
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // instantiate our ItemAdapter class
        m_adapter = new ItemAdapter(this, R.layout.list_item, m_parts);
        setListAdapter(m_adapter);

        // here we are defining our runnable thread.
        viewParts = new Runnable(){
            public void run(){
                handler.sendEmptyMessage(0);
            }
        };

        // here we call the thread we just defined - it is sent to the handler below.
        Thread thread =  new Thread(null, viewParts, "MagentoBackground");
        thread.start();
    }

    private void updateUI() {
        helper = new TaskDBHelper(SecondListActivity.this);
        SQLiteDatabase sqlDB = helper.getReadableDatabase();
        Cursor cursor = sqlDB.query(TaskContract.TABLE,
                new String[]{TaskContract.Columns._id, TaskContract.Columns.SCAN_RESULT, TaskContract.Columns.SCAN_RESULT_FORMAT
                        },
                null, null, null, null, null
        );


        listAdapter = new SimpleCursorAdapter(
                this,
                R.layout.task_view,
                cursor,
                new String[]{TaskContract.Columns.SCAN_RESULT_FORMAT, TaskContract.Columns.SCAN_RESULT, TaskContract.Columns._id},
                new int[]{R.id.taskTextView},
                0
        );

        this.setListAdapter(listAdapter);

    }


    public void onClick(DialogInterface dialogInterface, int i, Cursor cursor) {

        cursor.moveToLast();
        int keyIdOfRowToDelete = cursor.getInt(cursor.getColumnIndex(TaskContract.Columns._id));
        SQLiteDatabase sqlDB = null;
        sqlDB.delete(TaskContract.TABLE, TaskContract.Columns._id + "=?", new String[]{String.valueOf(keyIdOfRowToDelete)});
        String sql = String.format("SELECT FROM %s WHERE %s = '%s'",
                TaskContract.TABLE,
                TaskContract.Columns.SCAN_RESULT, TaskContract.Columns.SCAN_RESULT_FORMAT);
        //task);
        //TaskContract.Columns.DESCRIPTION,
        //description);
        helper = new TaskDBHelper(SecondListActivity.this);
        sqlDB = helper.getWritableDatabase();
        sqlDB.execSQL(sql);
        updateUI();
    }

    private Handler handler = new Handler()
    {

        public void handleMessage(Message msg)
        {



            // create some objects
            // here is where you could also request data from a server
            // and then create objects from that data.
            helper = new TaskDBHelper(SecondListActivity.this);
            SQLiteDatabase sqlDB = helper.getWritableDatabase();
            String sql = String.format("SELECT FROM %s",
                    TaskContract.TABLE,
                    TaskContract.Columns.SCAN_RESULT_FORMAT,
                    TaskContract.Columns.SCAN_RESULT
            );
            sqlDB.execSQL(sql);
            //updateUI();
            String contents = TaskContract.Columns.SCAN_RESULT;
            String format = TaskContract.Columns.SCAN_RESULT_FORMAT;

            //Intent SecondIntent = getIntent();
            //String contents = SecondIntent.getStringExtra("SCAN_RESULT");
            //String contents = SecondIntent.getStringExtra("SCAN_RESULT", contents);
            //String format = SecondIntent.getStringExtra("SCAN_RESULT_FORMAT");
            //Intent intent = new Intent();
            //String contents = intent.getStringExtra("SCAN_RESULT");
            //String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
            //setResult(RESULT_OK, intent);


            m_parts.add(new Item(contents, format, 0));
            m_parts.add(new Item("MyItemName #2", "This is item #2", 0));
            m_parts.add(new Item(contents, format, 0));
            Log.d("CDebugTag", "Value: " + (contents));
            Log.d("DDebugTag", "Value: " + (format));
            //updateUI();
            //Log.d("DDebugTag", "Value: " + (format));
            /*m_parts.add(new Item("MyItemName", "This is item #3", 0));
            m_parts.add(new Item("MyItemName #2", "This is item #4", 0));
            m_parts.add(new Item("MyItemName", "This is item #5", 0));
            m_parts.add(new Item("MyItemName #2", "This is item #6", 0));
            m_parts.add(new Item("MyItemName", "This is item #7", 0));
            m_parts.add(new Item("MyItemName #2", "This is item #8", 0));
            m_parts.add(new Item("MyItemName", "This is item #9", 0));
            m_parts.add(new Item("MyItemName #2", "This is item #10", 0));*/


            m_adapter = new ItemAdapter(SecondListActivity.this, R.layout.list_item, m_parts);

            // display the list.
            setListAdapter(m_adapter);
            //updateUI();
        }
    };
}

這是Log Cat錯誤消息:

08-19 17:19:53.270 11362-11362/? E/AndroidRuntime: FATAL EXCEPTION: main
                                                   Process: de.die_web_agenten.www.runinstant, PID: 11362
                                                   android.database.sqlite.SQLiteException: near "FROM": syntax error (code 1): , while compiling: SELECT FROM SCANDATA
                                                   #################################################################
                                                   Error Code : 1 (SQLITE_ERROR)
                                                   Caused By : SQL(query) error or missing database.
                                                    (near "FROM": syntax error (code 1): , while compiling: SELECT FROM SCANDATA)
                                                   #################################################################
                                                       at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
                                                       at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1093)
                                                       at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:670)
                                                       at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
                                                       at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
                                                       at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
                                                       at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1812)
                                                       at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1743)
                                                       at de.die_web_agenten.www.runinstant.SecondListActivity$2.handleMessage(SecondListActivity.java:111)
                                                       at android.os.Handler.dispatchMessage(Handler.java:102)
                                                       at android.os.Looper.loop(Looper.java:135)
                                                       at android.app.ActivityThread.main(ActivityThread.java:5910)
                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                       at java.lang.reflect.Method.invoke(Method.java:372)
                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)

任何提示和幫助將不勝感激,謝謝!

您的查詢未指定所選內容,例如

SELECT [column list] FROM SCANDATA

要么

SELECT * FROM SCANDATA

在您的SQL查詢的第二次調用中,使用query而不是execSQL。 作為execSQL,執行不是SELECT或返回數據的任何其他sql語句的單個sql查詢。

https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#execSQL(java.lang.String)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM