从Java更新sqlite数据库

时间:2016-07-12 12:46:14

标签: java sqlite prepared-statement

我正在尝试从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”。

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

1 个答案:

答案 0 :(得分:2)

创建预准备语句是可行的方法。我会修复你的代码(主要错误是没有逗号并在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