1.error code 19: 错误原因(下面三种是网友总结的)
情况1:你定义的字段为 not null而插入时对应的字段却没值。 情况2:你定义的字段设定PRIMARY,而插入的值已经在表中存在。 情况3:在进行修改的时候set的id与where的id不同。 我自己遇到的情况时这样的:
    public void insert(Friend data) {
        String sql = "insert into " + DatabaseHelper.FRIENDS_TABLE_NAME;
        sql += "(_id, name, nickname, portrait, fromcity) values( ?, ?, ?, ?,?)";//_id为主键
        SQLiteDatabase sqlite = dbHelper.getWritableDatabase();
        sqlite.execSQL(sql, new String[] {
                data.getId() + "",  + "",data.getName() + "", data.getNickname(),data.getPortrait(), data.getFrom() + "" });
        sqlite.close();
    }
这里的问题就出在_id上,data对象里面的_id根本就没有赋值,默认为0,所以每次插入一个数据_id都会是0。因为我们已经将_id设置为自增的主键了,所以可以省略掉,如下:
    public void insert(Friend data) {
        String sql = "insert into " + DatabaseHelper.FRIENDS_TABLE_NAME;
        sql += "(name, nickname, portrait, fromcity) values( ?, ?, ?,?)";
        SQLiteDatabase sqlite = dbHelper.getWritableDatabase();
        sqlite.execSQL(sql, new String[] {
                data.getName() + "", data.getNickname(),
                data.getPortrait(), data.getFrom() + "" });
        sqlite.close();
    }
2.sqlite中的字段名
以上段代码中的数据库表格为例:
 public static final String CREATE_FRIENDS_TABLE = "create table "
            + FRIENDS_TABLE_NAME
            + " (_id integer primary key autoincrement,"
            + " name nvarchar(10), nickname nvarchar(20), portrait text, from text)";
其中,from字段定义有问题,我本打算定义居住地址属性,但from已被数据库占用为关键字,所以编译出了问题,换成fromcity就可以用了
3.忘记空格符问题 
我在对数据进行具体的query时,添加字段时忘记空格,导致编译错误,如下
public List<Friend> query(String where) {
        SQLiteDatabase sqlite = dbHelper.getReadableDatabase();
        ArrayList<Friend> data = null;
        data = new ArrayList<Friend>();
        Cursor cursor = sqlite.rawQuery("select * from "
                + DatabaseHelper.FRIENDS_TABLE_NAME + where, null);
        for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
            Friend friend = new Friend();
            friend.setId(cursor.getInt(0));
            friend.setName(cursor.getString(1));
            friend.setNickname(cursor.getString(2));
            friend.setPortrait(cursor.getString(3));
            friend.setFrom(cursor.getString(4));
            data.add(friend);
        }
        if (!cursor.isClosed()) {
            cursor.close();
        }
        sqlite.close();
        return data;
    }
     FriendDatabase database = new FriendDatabase(this);
     List<Friend> friendList = database.query("where name=james");
按照上面编译,查询语句将会变成: 
select * from ff_friendswhere name=james 
很明显,where 前面缺少空格。 
此外上段程序还有错,字段对应的值若为字符串,应该加上’ ‘。
        <p>版权声明:本文为博主原创文章,未经博主允许不得转载。</p>