我该如何在我的应用程序中使用SQLite数据库?

3

我正在尝试将数据库与我的系统连接,但每次调用函数后,在应用程序的浏览器中都会显示如下内容:

“granjas”表为空

以下是代码:

JS部分:

var db = openDatabase("Meubanco", "3.0", "Mybase", 6000);
db.transaction(function(criar){
  criar.executeSql("CREATE TABLE granjas (ID INTEGER PRIMARY KEY AUTOINCREMENT, nome TEXT, email TEXT, cnpj TEXT)");
});

function cadastrar(){

var nome = document.getElementById("nome").value;
var email = document.getElementById("email").value;
var cnpj = document.getElementById("cnpj").value;

db.transaction(function(armazenar){
   armazenar.executeSql("INSERT INTO granjas (nome, email, cnpj) VALUES (?,?@email.com,?)", [nome, email, cnpj]);
   alert("Granja " + document.getElementById("nome").value + " Cadastrada!");
  });
};

关于HTML:

<form onsubmit="cadastrar();">
  <div class="form-group">
    <label>Nome</label>
    <input type="text" class="form-control" id="nome" placeholder="nome">
  </div>
  <div class="form-group">
    <label for="exampleInputEmail1">Endereço de email</label>
    <input type="email" class="form-control" id="email" aria-describedby="emailHelp" placeholder="email">
  </div>
  <div class="form-group">
    <label>CNPJ</label>
    <input type="text" class="form-control" id="cnpj" placeholder="cnpj">
  </div>
  <form>
  <div class="form-group">
    <label for="exampleFormControlFile1">Insira uma imagem da granja<small id="emailHelp" class="form-text text-muted">Ação Opcional.</small></label>
    <input type="file" class="form-control-file" id="imagem_da_empresa"/>
  </div>
  </form>
  <button type="button" class="btn btn-primary" onclick="cadastrar();">Cadastrar</button>
  <a type="button" class="btn btn-outline-info" href="listagem_de_granjas.html">Granjas Cadastrdas</a>
</form>

我想我的意图很明显。这是项目链接:https://github.com/Nidhoggui/beta-_projetoavicultura


在浏览器的开发者工具中,从“应用程序”选项卡左侧点击“网络”选项卡。是否有将数据提交到数据库时出现错误? - DVN-Anakin
不,它只是没有将数据发送到数据库。 - L. Guilherme P. Melquiades
请查看下面的答案 - DVN-Anakin
1个回答

1
问题: email?email.com 在中引起了问题。
armazenar.executeSql("INSERT INTO granjas (nome, email?email.com, cnpj) VALUES (?,?,?)", [nome, email, cnpj])

说明

.executeSql()函数接受成功和错误回调函数 - 您可以使用它们来查看.executeSql()是否被正确执行:

armazenar
   .executeSql(
       "INSERT INTO granjas (nome, email, cnpj) VALUES (?,?email.com,?)",
       [nome, email, cnpj], 
       function() { console.log("SUCCESS") }, 
       function(data, error) { console.log("There was an ERROR", error) });

上面的代码会将这个错误输出到控制台:
SQLError {code: 5, message: "could not prepare statement (1 near "@email": syntax error)"}code: 5message: "could not prepare statement (1 near "@email": syntax error)"__proto__: SQLError 

解决方案
function cadastrar(){
  var nome = document.getElementById("nome").value;
  var email = document.getElementById("email").value + '@email.com';
  var cnpj = document.getElementById("cnpj").value;

  db.transaction(function(armazenar){
    armazenar
       .executeSql(
           "INSERT INTO granjas (nome, email, cnpj) VALUES (?,?,?)",
           [nome, email, cnpj], 
           function() { 
                console.log("SUCCESS");
                alert("Granja " + document.getElementById("nome").value + " Cadastrada!");
            }, 
           function(data, error) { 
                console.log("There was an ERROR", error) 
                alert("There was a technical error. Try again.");
            });
  }); 
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接