【问题标题】:Updating a sqlite database from Java从 Java 更新 sqlite 数据库
【发布时间】:2016-07-12 12:46:13
【问题描述】:

我正在尝试从 javafx 更新一个 sqlite 数据库。我对我的数据库执行以下查询以更新它:

try 
  {
  int saveSpeed = gui.saveSpeedInt - gui.saveSpeedTimer;
  String query2;
  if(gui.textAnswerQ.equals(gui.saveAnswer.getText()) || gui.textAnswerToFQ.equals(gui.saveAnswer.getText()) || gui.SanswerTextField.getText().equals(gui.saveAnswer.getText())){

    String answer = "1";
    query2 = "update StudentsQuestions set Time = '"+saveSpeed+"' set Answer = '"+answer+"' where UserName = '"+gui.saveUser.getText()+"' and Question = '"+gui.question.getText()+"'";                 
  }
  else{
    String answer = "0";
    query2 = "update StudentsQuestions set Time = '"+saveSpeed+"' set Answer = '"+answer+"' where UserName = '"+gui.saveUser.getText()+"' and Question = '"+gui.question.getText()+"'";
  }

  PreparedStatement pst2 = gui.connectionUsers.prepareStatement(query2);
  pst2.execute();
  pst2.close();
 }

当我一直执行更新时,答案字段似乎是空的。我在这里做错了吗? Aswer 是 StudentsQuestions 表中的一个字段,类型为 INTEGER,其模式为“Answer INTEGER”。

编辑:确实,我发现我不能将两个集合放在同一个查询中。但是我不知道如何将我的查询分成准备好的语句。有什么帮助吗?

【问题讨论】:

  • 堆栈跟踪中是否有任何错误?
  • if语句的前两个条件相同
  • @cricket_007 感谢您的通知。 Jibbo 不,我没有收到任何我的数据库正常填充但在字段中以 NULL 回答的内容!
  • 无论如何,你应该使用PreparedStatement,而不是原始的sql查询来防止SQL注入
  • 我对 sqlite 有点陌生,所以你能给我一个如何创建准备好的语句的例子吗?

标签: java sqlite prepared-statement


【解决方案1】:

创建准备好的语句是要走的路。我会这样修复你的代码(主要错误是没有逗号并且在 sql 语句中使用了两次 set):

try 
  {
  int saveSpeed = gui.saveSpeedInt - gui.saveSpeedTimer;
  String query2;
  int answer = 1;
  if(gui.textAnswerQ.equals(gui.saveAnswer.getText()) || gui.textAnswerToFQ.equals(gui.saveAnswer.getText()) || gui.SanswerTextField.getText().equals(gui.saveAnswer.getText())){
    answer = 1;
  }
  else{
    answer = 0;
  }
  query2 = "update StudentsQuestions set Time = ?, Answer = ? where UserName = ? and Question = ?";
  PreparedStatement pst2 = gui.connectionUsers.prepareStatement(query2);
  pst2.setInt(1, saveSpeed);
  pst2.setInt(2, answer);
  pst2.setString(3, gui.saveUser.getText());
  pst2.setString(4, gui.question.getText());
  pst2.execute();
  pst2.close();
 }

欲了解更多信息,请参阅:Using SQLite Prepared statements basics

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 2019-01-16
    • 2012-07-05
    • 2021-06-22
    • 2017-01-15
    • 1970-01-01
    相关资源
    最近更新 更多