Sqlite вставка не работает на переподключение - PullRequest
0 голосов
/ 16 марта 2011

Моя проблема - всякий раз, когда я сначала создаю базу данных на SDCard, а также создаю таблицу и вставляю в нее некоторые значения, все работает нормально. Но только один раз, если сейчас я хочу добавить еще несколько данных в моей существующей БД, что я делаю, Я иду в класс, где я написал оператор вставки и вставляю еще несколько значений, но когда я запускаю свое приложение и просматриваю свою базу данных в браузере баз данных 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());
    }

}

и мой второй класс - это то, где я создавал базу данных и вставлял значение, когда я делал это, моя база данных создавалась с одной строкой Теперь я хочу добавить еще одну строку в моей базе данных, для чего я прокомментировал оператор вставки, когда я сделал, что я ожидал две строки внутри, но это не изменилось ...

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();
        }
    }

}

Ответы [ 2 ]

2 голосов
/ 18 марта 2011

Получить решение после того, как база данных создана, мы не должны создавать ее снова. а также не может создать таблицу снова и снова. Создание должно быть выполнено почти один раз. И да, вы должны проверить базу данных и таблица уже существует или нет .... если нет, создайте базу данных и таблицу, и если база данных существует, вставьте значение, которое вы хотите вставить в таблицу .... поэтому код должен быть таким

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();</p>

<code>        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()));
    }

}
</code>
1 голос
/ 17 марта 2011

Вы не можете просто слепо создавать таблицу каждый раз.Если таблица уже существует, этот оператор выдаст исключение при выполнении ().Вам нужно проверить, что таблица уже существует, и затем добавить новый столбец, который вам нужен, или вам нужно отслеживать версию схемы, а затем применить инкрементные обновления схемы с новым кодом.

Если этотолько для разработки, вам нужно удалить существующую базу данных и начать заново.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...