我正在为Android编写一个应用程序。我需要读取一个txt文件并将数据写入SQLite文件中。我已经设法完成所有代码,但它应该将值插入数据库的部分不起作用。我已经给出了以下代码:
try{
ContentValues values = new ContentValues();
values.put(KEY_NAME, firstNumber); // Contact Name
values.put(KEY_PH_NO, strfinal); // Contact Phone
// Inserting Row
db.insert(TABLE_CONTACTS, null, values);
} catch(Exception e) {
e.printStackTrace();
}
此代码未将值输入数据库,并且操作完成后数据库仍为空。这有什么问题?谢谢。 编辑:好的,这是完整的代码:
public class DatabaseHandler extends SQLiteOpenHelper {
// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "feedsmanager.sqlite";
// Contacts table name
private static final String TABLE_CONTACTS = "table_to_hold_all_values";
// Contacts Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_NAME = "name";//ctid
private static final String KEY_PH_NO = "phone_number";//feedname,address;feedname;address etc
Context ctx;
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
ctx=context;
}
// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
//Log.d("in onCreate","twitch1");
String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
+ KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
+ KEY_PH_NO + " TEXT);";
//Log.d("below createcontacts","twitch1");
try{
db.execSQL(CREATE_CONTACTS_TABLE);
}catch(Exception e){Log.d("create went wrong: "+e,"twitch11");}
//Log.d("below db.execsql","twitch1");
populate(db);
}
void populate(SQLiteDatabase dbs){
String line="";
try{
InputStream is = ctx.getAssets().open("feedtitlesandaddresses.txt");
InputStreamReader iz=new InputStreamReader(is);
BufferedReader br = new BufferedReader(iz);
//SQLiteDatabase dbs = this.getWritableDatabase();
while((line=br.readLine())!=null) {
//Log.d("fcked here6","twitch1");
StringTokenizer stringTokenizer = new StringTokenizer(line, "<");
String firstNumber="";
String strfinal="";
firstNumber = (String) stringTokenizer.nextElement();
**//Calculations to give values to firstNumber and strfinal excluded
ContentValues values = new ContentValues();
values.put(KEY_NAME, firstNumber); // Contact Name
values.put(KEY_PH_NO, strfinal); // Contact Phone
// Inserting Row
dbs.insert(TABLE_CONTACTS, null, values);}
dbs.close();}catch(Exception e){Log.d("yeah error is"+e,"twitch12");}
}}
答案 0 :(得分:0)
尝试放置this.db.insert(TABLE_CONTACTS, null, values);
。因为几个月前我遇到了同样的问题,这就是解决方案。
答案 1 :(得分:0)
而不是db.insert()...使用db.insertOrThrow(),可能是一些约束错误。
答案 2 :(得分:0)
你的db
对象是什么?是SQLiteDatabase db = this.getWriteableDatabase();
吗?我看到有些人使用getReadAbleDatabase()
而不是getWriteableDatabase()
方法。