2016-04-30 58 views
0

我只想让我的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; 

} 
} 

回答

1

每次启动活动时都会运行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,它是用预填充的数据库发布您的应用程序的一种方式。

+0

但是,您能否告诉我应该在哪里放入InserData?如果我想下次添加更多数据会怎么样? –

0

检查你的数据库存在于一个条件数据调用InsertData();

例如前,

Cursor resultCursor = db.rawQuery("SELECT * FROM myTable"); 
if (resultCursor.getCount < 1) { //if there's nothing in the result 
    Insertdata(); 
} 
resultCursor.close(); 
+0

顺便说一句,您可以保持onCreate中的代码。您只需事先进行数据库检查。 @JimENewtron感谢您的帮助编辑。 –

+0

谢谢,但如果有一些数据存在,我想插入更多。我仍然可以使用这种方法吗? –

+0

那么这取决于你想要建立什么。是的,你总是可以再次调用'InsertData();',但是你需要确定什么对你的应用最好。你的数据来自哪里?它是用户生成的(可能来自EditText)?点击按钮后可以插入吗? –

相关问题