2017-04-06 24 views
1

データベースにユーザイベントを格納するアプリケーションを開発しています。その目的のためにSQLiteを使用していますが、クエリを実行しているときにエラーが発生します。以下 は、ボタンを追加したときにアクションをトリガ私のコードでクリックされた: -テーブル作成時にCodename SQLiteエラーが発生しました

add.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent evt) { 
    Log.p(dateLabel.getText().toString()); 
    //if((dateLabel.getText() == null) && (eventArea.getText() == null) && (descriptionArea.getText() == null)){ 
    if ((dateLabel.getText() == "") || (eventArea.getText() == "") || (descriptionArea.getText() == "")) { 
     Dialog.show("Required field", "Please fill all the fields", "OK", ""); 
    } 
    //} 
    else { 

     Label date1 = new Label("Event Date:- "); 
     Label dateLabel1 = new Label(dateLabel.getText()); 
     Label event1 = new Label("Event:- "); 
     Label eventArea1 = new Label(eventArea.getText()); 
     Label description1 = new Label("Event Description:- "); 
     Label descriptionArea1 = new Label(descriptionArea.getText()); 

     Container container1 = TableLayout.encloseIn(2, date1, dateLabel1, event1, eventArea1, description1, descriptionArea1); 
     container1.setUIID("container"); 

     saveEvent.add(container1); 

     ToastBar.showMessage("Event successfull saved", FontImage.MATERIAL_SAVE, 4000); 

     //Databse Working 


     try { 
     db = Display.getInstance().openOrCreate("Events.db"); 
     cur = db.executeQuery("CREATE TABLE 'calendar' ('Date' DATE NOT NULL,'Event' VARCHAR(250) NOT NULL,'Description' VARCHAR(500) NOT NULL);"); 

     String[] values = new String[] { 
     dateLabel.getText(), eventArea.getText(), descriptionArea.getText() 
     }; 

     db.execute("INSERT INTO data('Date','Event','Description') VALUES(?,?,?)", values); 

     Button database = new Button("Database"); 
     calendar.add(database); 
     database.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent evt) { 
     try { 
      cur = db.executeQuery("SELECT * FROM data"); 
      int columns = cur.getColumnCount(); 
      DataEvent.removeAll(); 

      if (columns > 0) { 
      boolean next = cur.next(); 
      if (next) { 
      ArrayList <String[]> data = new ArrayList < >(); 
      String[] columnNames = new String[columns]; 
      for (int iter = 0; iter < columns; iter++) { 
      columnNames[iter] = cur.getColumnName(iter); 
      } 
      while (next) { 
      Row currentRow = cur.getRow(); 
      String[] currentRowArray = new String[columns]; 
      for (int iter = 0; iter < columns; iter++) { 
       currentRowArray[iter] = currentRow.getString(iter); 
      } 
      data.add(currentRowArray); 
      next = cur.next(); 
      } 
      Object[][] arr = new Object[data.size()][]; 
      data.toArray(arr); 
      DataEvent.add(BorderLayout.CENTER, new Table(new DefaultTableModel(columnNames, arr))); 
      } else { 
      DataEvent.add(BorderLayout.CENTER, "Query returned no results"); 
      } 
      } else { 
      DataEvent.add(BorderLayout.CENTER, "Query returned no results"); 
      } 
      DataEvent.revalidate(); 
      Util.cleanup(db); 
      Util.cleanup(cur); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     } 
     }); 

し、アプリケーションによってスローされたエラーは以下の通りです: -

java.sql.SQLException: Query does not return results 
    at org.sqlite.PrepStmt.executeQuery(PrepStmt.java:104) 
    at com.codename1.impl.javase.SEDatabase.executeQuery(SEDatabase.java:172) 
    at com.pivotal.calendar.Calender$4.actionPerformed(Calender.java:211) 
    at com.codename1.ui.util.EventDispatcher.fireActionEvent(EventDispatcher.java:349) 
    at com.codename1.ui.Button.fireActionEvent(Button.java:435) 
    at com.codename1.ui.Button.released(Button.java:467) 
    at com.codename1.ui.Button.pointerReleased(Button.java:566) 
    at com.codename1.ui.Form.pointerReleased(Form.java:2642) 
    at com.codename1.ui.Form.pointerReleased(Form.java:2578) 
    at com.codename1.ui.Component.pointerReleased(Component.java:3266) 
    at com.codename1.ui.Display.handleEvent(Display.java:2025) 
    at com.codename1.ui.Display.edtLoopImpl(Display.java:1070) 
    at com.codename1.ui.Display.mainEDTLoop(Display.java:999) 
    at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) 
    at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176) 
java.io.IOException: Query does not return results 
    at com.codename1.impl.javase.SEDatabase.executeQuery(SEDatabase.java:176) 
    at com.pivotal.calendar.Calender$4.actionPerformed(Calender.java:211) 
    at com.codename1.ui.util.EventDispatcher.fireActionEvent(EventDispatcher.java:349) 
    at com.codename1.ui.Button.fireActionEvent(Button.java:435) 
    at com.codename1.ui.Button.released(Button.java:467) 
    at com.codename1.ui.Button.pointerReleased(Button.java:566) 
    at com.codename1.ui.Form.pointerReleased(Form.java:2642) 
    at com.codename1.ui.Form.pointerReleased(Form.java:2578) 
    at com.codename1.ui.Component.pointerReleased(Component.java:3266) 
    at com.codename1.ui.Display.handleEvent(Display.java:2025) 
    at com.codename1.ui.Display.edtLoopImpl(Display.java:1070) 
    at com.codename1.ui.Display.mainEDTLoop(Display.java:999) 
    at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) 
    at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176) 
+0

'db.executeQuery'は、結果を返さないクエリ用に設計されていないようです。それが例外をスローする理由です –

答えて

5

CREATE TABLEステートメントにdb.executeQuery()を呼び出す代わりに、db.execute()に電話する必要があります。

+0

ありがとうエリックは働くつもりです... @エリックオコネル –

2

CREATE TABLEをクエリではありません;データは返されません。

クエリを実行するには、返されたデータにアクセスするためのカーソルを返すexecuteQuery()を使用します。
他のSQL文を実行する場合は、代わりに​​を使用してください。

関連する問題