Problema ao fazer a inserção de dados no SQLite e atualizar a RecyclerView

Estou tento problemas no meu banco SQLite, onde eu criei um método no meu DatabaseController.java que se chama recuperarUltimoDigitado() [ Onde esse método recupera o valor inserido e logo atualiza a lista ], no entanto, isso gera um erro na primeira tentativa de inserir os dados, mas ao abrir novamente o app e adicionar um novo dado, apresenta uma repetição na listagem do mesmo dado anteriormente inserido na RecyclerView e, após isso, os próximos dados são inseridos e listados normalmente, mas eu gostaria de saber o que eu poderia fazer para que isso seja resolvido e funcione corretamente…

public class DatabaseController {

private DatabaseInit databaseInit; private SQLiteDatabase sql;  public DatabaseController(Context context) {     databaseInit = new DatabaseInit(context);     sql = databaseInit.getWritableDatabase(); }  public long inserir(Livro livro){     ContentValues values = new ContentValues();      values.put(Const.AUTOR_LIVRO, livro.getAutor());     values.put(Const.EDITORA_LIVRO, livro.getEditora());     values.put(Const.TITULO_LIVRO, livro.getTitulo());      return sql.insert(Const.TABLE_NAME, null, values);  }  public ArrayList<Livro> recuperar(){     ArrayList<Livro> livros = new ArrayList<>();      Cursor cursor = sql.rawQuery("SELECT " +             Const.TITULO_LIVRO  +  "," +             Const.EDITORA_LIVRO  +  "," +             Const.AUTOR_LIVRO  + " FROM "+             Const.TABLE_NAME , null);      int indexColumnTitle = cursor.getColumnIndex(Const.TITULO_LIVRO);     int indexColumnAuthor = cursor.getColumnIndex(Const.AUTOR_LIVRO);     int indexColumnEditor = cursor.getColumnIndex(Const.EDITORA_LIVRO);      while (cursor.moveToNext()){         Livro livro = new Livro();         livro.setTitulo(cursor.getString(indexColumnTitle));         livro.setEditora(cursor.getString(indexColumnEditor));         livro.setAutor(cursor.getString(indexColumnAuthor));         livros.add(livro);     }      cursor.close();      return livros; }  public Livro recuperarUltimoDigitado(){      Cursor cursor = sql.rawQuery("SELECT * FROM " + Const.TABLE_NAME + " ORDER BY ID DESC", null);      int indexColumnTitle = cursor.getColumnIndex(Const.TITULO_LIVRO);     int indexColumnAuthor = cursor.getColumnIndex(Const.AUTOR_LIVRO);     int indexColumnEditor = cursor.getColumnIndex(Const.EDITORA_LIVRO);      if(cursor.moveToFirst()){         int id = cursor.getInt(cursor.getColumnIndex("id"));         String titulo = cursor.getString(indexColumnTitle);         String autor = cursor.getString(indexColumnAuthor);         String editora = cursor.getString(indexColumnEditor);         cursor.close();         return new Livro(id, titulo, autor, editora);     }      return null; } 

}

Método no adaptador para notificar a atualização da lista:

public void adicionarLiivro(Livro livro){     livros.add(livro);     notifyItemInserted(getItemCount()); } 

Activity Principal:

public class MainActivity extends AppCompatActivity {  private EditText autor, titulo, editora; private DatabaseController controller; private Button btn; private RecyclerView recyclerView; private ArrayList<Livro> livros; private ArrayList<Livro> livrosFiltrados = new ArrayList<>();   @Override protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);    autor = findViewById(R.id.autorId);   titulo = findViewById(R.id.tituloId);   editora = findViewById(R.id.editoraId);   controller = new DatabaseController(this);   livros = controller.recuperar();   livrosFiltrados.addAll(livros);   recyclerView = findViewById(R.id.rcyId);    recyclerView.setLayoutManager(new LinearLayoutManager(this));    final AdapterListBooks adapter = new AdapterListBooks(livrosFiltrados);   recyclerView.setAdapter(adapter);    btn = findViewById(R.id.btnId);    btn.setOnClickListener(new View.OnClickListener() {       @Override       public void onClick(View v) {            Livro livro = new Livro();            Livro livroRertono = controller.recuperarUltimoDigitado();           adapter.adicionarLiivro(livroRertono);             livro.setAutor(autor.getText().toString());           livro.setTitulo(titulo.getText().toString());           livro.setEditora(editora.getText().toString());            long id = controller.inserir(livro);            Toast.makeText(MainActivity.this, "Livro inserido com o Id: " + id, Toast.LENGTH_SHORT).show();       }   });  } 

}

Acredito que o foco do problema seja no método recuperarUltimoDigitado(). Obg desde já pela a ajuda…

Atualizar variáveis em JavaScript

Como posso fazer com que uma variável seja atualizada através das functions? Por exemplo:

function linha1P() {     var qtd = parseFloat(prompt("Quantas unidades deseja adicionar?")     var vlr = parseFloat(34.99 * qtd);     document.Table.Valor.value = vlr + tot; }  function linha2P() {     var qtd = parseFloat(prompt("Quantas unidades deseja adicionar?"));     var vlr = parseFloat(19.99 * qtd);     document.Table.Valor.value = vlr + tot; }  function linha3P() {     var qtd = parseFloat(prompt("Quantas unidades deseja adicionar?"));     var vlr = parseFloat(9.99 * qtd);     document.Table.Valor.value = vlr + tot; }

Queria que a variável começasse como 0 e fosse atualizando conforme fosse clicado nos botões por exemplo ela se tornaria 34.99 se clicado no primeiro botão e quando clicado no segundo seria 54.98.

Atualizar campo de saldo, com C# e Entity Framework

Tenho uma dúvida bastante simples, porém não encontrei como resolvê-la no EF.

Preciso reescrever uma SP que hoje roda no SQL, que faz atualização do saldos de contas.

“UPDATE SALDOS SET CREDITO = CREDITO + 100”

Dessa forma consigo garantir que o saldo será atualizado com o valor atual existente no banco de dados, somando o valor 100.

Como consigo reescrever essa linha, sem a necessidade de buscar previamente o saldo, para atualizar com o novo saldo?

Conseguiram entender minha dúvida?

Script para atualizar status de duplicados

Estou criando um script que atualiza o campo ativo para false caso haja alguma duplicação para um codigo_assinante. O problema que estou tendo é: Se por exemplo, tenho 5 casos de codigo_assinante duplicado, e cada um deles tem 2 duplicações, tenho que rodar o script várias vezes porque ele só atualiza 1 por vez. Preciso fazer que ele entenda que, até quando houve duplicações ele precisará executar.

Segue meu script:

#!/usr/bin/python  import logging  import psycopg2  logging.basicConfig(level=logging.INFO,                     format='%(asctime)s.%(msecs)03d %(levelname)s - %(funcName)s: %(message)s',                     datefmt='%Y-%m-%d %H:%M:%S',                     filename="logs/script_cancela-duplicados.log") conn_adesao = None cursor_adesao = None    def connect_db_adesao():     global cursor_adesao, conn_adesao     host_adesao = ""     db_adesao = ""     db_user_adesao = ""     db_pass_adesao = ""      conn_adesao = psycopg2.connect(host=host_adesao,                                    database=db_adesao,                                    user=db_user_adesao,                                    password=db_pass_adesao)     cursor_adesao = conn_adesao.cursor()     logging.info("Conexao com banco de adesao aberta com sucesso.")  def read_adesao():     logging.info("Realizando consulta no banco de adesao.")     sql = 'with tabela_auxiliar as (' \           'select min(id) as id from assinatura ' \           'where ativo = true ' \           'group by codigo_assinante ' \           'having Count(codigo_assinante) > 1) ' \           'select codigo_assinante, a.id, ativo from assinatura a ' \           'join tabela_auxiliar ta on a.id = ta.id ' \           'where codigo_assinante in (' \           'select codigo_assinante from assinatura ' \           'where ativo = true ' \           'group by codigo_assinante ' \           'having Count(codigo_assinante) > 1)'     cursor_adesao.execute(sql)     total_eventos = cursor_adesao.rowcount     logging.info("Quantidade de clientes recuperados do banco: {}".format(total_eventos))     row = cursor_adesao.fetchone()     while row:         update_db_adesao(row)         row = cursor_adesao.fetchone()     logging.info("Terminou de ler a base de adesao.")   def update_db_adesao(row):     codigo_assinante = row[0]     id = row[1]     logging.info("Cancelando assinatura duplicada codigo_assinante[{}], id[{}]."                  .format(codigo_assinante, id))     sql = "update assinatura set ativo = false " \           "where codigo_assinante = %s " \           "and id = %s "     cursor_adesao.execute(sql, (codigo_assinante, id))     updated_rows = cursor_adesao.rowcount     logging.info("{} linha(s) atualizada no banco, codigo_assinante[{}], id[{}]."                  .format(updated_rows, codigo_assinante, id))     if updated_rows < 1:         logging.warning("Nao ha atualizacao para o codigo codigo_assinante[{}], id[{}]"                         .format(codigo_assinante, id))     conn_adesao.commit()   def close_db():     if cursor_adesao is not None:         cursor_adesao.close()     if conn_adesao is not None:         conn_adesao.close()     logging.info("Conexao com banco fechada com sucesso.")   connect_db_adesao() read_adesao() close_db() 

Outro problema é que, mesmo ele executando e atualizando 1 por vez, estou recebendo o seguinte erro:

Traceback (most recent call last):   File "./cancela_duplicados.py", line 81, in <module>     read_adesao()   File "./cancela_duplicados.py", line 50, in read_adesao     row = cursor_adesao.fetchall() psycopg2.ProgrammingError: no results to fetch 

Atualizar campo de uma seleção de um array de objetos com filter

Tenho uma lista selecionada com alguns registros (não todos) e preciso aplicar uma atualização em campo específico da seleção mas nao quero repetir arr.filter(x).filter(y).filter(z…)

Em uma situação normal de apenas um registro eu faço assim no vue:

const obj = { ‘id’: 1, ‘b’: 2, ‘c’: false }

const resultado = {…obj, c: true}

e através de uma actions chamo uma mutation que atualiza a store:

export const ATUALIZAR_LOG = (state, resultado) => {

const indice = state.logs.findIndex(c => c.id === resultado.id) state.logs.splice(indice, 1, resultado) }

Mas, agora preciso atualizar uma seleção de um array:

const array = [
{ ‘id’: 1, ‘b’: 2, ‘c’: false },
{ ‘id’: 2, ‘b’: 2, ‘c’: false },
{ ‘id’: 3, ‘b’: 2, ‘c’: false },
{ ‘id’: 4, ‘b’: 2, ‘c’: false },
{ ‘id’: 5, ‘b’: 2, ‘c’: false }
]

Preciso atualizar o campo c com true das IDs (2 e 4)

Se eu jogar direto a ID no filter até consigo exemplo:

let campo = { ‘c’: true }
const resultado = array.filter(i => i.id === 3).map(o => Object.assign(o, campo))

ou mesmo chamando uma funcção:

function filtroChave (chave) {
if (chave.id === 2 || chave.id === 4 || …) {
return true
}
return false

}

let campo = { ‘c’: true }
const resultado = array.filter(filtroChave).map(o => Object.assign(o, campo))

O resultado esperado eu consigo mas, não quero lançar de forma estática até pq não sei quantos registros o usuário vai escolher além de ficar horrível de se vê.
Não gosto dos For* da vida mas até tentei um forIn sem sucesso.
Não tenho ideia de como ter esse resultado e mesmo tendo esse resultado não sei como atualizar a vueX

Uso do objeto XMLHttpRequest para realizar uma requisição HTTP assíncrona para atualizar dados no servidor sem atualização completa da página web

Possuo conhecimentos básicos e estou utilizando na aplicação: html/css, javascript, Nodejs, e para o banco – Mongodb – Mongoose.

Minha aplicação é bem simples, como podem ver na imagem abaixo, serve para publicação de textos contendo título e conteúdo. Preciso que assim que um novo conteúdo seja postado ele apareça logo abaixo, na lista de post, porém sem a atualização completa da página. Aceito referências ou videos explicando como fazer.

inserir a descrição da imagem aqui

Segue abaixo o código javascript que tenho até agora.

// Publicar conteúdos   app.get('/home', function(req, res, next){     Postagem.find().sort({date:'desc'}).then(function (posts) {       res.render('home', {posts: posts})//FORMULARIO HTML     })   })  // Recebendo os posts    app.post('/home/postagens', function(req, res, next){   var errosPostagem = []   // Validação da postagem    if(!req.body.titulo || typeof req.body.titulo == undefined || req.body.titulo == null ){       errosPostagem.push({texto: "Título inválido "})   }   if(!req.body.conteudo || typeof req.body.conteudo == undefined || req.body.conteudo == null ){       errosPostagem.push({texto: "Conteudo invalido "})   }       if(errosPostagem.length > 0){         res.send('Título ou conteúdo inválido')       }else {             const novaPostagem = {             titulo: req.body.titulo,             conteudo: req.body.conteudo,             date: req.body.date             }             new Postagem(novaPostagem).save().then(function(){             }).catch(function (erro){               res.send("Houve um erro: "+error)             })       }   }) 

Atualizar valor de campo no MySql usando o PHP if condition

Tenho uma tabela no MySql de nome “Cadastro” onde a mesma possui os seguintes campos:

  • id – Tipo: Auto Increment – Primary Key
  • dataCadastro – Tipo: Date
  • statusFK – Valores 1 (Ativado) e 2 (Desativado) —> No caso este campo esta relacionado a uma tabela chamada “status” ou seja, é um Foreing Key dentro da tabela “cadastro”)

No caso eu criei uma página index.php com uma tabela em HTML com esses três campos e gostaria que quando o campo “dataCadastro” for menor que a data atual, o campo statusFK fosse atualizado automaticamente para o valor 2 (desativado).

Entretanto, estou utilizando o seguinte código abaixo porém o mesmo esta atualizando todos os valores do campo “statusFK” para 2 (desativado) o que no caso seria somente o campo com data inferior a data de hoje:

if ( date('Y-m-d',strtotime($  row['dataCadastro'])) < date('Y-m-d')){  $  connection->query("UPDATE Cadastro SET statusFK = '2'");  }  

Abaixo é o código de conexão ao banco de dados onde a tabela Cadastro esta localizada:

<?php  $  username = 'root'; $  password = ''; $  connection = new PDO( 'mysql:host=localhost;dbname=mysystem;charset=utf8;', $  username, $  password );  ?>  

Como poderia alterar o meu código acima para tal? Obrigado.

Atualizar o Quiz em Javascript

Estou criando um Quiz(como forma de aprendizagem).

Tenho a estrutura HTML para o questinario em checkbox.

JSON que contem as perguntas, opçoes de respostas e resposta correta para verificar com a selecionada.

No Javascript ja consigo fazer a verificação e colocação das perguntas/respostas no HTML “Automaticamente”. Porem,quando clico no botão “proximo” a pergunta nao é atualizada.

Como eu poderia fazer isso?

Erro de sintaxe Sql ao atualizar um registro em C#

Quando executo meu programa pra atualizar um registro, tenho o seguinte erro de sintaxe

inserir a descrição da imagem aqui

Porem minha sintaxe Sql esta correta string comando = "UPDATE cliente SET nome = '" + dto.Nome + "', SET email = '" + dto.Email + "' WHERE id = " + dto.Id;

Camada Apresentação:

using Projeto3Camadas.Code.BLL; 

using Projeto3Camadas.Code.DTO; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;

namespace Projeto3Camadas { public partial class frmCadastroCliente : Form { ClienteBLL bll = new ClienteBLL(); ClienteDTO dto = new ClienteDTO(); public frmCadastroCliente() { InitializeComponent(); }

    private void frmCadastroCliente_Load(object sender, EventArgs e)     {         CarregarGrid();     }      //EVENTO INSERIR E ATUALIZAR     private void btnGravar_Click(object sender, EventArgs e)     {         //LOGICA QUE SE O ID DO CLIENTE FOR VAZIA, EFETUA A OPERAÇÃO DE INSERIR, SE NÃO EFETUA A AÇÃO DE ATUALIZAR         dto.Nome = txtNome.Text;         dto.Email = txtEmail.Text;          if (txtId.Text == "")         {             bll.Inserir(dto);         }         else         {             dto.Id = int.Parse(txtId.Text);             bll.Atualizar(dto);         }          CarregarGrid();     }      //CRIANDO UM METODO ESPESSIFICO PARA CARREGAR O GRID     private void CarregarGrid()     {         gridClientes.DataSource = bll.SelecionarTodosClientes();     }      //AO CLICAR EM UM DETERMINADO CLIENTE, ELE VAI SELECIONAR E MOSTRAR NOS CAMPOS NA POSIÇÃO INDICADA:      private void gridClientes_CellContentClick(object sender, DataGridViewCellEventArgs e)     {         txtId.Text = gridClientes.Rows[e.RowIndex].Cells[0].Value.ToString();         txtNome.Text = gridClientes.Rows[e.RowIndex].Cells[1].Value.ToString();         txtEmail.Text = gridClientes.Rows[e.RowIndex].Cells[2].Value.ToString();     } } 

}

Camada DAL:

using System; 

using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using MySql.Data.MySqlClient;

namespace Projeto3Camadas.Code.DAL { class AcessoBancoDados { //Atributos da classe Mysql private MySqlConnection conn; private DataTable data; private MySqlDataAdapter da;

    //Dados da conexao     private string server = "localhost";     private string user = "root";     private string password = "";     private string database = "dbclientes";      //CONECTAR     public void Conectar()     {         //Se a conexao estiver aberta, eu fecho ela antes de abrir uma nova conexão         if (conn != null)         {             conn.Close();         }         //Guarda os dados da string de conexao         string connStr = $  "server = {server}; user = {user}; password = {password}; database = {database}; pooling = false";         //string connStr = String.Format("server={0};user id={1}; password={2}; database={3}; pooling=false", server, user, password, database);          //Tratamento de exceção         try         {             //Concretiza o objeto conn para conexao e passa por parametro a string de conexao connStr             conn = new MySqlConnection(connStr);             conn.Open();         }         catch (MySqlException ex)         {              throw new Exception(ex.Message);         }     }             //EXECUTAR COMANDO SQL     public void ExecutarcomandoSql(string comandoSql)     {         //Executa o comando passando por parametro a string digitada no comando sql         MySqlCommand comando = new MySqlCommand(comandoSql, conn);         comando.ExecuteNonQuery();         conn.Close();     }      //EXECUTAR LEITURA PREENCHE A TABALE E RETORNAR     public DataTable RetDataTable(string sql)     {         //Retorno de um objeto Aqui so pode comando select         //Concretisa o objeto data e da, em da é passado o sql e a conexao         data = new DataTable();         da = new MySqlDataAdapter(sql, conn);         //Preenche o objeto "da" com os daddos que estao no datatable "data"         da.Fill(data);         //Retorna o objeto "data" já preenchido         return data;     }      //EXECUTAR E RETORNAR OS DADOS SELECIONADOS     public MySqlDataReader RetDataReader(string sql)     {         //Retorna o objeto "MySqlDataReader" dado de um comando SELCET         //concretisa a criação do objeto "comando"         MySqlCommand comando = new MySqlCommand(sql, conn);         //Objeto comando criado, basta executa-lo de modeo que ele retorne um objeto do tipo MySqlDataReader         MySqlDataReader dr = comando.ExecuteReader();         //Retorna o objeto dr ja preenchido         return dr;     } } 

}

Camada DTO:

using System; 

using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

namespace Projeto3Camadas.Code.DTO { class ClienteDTO { private int id; private string nome; private string email;

    public int Id { get => id; set => id = value; }     public string Nome { get => nome; set => nome = value; }     public string Email { get => email; set => email = value; } } 

}

Camada BLL:

using Projeto3Camadas.Code.DTO; 

using Projeto3Camadas.Code.DAL; using System.Data; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MySql.Data.MySqlClient;

namespace Projeto3Camadas.Code.BLL { class ClienteBLL {

    AcessoBancoDados bd = new AcessoBancoDados();      public void Inserir(ClienteDTO dto)     {         //tratamento de erro para passar uma mensagem elegante para o usuario de modo que ele tenha ao menos a possibilidade de tentar resolver o erro ou ate mesmo ajudar o suporte a desvendafr o possivel errro          try         {             //Tratando de um possivel erro do usuario passar um nome com o uso de uma apostrofe ' pois o banco de dados pode confundir              string nome = dto.Nome.Replace("'", "''");             //concretizando a instanciação do objeto, pois esse processo e matado no finally, sendo assim ao cadastrar dois usuarios ou mais simultaneamente, enfrentariamos um erro de objeto nao encontrado ou nao instanciado             bd = new AcessoBancoDados();             bd.Conectar();             string comando = "INSERT INTO cliente(nome, email) VALUES('" + nome + "', '" + dto.Email + "')";             bd.ExecutarcomandoSql(comando);         }         catch (Exception ex)//essa variavel recebe detalhes do erro          {             //nesse caso irá aparecer para o usuario um mensagem mais elegante e descritiva sobre o erro, seguida dos detalhes tecnicos.             throw new Exception( "Erro ao tentar inserir um usuario: DECRIÇÃO DO ERRO => " + ex.Message);         }         //Esse bloco sempre sera executado, dando ou nao dando erro.         finally         {             //nesse caso e bem espessifico o seu uso, pois vai depender de cada aplicão, nesse caso estamos matando o processo do objeto db             //um detalhe e que ao inserir um novo usuario de forma simuntanea, enfrentaremos um novo erro, pois o objeto bd nao esta instanciado.             //SOLUÇÃO   - INSTANCIAR DENTRO DO BLOCO CACTH CONCRETIZANDO             bd = null;         }      }      public void Atualizar(ClienteDTO dto)     {         try         {             string nome = dto.Nome.Replace("'", "''");             bd = new AcessoBancoDados();             bd.Conectar();             string comando = "UPDATE cliente SET nome = '" + dto.Nome + "', SET email = '" + dto.Email + "' WHERE id = " + dto.Id;             bd.ExecutarcomandoSql(comando);         }         catch (MySqlException ex)         {              throw new Exception("Erro ao tentar gravar usuario na banco de dados. DETALHES TECNICOS => " + ex.Message);         }         finally         {             bd = null;         }     }     public DataTable SelecionarTodosClientes()     {         DataTable dt = new DataTable();         try         {             bd = new AcessoBancoDados();              bd.Conectar();             dt = bd.RetDataTable("SELECT * FROM cliente ORDER BY id DESC");         }         catch (Exception ex )         {              throw new Exception("Ero ao selecionar os usuarios no banco de dados. DETALHES TECNICO DO ERRO:" + ex.Message);         }         finally         {          }         return dt;     }  } 

}

Quase nao uso esse site me desculpem se estou fugindo das regras. No mais Obrigado!