引起:android.database.sqlite.SQLiteException:没有这样的列:kaththi(代码1):

时间:2015-04-04 03:21:40

标签: android sqlite android-fragmentactivity

我的SQLite代码有问题。我正在使用Fragment以横向模式获取我的电影细节。但现在每次我点击我的电影名称,它都没有显示电影的细节。

这是我的DatabaseHandler代码:

package com.example.moviemanager;

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

public class DatabaseHandler {
    String cmd;
    private static final String DBTAG = "DatabaseHandler";

    public static final String KEY_ROWID = "_id";
    public static final int COL_ROWID = 0;

    public static final String KEY_KEY = "key";
    public static final String KEY_TITLE = "title";
    public static final String KEY_TYPE = "type";
    public static final String KEY_STORY = "story";
    public static final String KEY_RATING = "rating";
    public static final String KEY_LANGUAGE = "language";
    public static final String KEY_RUNTIME = "runtime";

    public static final int COL_KEY = 1;
    public static final int COL_TITLE = 2;
    public static final int COL_TYPE = 3;
    public static final int COL_STORY = 4;
    public static final int COL_RATING = 5;
    public static final int COL_LANGUAGE = 6;
    public static final int COL_RUNTIME = 7;

    public static final String[] ALL_KEYS = new String[] {
        KEY_ROWID, KEY_KEY, KEY_TITLE, KEY_TYPE, KEY_STORY,
        KEY_RATING, KEY_LANGUAGE, KEY_RUNTIME};

    public static final String DATABASE_NAME = "movieDb";
    public static final String DATABASE_TABLE = "movieTable";

    public static final int DATABASE_VERSION = 1;

    private static final String DATABASE_CREATE_SQL =
            "create table " + DATABASE_TABLE
            + " (" + KEY_ROWID + " integer primary key autoincrement,"
            + KEY_KEY + " text not null,"
            + KEY_TITLE + " text not null,"
            + KEY_TYPE + " text not null,"
            + KEY_STORY + " text not null,"
            + KEY_RATING + " text not null,"
            + KEY_LANGUAGE + " text not null,"
            + KEY_RUNTIME + " integer not null"
            + ");";

    private final Context context;

    private DatabaseHelper dbHelper;
    private SQLiteDatabase db;

    public DatabaseHandler(Context ctx){
        this.context = ctx;
        dbHelper = new DatabaseHelper(context);
    }

    public DatabaseHandler open(){
        db = dbHelper.getWritableDatabase();
        return this;
    }

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

    public void insertRow(String mvkey, String mvtitle, String mvtype,
            String mvstory, String mvrating, String mvlanguage, int mvruntime){
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_KEY, mvkey);
        initialValues.put(KEY_TITLE, mvtitle);
        initialValues.put(KEY_TYPE, mvtype);
        initialValues.put(KEY_STORY, mvstory);
        initialValues.put(KEY_RATING, mvrating);
        initialValues.put(KEY_LANGUAGE, mvlanguage);
        initialValues.put(KEY_RUNTIME, mvruntime);

        open();
        db.insert(DATABASE_TABLE, null, initialValues);
        close();
    }

    public void deleteRow(long rowId){
        open();
        cmd = new String ("DELETE FROM " + DATABASE_TABLE + " WHERE ( "+KEY_ROWID+" =" + rowId + " );");
        db.execSQL(cmd);
        close();
    }

    public void deleteAll(){
        Cursor c = getAllRows();
        long rowId = c.getColumnIndexOrThrow(KEY_ROWID);
        if(c.moveToFirst()){
            do{
                deleteRow(c.getLong((int)rowId));
            }while(c.moveToNext());
        }
        c.close();
    }

    public Cursor getAllRows(){
        String where = null;
        Cursor c = db.query(true, DATABASE_TABLE, ALL_KEYS, where, null, null, null, null, null);
        if(c!= null){
            c.moveToFirst();

        }
        return c;
    }

    public Cursor getRow(long rowId){
        String where = KEY_ROWID + "=" + rowId;
        Cursor c = db.query(true, DATABASE_TABLE, ALL_KEYS, where, null, null, null, null, null);
        if(c!= null){
            c.moveToFirst();

        }
        return c;
    }

    public boolean updateRow(long rowId, String mvkey, String mvtitle,
            String mvtype, String mvstory, String mvrating,
            String mvlanguage, int mvruntime){
        String where = KEY_ROWID + "=" + rowId;

        ContentValues newValues = new ContentValues();
        newValues.put(KEY_KEY, mvkey);
        newValues.put(KEY_TITLE, mvtitle);
        newValues.put(KEY_TYPE, mvtype);
        newValues.put(KEY_STORY, mvstory);
        newValues.put(KEY_RATING, mvrating);
        newValues.put(KEY_LANGUAGE, mvlanguage);
        newValues.put(KEY_RUNTIME, mvruntime);

        return db.update(DATABASE_TABLE, newValues, where, null) != 0;

    }

    public Cursor listMovieTitle(){
        return db.rawQuery("SELECT "+ KEY_TITLE + " FROM " + DATABASE_TABLE,null);

    }

    public Cursor get_id(String ttl){
        return db.rawQuery("SELECT "+  KEY_ROWID + " FROM " + DATABASE_TABLE + " WHERE (" + KEY_TITLE + " = " + ttl + " );",null);
    }

    private static class DatabaseHelper extends SQLiteOpenHelper {

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

        @Override
        public void onCreate(SQLiteDatabase _db) {
            _db.execSQL(DATABASE_CREATE_SQL);
        }

        @Override
        public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) {
            Log.w(DBTAG, "Upgrading application's database from version " + oldVersion
                    + " to " + newVersion + ", which will destroy all old data!");

            // Destroy old database:
            _db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);

            // Recreate new database:
            onCreate(_db);
        }

    }

}

这是我的MovieDetailFragment代码:

    package com.example.moviemanager;

import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;

public class MovieDetailFragment extends Fragment {
    //private TextView detailText;
    private long rowID;
    private EditText keyEditText;
    private EditText titleEditText;
    private EditText typeEditText;
    private EditText storyEditText;
    private EditText ratingEditText;
    private EditText languageEditText;
    private EditText runtimeEditText;

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.viewmoviedetail, container );
        return v;
    }

    public void updateDetails(int value,String ttl) {
        System.out.println(""+value+" "+ttl);
        if(value > -1){
            System.out.println(""+value);
            keyEditText = (EditText)getActivity().findViewById(R.id.keyeditText);
            titleEditText = (EditText)getActivity().findViewById(R.id.titleeditText);
            typeEditText = (EditText)getActivity().findViewById(R.id.typeeditText);
            storyEditText = (EditText)getActivity().findViewById(R.id.storyeditText);
            ratingEditText = (EditText)getActivity().findViewById(R.id.ratingeditText);
            languageEditText = (EditText)getActivity().findViewById(R.id.languageeditText);
            runtimeEditText = (EditText)getActivity().findViewById(R.id.runtimeeditText);

            DatabaseHandler dh = new DatabaseHandler(MovieDetailFragment.this.getActivity());
            dh.open();
            Cursor getid = dh.get_id(ttl);
            getid.moveToFirst();
            long id = getid.getLong(0);

            Cursor result = dh.getRow(id);
            result.moveToFirst();

            keyEditText.setText(result.getString(0));
            titleEditText.setText(result.getString(1));
            typeEditText.setText(result.getString(2));
            storyEditText.setText(result.getString(3));
            ratingEditText.setText(result.getString(4));
            languageEditText.setText(result.getString(5));
            runtimeEditText.setText(result.getString(6)+" min");

            result.close();
            dh.close();
        }

    }

}

这是我的DetailMovie代码:

    package com.example.moviemanager;

import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;


public class DetailMovie extends FragmentActivity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.detail_movie);
        Intent intent = getIntent();

        int orientation = getResources().getConfiguration().orientation;

        // destroy this activity and go back to the "base" view if we are in landscape mode
        // this activity is only for portrait mode
        if (orientation == Configuration.ORIENTATION_LANDSCAPE)
            finish();

        if (intent != null) {
            FragmentManager manager = getSupportFragmentManager();
            MovieDetailFragment detailFragment = (MovieDetailFragment) manager.findFragmentById(R.id.detailmovie_fragment);
            if (detailFragment != null) {
                int position = intent.getIntExtra("POSITION", -1);
                String title = intent.getStringExtra("TITLE");
                if (position > -1) {
                    detailFragment.updateDetails(position,title);
                }
            }
        }
        else {
            //Log.d("FRAGMENT", "DetailsActivity not started by intent");
            System.out.println("fail detailprint");
        }
    }
}

我确定错误是在sql部分,但我不知道如何解决它。有人可以帮我这个。谢谢。

0 个答案:

没有答案
相关问题