HI,
Precisei pegar o id ( do tipo auto increment ) do registro que estava inserindo.
Pesquisando no google, achei essas dicas:
Get last inserted value from sqlite database Android
http://stackoverflow.com/questions/4017903/get-last-inserted-value-from-sqlite-database-android
Meu código ficou assim: this.Id = dbHelper.db.insert(DB_TABLE, null, values);
Fiquem na Paz!!!
Mostrando postagens com marcador sqlite. Mostrar todas as postagens
Mostrando postagens com marcador sqlite. Mostrar todas as postagens
segunda-feira, maio 14, 2012
terça-feira, dezembro 13, 2011
Percorrendo os registros de uma consulta no Sqlite
HI,
Precisei num programa para Android, percorrer todos os registros que uma consulta.
Pesquisei como implementar um while e achei esse código
Cursor cur = db.query("tbl_countries", null, null, null, null, null, null);
cur.moveToFirst();
while (cur.isAfterLast() == false) {
view.append("n" + cur.getString(1));
cur.moveToNext();
}
cur.close();
o restante do código se encontra aqui
http://www.higherpass.com/Android/Tutorials/Accessing-Data-With-Android-Cursors/2/
Fiquem na Paz!!!!
Precisei num programa para Android, percorrer todos os registros que uma consulta.
Pesquisei como implementar um while e achei esse código
Cursor cur = db.query("tbl_countries", null, null, null, null, null, null);
cur.moveToFirst();
while (cur.isAfterLast() == false) {
view.append("n" + cur.getString(1));
cur.moveToNext();
}
cur.close();
o restante do código se encontra aqui
http://www.higherpass.com/Android/Tutorials/Accessing-Data-With-Android-Cursors/2/
Fiquem na Paz!!!!
sexta-feira, dezembro 02, 2011
Problema com acentuação no Sqlite do Android
HI,
Estava com esse probleminha na rotina de importação do arquivo no formato csv. As palavras acentuadas eram gravadas no banco de dados com os caracteres acentuados com uma interrogação no seu lugar. A palavra Atenção por exemplo, era gravada com Aten??o.
Depois de muito procurar, acabei achando essa solução
Android - make sure the SQLite uses UTF-8 as charset
http://stackoverflow.com/questions/4276215/android-make-sure-the-sqlite-uses-utf-8-as-charset/6002118#6002118
Fiquem na Paz!!!!
Estava com esse probleminha na rotina de importação do arquivo no formato csv. As palavras acentuadas eram gravadas no banco de dados com os caracteres acentuados com uma interrogação no seu lugar. A palavra Atenção por exemplo, era gravada com Aten??o.
Depois de muito procurar, acabei achando essa solução
Android - make sure the SQLite uses UTF-8 as charset
http://stackoverflow.com/questions/4276215/android-make-sure-the-sqlite-uses-utf-8-as-charset/6002118#6002118
Fiquem na Paz!!!!
quinta-feira, outubro 20, 2011
Alterando a quebra de linha de um campo no Sqlite
HI,
Precisei trocar a quebra de linha de um campo aonde é armazenada uma observação. O problema é que o usuário pode digitar com quebra de linha e quando exporta o arquivo txt, o registro fica em mais de uma linha no arquivo.
Para solucionar, tive que dá um replace no select para trocar a quebra de linha por um espaço.
Achei a dica aqui
How to remove carriage returns in a text field in sqlite?
http://stackoverflow.com/questions/4642535/how-to-remove-carriage-returns-in-a-text-field-in-sqlite
Fiquem na paz!!!
Precisei trocar a quebra de linha de um campo aonde é armazenada uma observação. O problema é que o usuário pode digitar com quebra de linha e quando exporta o arquivo txt, o registro fica em mais de uma linha no arquivo.
Para solucionar, tive que dá um replace no select para trocar a quebra de linha por um espaço.
Achei a dica aqui
How to remove carriage returns in a text field in sqlite?
http://stackoverflow.com/questions/4642535/how-to-remove-carriage-returns-in-a-text-field-in-sqlite
Fiquem na paz!!!
Marcadores:
android,
quebra de linha,
sqlite,
trocar
segunda-feira, agosto 29, 2011
Otimizando o processo de insert de muitos registros no Android
HI,
A rotina de importação que implementei usando o ContentValues... put... insert... ficou uma carroça puxada por lesmas. Vou ter que refazer tudo. Procurei por dicas no google e achei bons materiais. Ainda vou implementar.
Aconselho uma lida nesse testo
Database Speed Comparison
http://www.sqlite.org/speed.html
Achei dua maneiras, e as duas tem que ter controle de transação.
How to speed up multiple inserts in SQLite
http://www.tanguay.info/web2008/codeExample.php?id=728
Android: Using DatabaseUtils.InsertHelper for faster insertions into SQLite database
http://www.outofwhatbox.com/blog/2010/12/android-using-databaseutils-inserthelper-for-faster-insertions-into-sqlite-database/
Tem esse outro texto também sobre como otimizar
SQLite Optimization FAQ
http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html
Acredito que eu passe a utilizar esse código
editando
Achei esse código e estou utilizando ele. Passou de uns 15 minutos para menos de 1, hehehe.
Notes on Android SQLite bulk insert
http://sagistech.blogspot.com/2010/07/notes-on-android-sqlite-bukl-insert.html
Fiquem na Paz!!!
A rotina de importação que implementei usando o ContentValues... put... insert... ficou uma carroça puxada por lesmas. Vou ter que refazer tudo. Procurei por dicas no google e achei bons materiais. Ainda vou implementar.
Aconselho uma lida nesse testo
Database Speed Comparison
http://www.sqlite.org/speed.html
Achei dua maneiras, e as duas tem que ter controle de transação.
How to speed up multiple inserts in SQLite
http://www.tanguay.info/web2008/codeExample.php?id=728
Android: Using DatabaseUtils.InsertHelper for faster insertions into SQLite database
http://www.outofwhatbox.com/blog/2010/12/android-using-databaseutils-inserthelper-for-faster-insertions-into-sqlite-database/
Tem esse outro texto também sobre como otimizar
SQLite Optimization FAQ
http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html
Acredito que eu passe a utilizar esse código
try {
mDb.beginTransaction();
for (Value value : values) {
ih.prepareForInsert();
ih.bind(colIdx, value.getSomeValue());
// ...
ih.execute();
}
mDb.setTransactionSuccessful();
} finally {
mDb.endTransaction();
}
editando
Achei esse código e estou utilizando ele. Passou de uns 15 minutos para menos de 1, hehehe.
Notes on Android SQLite bulk insert
http://sagistech.blogspot.com/2010/07/notes-on-android-sqlite-bukl-insert.html
Fiquem na Paz!!!
quarta-feira, agosto 24, 2011
Controle de transação no SQLite
HI,
Precisei colocar um controle de transação em uma rotina do sistema para Android que estou desenvolvendo.
db.beginTransaction();
try {
db.execSQL(...);
db.execSQL(...);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
achei aqui essa dica
http://groups.google.com/group/android-developers/browse_thread/thread/ebe11a0fada35754
outro exemplo
http://www.helloandroid.com/tutorials/database-transactions
Fiquem na Paz!!!
Precisei colocar um controle de transação em uma rotina do sistema para Android que estou desenvolvendo.
db.beginTransaction();
try {
db.execSQL(...);
db.execSQL(...);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
achei aqui essa dica
http://groups.google.com/group/android-developers/browse_thread/thread/ebe11a0fada35754
outro exemplo
http://www.helloandroid.com/tutorials/database-transactions
Fiquem na Paz!!!
domingo, maio 22, 2011
Obtendo o Banco de Dados do emulador Android
HI,
Essa dica é para obter o banco de dados que está no emulador.
Acessem esse site
Precisei manipular o banco de dados para saber como excluir um campo da tabela, criar uma trigger, etc.
Não dá para usar o comando alter table drop column no android. É preciso renomear a tabela, criar uma nova com o mesmo nome, depois dá um select insert para pupular a nova tabela e depois excluir a tabela que foi renomeada.
Fica assim o comando
db.execSQL("ALTER TABLE \"main\".\"expenses\" RENAME TO \"oXHFcGcd04oXHFcGcd04_expenses\"");
db.execSQL("CREATE TABLE \"main\".\"expenses\" (\"_id\" integer PRIMARY KEY ,\"description\" text NOT NULL ,\"value\" number(9,2) NOT NULL );");
db.execSQL("INSERT INTO \"main\".\"expenses\" SELECT \"_id\",\"description\",\"value\" FROM \"main\".\"oXHFcGcd04oXHFcGcd04_expenses\";");
db.execSQL("DROP TABLE \"main\".\"oXHFcGcd04oXHFcGcd04_expenses\";");
Fiquem na Paz!!!
Gravando datas no SQLite do Android
HI,
Continuo avançando aqui no exemplo expenses. Hoje consegui gravar a data no banco de dados, graças a Deus.
Depois de muita tentativa e erro e muitas pesquisas no Google, fui achando as soluções.
Primeiro erro que me deparei foi esse: java.text.ParseException: Unparseable date
Tava tentando converter a data da despesa ( uma string ) que tava no formato dd-MM-yyyy para jogar dentro de uma variável do tipo data. Só depois que percebi que tinha esquecido de trocar o traço pela barra deixando o formato assim: dd/MM/yyyy.
Código para converter uma string em data
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Date datepayment = formatter.parse(datepaymentText.getText().toString());
datepaymentText é um Button.
O segundo erro que me deparei foi: java.lang.ClassCastException: java.util.Date
Pensei que o problema era na hora de gravar no campo data da tabela. Desabilitei a linha que dá um insert no banco e mesmo assim tava dando esse erro. Então deduzi que o problema era na passagem de parametro. Fiquei pensando, como é que pode passar um campo data para um metódo que tem uma variavel do tipo data e dá erro?
Pesquisando no google descobrir que ao invés de usar a biblioteca java.sql.Date, eu deveria usar java.util.Date. Depois que fiz isso, não deu mais erro.
E nessa mesma busca vi que eu deveria converter essa variável data que tá no formato dd/MM/yyyy para yyyy-MM-dd, que é o formaro do banco de dados.
O código para gravar a data no banco de dados ficou assim:
public long createExpense(Date datepayment){
ContentValues initialValues = new ContentValues();
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
dateFormat.applyPattern("yyyy-MM-dd");
initialValues.put(KEY_DATEPAYMENT, dateFormat.format(datepayment));
return mDb.insert(DB_TABLE, null, initialValues);
}
Deixei só o campo data para exemplificar.
Agora tá beleza, tá gravando e recuperando o campo data
Ficou assim a tela do programa

Espero que possa ser útil.
Páginas que me ajudaram
http://www.guj.com.br/java/76586-converter-um-campo-de-um-text-field-em-date#403825
http://www.guj.com.br/java/36076-converter-string-para-uma-data
http://stackoverflow.com/questions/754684/how-to-insert-a-sqlite-record-with-a-datetime-set-to-now-in-android-application
http://stackoverflow.com/questions/3842509/android-java-datetime-values-from-string-to-long-to-string-issue
Fiquem na Paz!!!
Continuo avançando aqui no exemplo expenses. Hoje consegui gravar a data no banco de dados, graças a Deus.
Depois de muita tentativa e erro e muitas pesquisas no Google, fui achando as soluções.
Primeiro erro que me deparei foi esse: java.text.ParseException: Unparseable date
Tava tentando converter a data da despesa ( uma string ) que tava no formato dd-MM-yyyy para jogar dentro de uma variável do tipo data. Só depois que percebi que tinha esquecido de trocar o traço pela barra deixando o formato assim: dd/MM/yyyy.
Código para converter uma string em data
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Date datepayment = formatter.parse(datepaymentText.getText().toString());
datepaymentText é um Button.
O segundo erro que me deparei foi: java.lang.ClassCastException: java.util.Date
Pensei que o problema era na hora de gravar no campo data da tabela. Desabilitei a linha que dá um insert no banco e mesmo assim tava dando esse erro. Então deduzi que o problema era na passagem de parametro. Fiquei pensando, como é que pode passar um campo data para um metódo que tem uma variavel do tipo data e dá erro?
Pesquisando no google descobrir que ao invés de usar a biblioteca java.sql.Date, eu deveria usar java.util.Date. Depois que fiz isso, não deu mais erro.
E nessa mesma busca vi que eu deveria converter essa variável data que tá no formato dd/MM/yyyy para yyyy-MM-dd, que é o formaro do banco de dados.
O código para gravar a data no banco de dados ficou assim:
public long createExpense(Date datepayment){
ContentValues initialValues = new ContentValues();
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
dateFormat.applyPattern("yyyy-MM-dd");
initialValues.put(KEY_DATEPAYMENT, dateFormat.format(datepayment));
return mDb.insert(DB_TABLE, null, initialValues);
}
Deixei só o campo data para exemplificar.
Agora tá beleza, tá gravando e recuperando o campo data
Ficou assim a tela do programa

Espero que possa ser útil.
Páginas que me ajudaram
http://www.guj.com.br/java/76586-converter-um-campo-de-um-text-field-em-date#403825
http://www.guj.com.br/java/36076-converter-string-para-uma-data
http://stackoverflow.com/questions/754684/how-to-insert-a-sqlite-record-with-a-datetime-set-to-now-in-android-application
http://stackoverflow.com/questions/3842509/android-java-datetime-values-from-string-to-long-to-string-issue
Fiquem na Paz!!!
sexta-feira, maio 20, 2011
Campo data com valor padrão no SQLite
HI,
Ainda tou engatinhando no Android, levando uns tombos, mas graças a Deus eu tou conseguindo avançar.
No exemplo de controle de despesas já coloquei um spinner para indicar o tipo de pagamento da despesa.
Agora a minha batalha é colocar o campo data dessa despesa. Estava incluindo no SQLite Manager, extensão do firefox, um campo do tipo data e selecionei para não ter valor null, e quando se faz isso, temos obrigação de informar um valor padrão. Tinha colocado SYSDATE, mas não deu certo.
Pesquisando no google, encontrei uma solução usando uma trigger para atualizar a data antes de inserir.
CREATE TABLE foo (
id NUMBER NOT NULL,
created DATE);
CREATE TRIGGER insert_date AFTER INSERT ON foo
BEGIN
UPDATE foo SET created = DATETIME('NOW') WHERE rowid = new.rowid;
END;
Só que dessa maneira aí, o campo vai ser atualizado, mesmo que eu informe a data na tela.
Modifiquei a trigger para testar se o campo está vazio, se tiver, atualiza a data atual do banco.
CREATE TRIGGER insert_date AFTER INSERT ON foo
BEGIN
UPDATE foo SET created = DATETIME('NOW') WHERE rowid = new.rowid and new.created is null;
END;
Agora vou tentar colocar o campo data no formulário.
Espero que possar ser úitl, fiquem na Paz
Assinar:
Postagens (Atom)