2011-03-16 153 views
0

我的問題是每當我第一次在SDCard中創建一個數據庫,並製作一個表,並插入一些值內部工作正常。 但只有一次,如果現在我想添加一些更多的數據在我現有的數據庫我正在做的是, 我要去的地方,我寫了插入語句,插入一些更多的值,但是當我運行我的應用程序和在SQLite數據庫瀏覽器中瀏覽我的數據庫時,它並沒有改變任何改變。我不能看到我的新插入的值Sqlite插入不能重新連接

import net.rim.device.api.ui.UiApplication; 
public class InsertDataScreen extends UiApplication { 

    public static void main(String[] args) { 
     InsertDataScreen theApp = new InsertDataScreen(); 
     theApp.enterEventDispatcher(); 
    } 
    public InsertDataScreen() { 
     pushScreen(new CreateDatabaseScreen()); 
    } 

} 

和我的第二類是這個我在那裏創建數據庫時,我做了一個一行創造了這個我的數據庫中插入值 現在我想裏面增加一個排我的數據庫,我有評論INSERT語句時,我做了,我內心充滿期待的兩行,但它亙古不變的改變......

import net.rim.device.api.database.Database; 
import net.rim.device.api.database.DatabaseFactory; 
import net.rim.device.api.database.Row; 
import net.rim.device.api.database.Statement; 
import net.rim.device.api.io.URI; 
import net.rim.device.api.ui.component.LabelField; 
import net.rim.device.api.ui.component.RichTextField; 
import net.rim.device.api.ui.container.MainScreen; 

public class CreateDatabaseScreen extends MainScreen { 
    Database d; 
    public CreateDatabaseScreen(){ 
     LabelField title = new LabelField("SQLite Create database sample and " + 
       "inserting some value ", 
       LabelField.ELLIPSIS|LabelField.USE_ALL_WIDTH); 
     setTitle(title); 
     add(new RichTextField("Creating a Database and will Add some data" + 
       "MyTest.db on the SDCard")); 
     try { 
      URI uri = URI.create("file:///SDCard/Databases/SQLite_Guide/" + 
            "MyTestDatabase.db"); 
      d = DatabaseFactory.create(uri); 
      d.close(); 
      d = DatabaseFactory.open(uri); 
      Statement s = d.createStatement("CREATE TABLE 'People' (" + 
        "'Name' TEXT, " + 
        "'Age' INTEGER)"); 
      s.prepare(); 
      s.execute(); 
      s.close(); 
      Statement s1 = d.createStatement("INSERT INTO People(Name,Age) " + 
        "VALUES ('Uttam',23)"); 
      s1.prepare(); 
      s1.execute(); 
      s1.close(); 
      /** 
      Statement s2 = d.createStatement("INSERT INTO People(Name,Age) " + 
        "VALUES ('Rakesh',26)"); 
      s2.prepare(); 
      s2.execute(); 
      s2.close(); 
      */ 

      d.close(); 

     } catch (Exception e) { 
      // TODO: handle exception 
      System.out.println(e.getMessage()); 
      e.printStackTrace(); 
     } 
    } 

} 
+0

這裏是代碼 – BBdev 2011-03-17 06:32:27

回答

2

一旦創建了數據庫就得到解決,我們不應該再次創建它。 也不能一次又一次地創建表。創建應該幾乎執行一次。 是的,你應該檢查數據庫和表已經存在或不存在.... 如果不創建數據庫和表,如果數據庫存在,然後插入值你想插入表... 所以代碼應該是這樣的

try { 
      URI uri = URI.create("file:///SDCard/Databases/SQLite_Guide/" + 
            "MyTestDatabase.db"); 
if (DatabaseFactory.exists(uri)){ 
//d = DatabaseFactory.openOrCreate(uri); 
d = DatabaseFactory.open(uri); 
Statement s1 = d.createStatement("INSERT INTO People(Name,Age) " + 
        "VALUES ('Uttam',23)"); 
      s1.prepare(); 
      s1.execute(); 
      s1.close();

Statement s2 = d.createStatement("INSERT INTO People(Name,Age) " + "VALUES ('Rakesh',26)"); s2.prepare(); s2.execute(); s2.close();d.close(); } } catch (Exception e) { // TODO: handle exception System.out.println(e.getMessage()); e.printStackTrace(); add(new LabelField(e.getClass()+" " +e.getMessage())); } }
1

你不能只是一味地創建表每次。如果表已經存在,那麼執行()時該語句將引發異常。您需要檢查該表是否已經存在,然後添加所需的新列,或者需要跟蹤模式版本,然後將增量模式更新應用於新代碼。

如果這只是爲了開發,您需要刪除現有數據庫並重新開始。

+0

你能給我提供一些鏈接....在哪裏我可以知道更多關於它... – BBdev 2011-03-18 04:54:32

+0

感謝您給出的概念.. – BBdev 2011-03-18 13:14:47