1

在我的应用程序的数据库中,我有 2 个名为“PLAYERS”的表,其中包含每个用户的数据和“FRIENDSLIST”,旨在成为每个注册帐户的个人“朋友”列表。我的应用程序中的过程是什么时候玩家 (Joe) 注册了一个用户名,他的信息进入“PLAYERS”表,现在他可以进入我的 FindFriends 活动,在应用程序中搜索他朋友的用户名 (Bob),然后单击添加按钮。

然后,朋友(Bob)被添加到“FRIENDSLIST”表中。当他进入 PlayAFriend 活动时,将加载一个列表,显示他添加的“朋友”。这一切都很好,直到我意识到当我登录到他的一个朋友的帐户 (Bob) ,该朋友的列表与 (Joe) 的列表相同。

我知道我用来加载(Joe)的朋友列表的光标与我用来加载(Bob)的朋友列表的光标相同,所以我要问的问题是,

我如何让 Joe 和 Bob 拥有自己的个人好友列表?

我已经尝试在这个网站上搜索并在谷歌上搜索如何找到任何关于如何做到这一点的例子,但我发现我没有找到任何关于这个主题的教程或帖子很疯狂,即使这种类型的做法在每个流行的应用程序中都使用过.对不起,我知道这不是一个简单的问题,所以我必须详细解释问题所在。

我正在发布我的 DBAdapter 类,以显示我的制作方法是否能适应这个,我的 PlayAFriend 类会显示我的 Cursor 和 ListView 的实际效果。

DBAdapter 类

package com.fullfrontalgames.numberfighter;

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

public class DBAdapter {
    static final String KEY_ROWID = "_id";

    static final String KEY_USERNAME = "USERNAME";

    static final String KEY_PASSWORD = "PASSWORD";

    static final String KEY_EMAIL = "EMAIL";

    static final String KEY_NUMBERINPUT = "NUMBERINPUT";

    static final String KEY_SCORE = "SCORE";

    static final String KEY_FRIENDS = "FRIENDS";

    static final String TAG = "DBAdapter";

    static final String DATABASE_NAME = "NFDatabase";

    static final String DATABASE_TABLE1 = "PLAYERS";

    static final String DATABASE_TABLE2 = "FRIENDSLIST";

    static final int DATABASE_VERSION = 4;

    static final String DATABASE_CREATE_TABLE1 = "create table PLAYERS ( _id integer primary key autoincrement, "
            + "USERNAME text not null unique,PASSWORD text not null,EMAIL text,NUMBERINPUT text,SCORE text);";

    static final String DATBASE_CREATE_TABLE2 = "create table FRIENDSLIST (_id integer primary key autoincrement,"
            + "FRIENDS text not null,USERNAME text ,NUMBERINPUT text,SCORE text);";

    final Context context;

    DatabaseHelper DBHelper;

    static SQLiteDatabase db;

    public DBAdapter(Context ctx) {
        this.context = ctx;
        DBHelper = new DatabaseHelper(context);
    }

    private static class DatabaseHelper extends SQLiteOpenHelper {

        public DatabaseHelper(Context context) {
            // TODO Auto-generated constructor stub
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
            try {
                db.execSQL(DATABASE_CREATE_TABLE1);
                db.execSQL(DATBASE_CREATE_TABLE2);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
            Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion
                    + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS PLAYERS");
            db.execSQL("DROP TABLE IF EXISTS FRIENDSLIST");
            onCreate(db);
        }

    }

    public DBAdapter open() throws SQLiteException {
        db = DBHelper.getWritableDatabase();
        return this;
    }

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

    // PLAYERS TABLE CRUD

    public long insertPlayer(String Username, String Password, String Email) {
        ContentValues initialValues = new ContentValues();
        initialValues.put("USERNAME", Username);
        initialValues.put("PASSWORD", Password);
        initialValues.put("EMAIL", Email);

        db.insert("PLAYERS", null, initialValues);

        return db.insertWithOnConflict("PLAYERS", null, initialValues,
                SQLiteDatabase.CONFLICT_IGNORE);
    }

    public boolean deletePlayer(long id) {
        Log.d(TAG, "delete is working");
        return db.delete("PLAYERS", KEY_ROWID + " = " + id, null) > 0;

    }

    public Cursor getAllPlayers() {
        return db.query(false, "Players", new String[] {
                "_id", "USERNAME", "PASSWORD", "EMAIL"
        }, null, null, null, null, null, null);

    }

    public String getData() {
        String[] columns = new String[] {
                "_id", "USERNAME", "PASSWORD"
        };
        Cursor mCursor = db.query("PLAYERS", columns, null, null, null, null, null);
        String result = "";
        int iRow = mCursor.getColumnIndex(KEY_ROWID);
        int iName = mCursor.getColumnIndex(KEY_USERNAME);

        for (mCursor.moveToFirst(); !mCursor.isAfterLast(); mCursor.moveToNext()) {
            result = mCursor.getString(iRow) + " " + mCursor.getString(iName) + "/n";
        }
        return result;
    }

    public Cursor getPlayer(int _id) throws SQLException {
        Cursor mCursor = db.query(true, "PLAYERS", new String[] {
                "_id", "USERNAME"
        }, KEY_ROWID + " =  " + "_id", null, null, null, null, null);
        while (mCursor.moveToNext()) {
            int id = mCursor.getInt(mCursor.getColumnIndex("_id"));
        }
        return mCursor;
    }

    public String getUsername(String Username) {
        Cursor mCursor = db.query("Players", new String[] {
            "USERNAME"
        }, "USERNAME = ?", new String[] {
            Username
        }, null, null, null);
        if (mCursor.moveToNext())
            return mCursor.getString(0);
        else
            return "";
    }

    public String getSinlgeEntry(String Username) {
        Cursor cursor = db.query("PLAYERS", null, " USERNAME=?", new String[] {
            Username
        }, null, null, null);
        if (cursor.getCount() < 1) // UserName Not Exist
        {
            cursor.close();
            return "NOT EXIST";
        }
        cursor.moveToFirst();
        String password = cursor.getString(cursor.getColumnIndex("PASSWORD"));
        cursor.close();
        return password;
    }

    public boolean updatePlayer(long _id, String Username, String Password, String Email) {
        ContentValues args = new ContentValues();
        args.put("USERNAME", Username);
        args.put("PASSWORD", Password);
        args.put("EMAIL", Email);
        return db.update("PLAYERS", args, KEY_ROWID + " = " + _id, null) > 0;
    }

    // FRIENDS TABLE CRUD

    public void insertFriend(String Friend) {
        ContentValues initialValues = new ContentValues();
        initialValues.put("FRIENDS", Friend);
        db.insert("FRIENDSLIST", null, initialValues);
    }

    public boolean deleteFriend() {
        return db.delete("FRIENDSLIST", KEY_ROWID + " = " + "_id", null) > 0;
    }

    public Cursor getAllFriends() {
        return db.query(false, "FRIENDSLIST", new String[] {
                "_id", "FRIENDS"
        }, null, null, null, null, null, null);
    }

    public Cursor getFriend(long rowid) throws SQLException {
        Cursor mCursor = db.query(true, "FRIENDSLIST", new String[] {
                "_id", "FRIENDS"
        }, KEY_ROWID + " =  " + "_id", null, null, null, null, null);
        if (mCursor != null) {
            mCursor.moveToFirst();
        }
        return mCursor;
    }

    public boolean updateFriend(long _id, String Friends) {
        ContentValues args = new ContentValues();
        args.put("FRIENDS", Friends);

        return db.update("FRIENDSLIST", args, KEY_ROWID + " = " + _id, null) > 0;
    }

}

PlayAFriend 类

package com.fullfrontalgames.numberfighter;

import android.app.ListActivity;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.TextView;

public class PlayAFriend extends ListActivity {

    DBAdapter DBAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.playafriend);

        final DBAdapter db = new DBAdapter(this);
        DBAdapter = db.open();

        getListView().setAdapter(new FriendsListAdapter(this, db.getAllFriends()));

    }

    private class FriendsListAdapter extends BaseAdapter implements OnClickListener, ListAdapter {
        private Cursor fFriends;

        private Context fContext;

        public FriendsListAdapter(Context context, Cursor friends) {
            // TODO Auto-generated constructor stub
            fContext = context;
            fFriends = friends;
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return fFriends.getCount();
        }

        @Override
        public FriendInfo getItem(int position) {
            // TODO Auto-generated method stub
            if (fFriends.moveToPosition(position)) {
                String name = fFriends.getString(fFriends.getColumnIndex("FRIENDS"));

                return new FriendInfo(name);
            }
            return null;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            fFriends.moveToPosition(position);
            return fFriends.getLong(fFriends.getColumnIndex("_id"));
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            if (convertView == null) {
                convertView = LayoutInflater.from(fContext).inflate(R.layout.playafriendlistitems,
                        parent, false);
            }
            FriendInfo friendinfo = getItem(position);
            TextView friendTV = ViewHolder.get(convertView, R.id.textview_friends);
            Button playbutton = ViewHolder.get(convertView, R.id.playbutton, position);
            playbutton.setOnClickListener(this);

            friendTV.setText(friendinfo.getName());

            return convertView;
        }

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            DBAdapter db = new DBAdapter(fContext);
            db.open();
            int position = (Integer)v.getTag();
            fFriends.moveToPosition(position);
            long id = fFriends.getLong(fFriends.getColumnIndex("_id"));
            fFriends = db.getAllFriends();
            db.close();
        }

    }

}

新的 DBAdapter

package com.fullfrontalgames.numberfighter;

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

public class DBAdapter {
    static final String KEY_ROWID = "_id";

    static final String KEY_USERNAME = "USERNAME";

    static final String KEY_PASSWORD = "PASSWORD";

    static final String KEY_EMAIL = "EMAIL";

    static final String KEY_NUMBERINPUT = "NUMBERINPUT";

    static final String KEY_SCORE = "SCORE";

    static final String KEY_FRIENDS = "FRIENDS";

    static final String TAG = "DBAdapter";

    static final String DATABASE_NAME = "NFDatabase";

    static final String DATABASE_TABLE1 = "PLAYERS";

    static final String DATABASE_TABLE2 = "FRIENDSLIST";

    static final int DATABASE_VERSION = 9;

    static final String DATABASE_CREATE_TABLE1 = "create table PLAYERS ( _id integer primary key autoincrement, "
            + "USERNAME text not null unique,PASSWORD text not null,EMAIL text,NUMBERINPUT text,SCORE text);";

    static final String DATBASE_CREATE_TABLE2 = "create table FRIENDSLIST (_id integer primary key autoincrement,"
            + "player_id integer not null references PLAYERS(_id) on update cascade on delete cascade,"
            + "FRIENDS text ,NUMBERINPUT text,SCORE text);";

    final Context context;

    DatabaseHelper DBHelper;

    static SQLiteDatabase db;

    public DBAdapter(Context ctx) {
        this.context = ctx;
        DBHelper = new DatabaseHelper(context);
    }

    private static class DatabaseHelper extends SQLiteOpenHelper {

        public DatabaseHelper(Context context) {
            // TODO Auto-generated constructor stub
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
            try {
                db.execSQL(DATABASE_CREATE_TABLE1);
                db.execSQL(DATBASE_CREATE_TABLE2);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
            Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion
                    + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS PLAYERS");
            db.execSQL("DROP TABLE IF EXISTS FRIENDSLIST");
            onCreate(db);
        }

    }

    public DBAdapter open() throws SQLiteException {
        db = DBHelper.getWritableDatabase();
        db.execSQL("PRAGMA foreign_keys=ON;");
        return this;
    }

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

    // PLAYERS TABLE CRUD

    public long insertPlayer(String Username, String Password, String Email) {
        ContentValues initialValues = new ContentValues();
        initialValues.put("USERNAME", Username);
        initialValues.put("PASSWORD", Password);
        initialValues.put("EMAIL", Email);

        db.insert("PLAYERS", null, initialValues);

        return db.insertWithOnConflict("PLAYERS", null, initialValues,
                SQLiteDatabase.CONFLICT_IGNORE);
    }

    public boolean deletePlayer(long id) {
        Log.d(TAG, "delete is working");
        return db.delete("PLAYERS", KEY_ROWID + " = " + id, null) > 0;

    }

    public Cursor getAllPlayers() {
        return db.query(false, "Players", new String[] {
                "_id", "USERNAME", "PASSWORD", "EMAIL"
        }, null, null, null, null, null, null);

    }

    public String getData() {
        String[] columns = new String[] {
                "_id", "USERNAME", "PASSWORD"
        };
        Cursor mCursor = db.query("PLAYERS", columns, null, null, null, null, null);
        String result = "";
        int iRow = mCursor.getColumnIndex(KEY_ROWID);
        int iName = mCursor.getColumnIndex(KEY_USERNAME);

        for (mCursor.moveToFirst(); !mCursor.isAfterLast(); mCursor.moveToNext()) {
            result = mCursor.getString(iRow) + " " + mCursor.getString(iName) + "/n";
        }
        return result;
    }

    public Cursor getPlayer(int _id) throws SQLException {
        Cursor mCursor = db.query(true, "PLAYERS", new String[] {
                "_id", "USERNAME"
        }, KEY_ROWID + " =  " + "_id", null, null, null, null, null);
        while (mCursor.moveToNext()) {
            int id = mCursor.getInt(mCursor.getColumnIndex("_id"));
        }
        return mCursor;
    }

    public String getUsername(String Username) {
        Cursor mCursor = db.query("Players", new String[] {
            "USERNAME"
        }, "USERNAME = ?", new String[] {
            Username
        }, null, null, null);
        if (mCursor.moveToNext())
            return mCursor.getString(0);
        else
            return "";
    }

    public String getSinlgeEntry(String Username) {
        Cursor cursor = db.query("PLAYERS", null, " USERNAME=?", new String[] {
            Username
        }, null, null, null);
        if (cursor.getCount() < 1) // UserName Not Exist
        {
            cursor.close();
            return "NOT EXIST";
        }
        cursor.moveToFirst();
        String password = cursor.getString(cursor.getColumnIndex("PASSWORD"));
        cursor.close();
        return password;
    }

    public boolean updatePlayer(long _id, String Username, String Password, String Email) {
        ContentValues args = new ContentValues();
        args.put("USERNAME", Username);
        args.put("PASSWORD", Password);
        args.put("EMAIL", Email);
        return db.update("PLAYERS", args, KEY_ROWID + " = " + _id, null) > 0;
    }

    // FRIENDS TABLE CRUD

    public void insertFriend(long playerId, String Friend) {
        ContentValues initialValues = new ContentValues();
        initialValues.put("player_id", playerId);
        initialValues.put("FRIENDS", Friend);
        db.insertWithOnConflict("FRIENDSLIST", null, initialValues, SQLiteDatabase.CONFLICT_IGNORE);
    }

    public boolean deleteFriend() {
        return db.delete("FRIENDSLIST", KEY_ROWID + " = " + "_id", null) > 0;
    }

    public Cursor getAllFriends() {
        return db.query(false, "FRIENDSLIST", new String[] {
                "_id", "FRIENDS"
        }, null, null, null, null, null, null);
    }

    public Cursor getFriend(long player_id) throws SQLException {
        Cursor mCursor = db.query(true, "FRIENDSLIST", new String[] {
                "_id", "FRIENDS"
        }, "player_id" + " =  " + "player_id", null, null, null, null, null);
        // cursor from query is never null,
        // should just check for if (cursor.moveToFirst()) in the calling
        // activity
        return mCursor;
    }

    public boolean updateFriend(long _id, String Friends) {
        ContentValues args = new ContentValues();
        args.put("FRIENDS", Friends);

        return db.update("FRIENDSLIST", args, KEY_ROWID + " = " + _id, null) > 0;
    }

    public long getPlayerId(String Username) {
        // TODO Auto-generated method stub
        long id = 0;
        Cursor c = db.query("PLAYERS", new String[] {
            KEY_ROWID
        }, KEY_USERNAME + "=?", new String[] {
            Username
        }, null, null, null);
        if (c.moveToFirst()) {
            id = c.getLong(0);
        }
        c.close();
        return id;
    }

}


New PlayAFriend




package com.fullfrontalgames.numberfighter;

import android.app.ListActivity;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.TextView;

public class PlayAFriend extends ListActivity {

    DBAdapter DBAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.playafriend);

        final DBAdapter db = new DBAdapter(this);
        DBAdapter = db.open();

        long player_id = 0;
        getListView().setAdapter(new FriendsListAdapter(this, db.getFriend(player_id)));

    }

    private class FriendsListAdapter extends BaseAdapter implements OnClickListener, ListAdapter {
        private static final long player_id = 0;

        private Cursor fFriends;

        private Context fContext;

        public FriendsListAdapter(Context context, Cursor friends) {
            // TODO Auto-generated constructor stub
            fContext = context;
            fFriends = friends;
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return fFriends.getCount();
        }

        @Override
        public FriendInfo getItem(int position) {
            // TODO Auto-generated method stub
            if (fFriends.moveToPosition(position)) {
                String name = fFriends.getString(fFriends.getColumnIndex("FRIENDS"));

                return new FriendInfo(name);
            }
            return null;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            fFriends.moveToPosition(position);
            return fFriends.getLong(fFriends.getColumnIndex("_id"));
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            if (convertView == null) {
                convertView = LayoutInflater.from(fContext).inflate(R.layout.playafriendlistitems,
                        parent, false);
            }
            FriendInfo friendinfo = getItem(position);
            TextView friendTV = ViewHolder.get(convertView, R.id.textview_friends);
            Button playbutton = ViewHolder.get(convertView, R.id.playbutton, position);
            playbutton.setOnClickListener(this);

            friendTV.setText(friendinfo.getName());

            return convertView;
        }

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            DBAdapter db = new DBAdapter(fContext);
            db.open();
            int position = (Integer)v.getTag();
            fFriends.moveToPosition(position);
            long id = fFriends.getLong(fFriends.getColumnIndex("_id"));
            fFriends = db.getFriend(id);
            db.close();
        }

    }

}

找朋友活动

package com.fullfrontalgames.numberfighter;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.TextView;
import android.widget.Toast;

public class Findfriends extends Activity {
    DBAdapter db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.findfriends);

        final EditText sbar = (EditText)findViewById(R.id.PlayerSeachBar);
        Button search = (Button)findViewById(R.id.Search);
        Button Add = (Button)findViewById(R.id.Add);
        final TextView ResultText = (TextView)findViewById(R.id.ResultTextView);
        final FrameLayout ResultFrame = (FrameLayout)findViewById(R.id.ResultFrameLayout);

        ResultFrame.setVisibility(View.GONE);

        final DBAdapter db = new DBAdapter(this);
        db.open();

        search.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String Username = sbar.getText().toString();
                String foundplayer = db.getUsername(Username);

                if (Username.equals(foundplayer)) {

                    ResultFrame.setVisibility(View.VISIBLE);
                    ResultText.setText(foundplayer);
                    Toast.makeText(getApplicationContext(), "Player Found", Toast.LENGTH_LONG)
                            .show();

                } else {
                    Toast.makeText(getApplicationContext(), "Username Not Found", Toast.LENGTH_LONG)
                            .show();
                }
            }

        });

        Add.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String Friends = sbar.getText().toString();
                long playerId = db.getPlayerId(Friends);
                db.insertFriend(playerId, Friends);
                Toast.makeText(getApplicationContext(), "Player Has Been Added", Toast.LENGTH_LONG)
                        .show();

            }
        });
    }
}

日志猫

 04-22 21:11:37.834: E/SQLiteDatabase(15862): Error inserting player_id=0 FRIENDS=null
    04-22 21:11:37.834: E/SQLiteDatabase(15862): android.database.sqlite.SQLiteConstraintException: foreign key constraint failed (code 19)
    04-22 21:11:37.834: E/SQLiteDatabase(15862):    at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
    04-22 21:11:37.834: E/SQLiteDatabase(15862):    at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:775)
4

1 回答 1

1

改变你的桌子 FRIENDSLIST

static final String DATBASE_CREATE_TABLE2 = 
    "create table FRIENDSLIST (_id integer primary key autoincrement,"
    + "player_id integer not null references PLAYERS("_id") on update cascade on delete cascade,"
        + "FRIENDS text not null,USERNAME text ,NUMBERINPUT text,SCORE text);";  

当你插入

public void insertFriend(long playerId, String Friend) {
    ContentValues initialValues = new ContentValues();
    initialValues.put("player_id", playerId);
    initialValues.put("FRIENDS", Friend);
    db.insertWithOnConflict("FRIENDSLIST", null, initialValues, SQLiteDatabase.CONFLICT_IGNORE);
}  

结交朋友

public Cursor getFriend(long rowid) throws SQLException {
    Cursor mCursor = db.query(true, "FRIENDSLIST", new String[] {
            "_id", "FRIENDS"
    }, player_id + " =  " + "rowid", null, null, null, null, null);
    // cursor from query is never null, 
    // should just check for if (cursor.moveToFirst()) in the calling activity
    return mCursor;
}  

在数据库打开方法中添加

public DBAdapter open() throws SQLiteException {
    db = DBHelper.getWritableDatabase();
    db.execSQL("PRAGMA foreign_keys=ON;"); 
    return this;
}
于 2013-04-23T00:21:10.690 回答