2011-03-16 120 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