2016-04-15 14 views
0

MySQLからデータを取得しました。JDBCを使用しています。すべてのデータをJSONArrayに保存してファイルに書きたいとします。誰か助けてくれますか?JDBCを使用してMySQLからデータを取得し、ファイルにJSONArrayとして保存する

I`mなって、次のエラー:コードで

"Exception in thread "main" org.json.JSONException: A JSONArray text must 
start with '[' at 1 [character 2 line 1]" 

は:

String sql = "SELECT * FROM quizQuestionAnswerGeneral, quizAnswerGeneral, quizQuestionGeneral " 
       + "WHERE quizQuestionAnswerGeneral.idQuestion = quizQuestionGeneral.id " 
       + "AND quizQuestionAnswerGeneral.idAnswer = quizAnswerGeneral.idAnswer;"; 
     preparedStatement = connection.prepareStatement(sql); 

     ResultSet rs = preparedStatement.executeQuery(sql); 

     while (rs.next()) { 
      String id = rs.getString("id"); 
      String idQuestion = rs.getString("idQuestion"); 
      String answerText = rs.getString("answerText"); 
      String correct = rs.getString("correct"); 
      String questionText = rs.getString("questionText"); 

      System.out.println("id: " + id); 
      System.out.println("idQuestion: " + idQuestion); 
      System.out.println("answerText: " + answerText); 
      System.out.println("correct: " + correct); 
      System.out.println("questionText: " + questionText); 
      System.out.println("*----------------------------------------*"); 

      JsonObject obj = Json.createObjectBuilder() 
        .add("id", id) 
        .add("idQuestion", idQuestion) 
        .add("answerText", answerText) 
        .add("correct", correct) 
        .add("questionText", questionText) 
        .build(); 

      String jArray = obj.toString(); 

      JSONArray jsonArray = new JSONArray(jArray); 
      FileWriter file = new FileWriter("C:\\Users\\i5\\Desktop\\Json.txt"); 

      while (jsonArray.iterator().hasNext()) { 
       file.write(jsonArray.toString()); 
      } 
      System.out.println("Succes!"); 

      file.flush(); 
      file.close(); 
+0

"obj"はオブジェクトの配列ではなく、配列に変換しようとしているオブジェクトです。 – dumitru

答えて

0

あなたの代わりにJsonArrayのJSONArrayを持っているので、さまざまなJSON LIBSを混合しているようです。 次のことを試してみてください。

JsonArray jsonArray = Json.createArrayBuilder() 
    .add(obj) 
    .build(); 
+0

私は、このような何かを探していた、高すぎ! –

0

あなたが最初のループの外にJSONArrayオブジェクトを作成したResultSetからのすべての行のためのループ内の値でそれを埋める必要があります。

+0

私は外でそれを作成しましたが、コンパイルには非常に時間がかかります。プログラムを実行してから10分後にはまだデータベースの結果が表示されています。何かがうまくいきませんが、助言に感謝します! –

0

私はあなたのような単純なもののために行くべきだと思う:

  1. 代わりに、文字列の束を得るためのwhileループ内で、あなたのオブジェクトを構築します。
  2. 作成したオブジェクトをリストに追加します。
  3. Gson/Jacksonのようなパーサーを使用してjson Stringを作成します.json Stringを正しく作成するとjson配列が作成されます。

今はwhileループ内にjson配列の束を作成しようとしています。正しい方法は、JsonObjectの束を作成し、whileループの後にそれらをJsonArrayに追加することです。

+0

私はGsonの使い方を学ぶ必要があります。あなたはそれを最初に勧める人ではありません。 –

+0

@VoicuMihaiCatalinあなたは文字通り 'gson.toJson(list)'を使って上記の例から必要なものを得るだけです。 – dambros

関連する問題