Como retornar uma coluna identity do SQLite?

3 respostas
Z

Pessoal, boa noite!

Gostaria de saber como faço para retornar o valor de uma coluna identity.
Fiz a codificação abaixo, mas não obtive sucesso.
Quando tento ler o parâmetro getIdPedidoProduto o valor vem igual a zero.
Alguém saberia me dizer o porque??

Criação da tabela
db.execSQL("CREATE TABLE PedidoProduto (" +
                "idPedidoProduto INTEGER IDENTITY," +
                "idProduto INTEGER," +
                "nomeProduto VARCHAR(100),"+
                "valor FLOAT NOT NULL," +
                "quantidade INTEGER NOT NULL," +
                "observacao TEXT NOT NULL);");
Método para preencher o List com as informações do bd
public List<PedidoProduto> listarPedidoProduto() {
        List<PedidoProduto> listaPedidoProduto = new ArrayList<PedidoProduto>();

        Cursor cursor = db.query("PedidoProduto", null, null, null, null, null, null);
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            PedidoProduto lPedidoProduto = cursorToPedidoProduto(cursor);
            listaPedidoProduto.add(lPedidoProduto);
            cursor.moveToNext();
        }

        cursor.close();
        return listaPedidoProduto;
    }
    
    private PedidoProduto cursorToPedidoProduto(Cursor cursor) {
        PedidoProduto lPedidoProduto = new PedidoProduto();
        lPedidoProduto.setIdPedidoProduto(cursor.getInt(0));
        lPedidoProduto.setIdProduto(cursor.getInt(1));
        lPedidoProduto.setNomeProduto(cursor.getString(2));
        lPedidoProduto.setValor(cursor.getDouble(3));
        lPedidoProduto.setQuantidade(cursor.getLong(4));
        lPedidoProduto.setObservacao(cursor.getString(5));
        return lPedidoProduto;
    }
Método para excluir
public void excluir(PedidoProduto pedidoProduto) {
        db.delete("PedidoProduto", "idPedidoProduto =" + pedidoProduto.getIdPedidoProduto(), null);
    }

Agradeço desde já pela ajuda!

3 Respostas

V

Para declarar um campo como Id e com auto incremento, sugiro utilizar o exemplo abaixo:

[id] INTEGER NOT NULL PRIMARY KEY ON CONFLICT ROLLBACK AUTOINCREMENT

isso garante que o seu produto terá um ID único, gerado automaticamente, e esse valor será a chave primária da sua tabela.

Abraços…

Z

Amigo, obrigado pela resposta e me desculpe pela demora em responder.
Fiz o teste aqui, coloquei a coluna no formato em que você especificou, mas ele não gerou o id na sequencia.

Saberia me dizer o motivo?

Segue o log

<blockquote>11-11 00:07:32.120: I/SqliteDatabaseCpp(962): sqlite returned: error code = 1, msg = statement aborts at 2: [COMMIT;] cannot commit - no transaction is active, db=/data/data/br_com_unip_menudroid/databases/menuDroid

11-11 00:07:32.125: E/SQLiteDatabase(962): Error inserting nomeProduto=Pepsi idPedidoProduto=0 quantidade=2 idProduto=4 observacao=android.widget.EditText@41b09658 valor=1.8

11-11 00:07:32.125: E/SQLiteDatabase(962): android.database.sqlite.SQLiteException: cannot commit - no transaction is active

11-11 00:07:32.125: E/SQLiteDatabase(962): 	at android.database.sqlite.SQLiteStatement.native_executeSql(Native Method)

11-11 00:07:32.125: E/SQLiteDatabase(962): 	at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:90)

11-11 00:07:32.125: E/SQLiteDatabase(962): 	at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:2019)

11-11 00:07:32.125: E/SQLiteDatabase(962): 	at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1959)

11-11 00:07:32.125: E/SQLiteDatabase(962): 	at android.database.sqlite.SQLiteDatabase.endTransaction(SQLiteDatabase.java:736)

11-11 00:07:32.125: E/SQLiteDatabase(962): 	at android.database.sqlite.SQLiteStatement.releaseAndUnlock(SQLiteStatement.java:273)

11-11 00:07:32.125: E/SQLiteDatabase(962): 	at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:115)

11-11 00:07:32.125: E/SQLiteDatabase(962): 	at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1838)

11-11 00:07:32.125: E/SQLiteDatabase(962): 	at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1711)

11-11 00:07:32.125: E/SQLiteDatabase(962): 	at br.com.unip.menudroid.database.PedidoProdutoDAO.inserirPedidoProduto(PedidoProdutoDAO.java:31)

11-11 00:07:32.125: E/SQLiteDatabase(962): 	at br.com.unip.menudroid.InformarPedidoProduto$1.onClick(InformarPedidoProduto.java:52)

11-11 00:07:32.125: E/SQLiteDatabase(962): 	at android.view.View.performClick(View.java:3644)

11-11 00:07:32.125: E/SQLiteDatabase(962): 	at android.view.View$PerformClick.run(View.java:14313)

11-11 00:07:32.125: E/SQLiteDatabase(962): 	at android.os.Handler.handleCallback(Handler.java:605)

11-11 00:07:32.125: E/SQLiteDatabase(962): 	at android.os.Handler.dispatchMessage(Handler.java:92)

11-11 00:07:32.125: E/SQLiteDatabase(962): 	at android.os.Looper.loop(Looper.java:137)

11-11 00:07:32.125: E/SQLiteDatabase(962): 	at android.app.ActivityThread.main(ActivityThread.java:4517)

11-11 00:07:32.125: E/SQLiteDatabase(962): 	at java.lang.reflect.Method.invokeNative(Native Method)

11-11 00:07:32.125: E/SQLiteDatabase(962): 	at java.lang.reflect.Method.invoke(Method.java:511)

11-11 00:07:32.125: E/SQLiteDatabase(962): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)

11-11 00:07:32.125: E/SQLiteDatabase(962): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)

11-11 00:07:32.125: E/SQLiteDatabase(962): 	at dalvik.system.NativeStart.main(Native Method)

</blockquote>
Z

Consegui aqui. O erro era que eu estava setando o id na class -_-

valeu galera

Criado 9 de novembro de 2012
Ultima resposta 11 de nov. de 2012
Respostas 3
Participantes 2