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>