为什么我的SQLite数据库不断添加已添加的数据?
我只想让我的SQLite数据库一次添加数据,但是我的SQLite数据库不断添加启动我的应用程序时添加的那些数据?我怎么能解决这个问题?有人能帮我吗?我很感激。为什么我的SQLite数据库不断添加已添加的数据?
这里是我的Java主类:
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {
public WebView web;
public DBHelper AsongHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initial();
Insertdata();
}
public void initial() {
AsongHelper = new DBHelper(this);
AsongHelper.getWritableDatabase();
AsongHelper.getReadableDatabase();
ListView ml = (ListView) findViewById(R.id.listView1);
List<listview_item>Songlist = AsongHelper.getSongsName();
listview_adapter ada = new listview_adapter(this, Songlist);
ml.setAdapter(ada);
ml.setOnItemClickListener(this);
web = (WebView) findViewById(R.id.webView1);
WebSettings webSettings = web.getSettings();
webSettings.setJavaScriptEnabled(true);
web.getSettings().setCacheMode(webSettings.LOAD_CACHE_ELSE_NETWORK);
web.setWebViewClient(
new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
}
);
web.loadUrl("http://youtu.be/bMqKM9lqX7M");
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
List<String> UrlList =AsongHelper.geturl();
web.loadUrl(UrlList.get(position));}
public void Insertdata(){
AsongHelper.insertdata("小幸运", "https://youtu.be/bMqKM9lqX7M", "Jason Chen");
AsongHelper.insertdata("Love Yourself","https://youtu.be/oyEuk8j8imI","Justin Bieber");
AsongHelper.insertdata("Gentleman","https://youtu.be/lGVKrj6gpnI","Will Jay");
}
}
这里是我的数据库类:
public class DBHelper extends SQLiteOpenHelper{
public static final String DATABASE_NAME = "ASong.op";
public static final String ASONG_TABLE_NAME = "Asongs";
public static final String ASONG_COLUMN_ID = "id";
public static final String ASONG_COLUMN_SONGSNAME = "SongsName";
public static final String ASONG_COLUMN_URL = "url";
public static final String ASONG_COLUMN_ARTIST = "artist";
public DBHelper(Context context)
{
super(context, DATABASE_NAME , null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("create table Asongs " + "(id integer primary key, SongsName text,url text,artist text)"
);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS Asongs");
onCreate(db);
}
public boolean insertdata (String songsname, String url, String artist)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(ASONG_COLUMN_SONGSNAME,songsname);
contentValues.put(ASONG_COLUMN_URL,url);
contentValues.put(ASONG_COLUMN_ARTIST, artist);
db.insert(ASONG_TABLE_NAME, null, contentValues);
return true;
}
public List<listview_item> getSongsName(){
SQLiteDatabase db = this.getReadableDatabase();
List<listview_item> SongsNameList = new ArrayList<>();
String[] SongsName={ASONG_COLUMN_SONGSNAME};
Cursor cusor = db.query(ASONG_TABLE_NAME,SongsName,null,null,null,null,null);
//StringBuffer buffer = new StringBuffer();
while(cusor.moveToNext()){
int index1 = cusor.getColumnIndex(ASONG_COLUMN_SONGSNAME);
String cid = cusor.getString(index1);
//buffer.append(cid);
SongsNameList.add(new listview_item(cid));
cusor.close();
;}
return SongsNameList;
}
public List<String> geturl(){
List<String> SongsUrlList = new ArrayList<>();
SQLiteDatabase db = this.getReadableDatabase();
String[] ColumnUrl={ASONG_COLUMN_URL};
Cursor cusor = db.query(ASONG_TABLE_NAME,ColumnUrl,null,null,null,null,null);
StringBuffer buffer = new StringBuffer();
while(cusor.moveToNext()){
int index2 = cusor.getColumnIndex(ASONG_COLUMN_URL);
String cid2 = cusor.getString(index2);
buffer.append(cid2);
SongsUrlList.add(buffer.toString());
}
cusor.close();
return SongsUrlList;
}
}
每次启动活动时都会运行OnCreate,因此,如果您在活动的OnCreate()方法中运行InsertData(),则会在您启动应用程序时随时插入这些记录。
http://developer.android.com/training/basics/activity-lifecycle/starting.html#lifecycle-states
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initial();
Insertdata();
检查SQLiteAssetHelper,它是用预填充的数据库发布您的应用程序的一种方式。
检查你的数据库存在于一个条件数据调用InsertData();
例如前,
Cursor resultCursor = db.rawQuery("SELECT * FROM myTable");
if (resultCursor.getCount < 1) { //if there's nothing in the result
Insertdata();
}
resultCursor.close();
顺便说一句,您可以保持onCreate中的代码。您只需事先进行数据库检查。 @JimENewtron感谢您的帮助编辑。 –
谢谢,但如果有一些数据存在,我想插入更多。我仍然可以使用这种方法吗? –
那么这取决于你想要建立什么。是的,你总是可以再次调用'InsertData();',但是你需要确定什么对你的应用最好。你的数据来自哪里?它是用户生成的(可能来自EditText)?点击按钮后可以插入吗? –
但是,您能否告诉我应该在哪里放入InserData?如果我想下次添加更多数据会怎么样? –