Вставка переменных, массивов в базу данных MySQM с использованием Java - PullRequest
1 голос
/ 20 января 2011

Я успешно вставил данные в базу данных, просто записав нужные данные. Сейчас я пытаюсь вставить переменные и массивы, которые будут содержать данные. Это был своего рода выстрел в темноте, потому что я понятия не имел, как это сделать, я просто догадывался. Я не получаю синтаксических ошибок, поэтому я думал, что у меня все хорошо, но он не компилируется ... Мне просто нужно знать точный синтаксис, чтобы сделать это.

for(int i = 0; i < ReadingFile.altitudeList.size(); i++){
 for(int j = 0; j < ReadingFile.temperatureList.size(); j++){
  for( int k = 0; k < ReadingFile.velocityList.size(); k++){
   for( int x = 0; x < ReadingFile.latList.size(); x++){
    for(int y = 0; y < ReadingFile.longList.size();y++){
stat
    .execute("INSERT INTO TrailTracker VALUES(id,ReadingFile.date,ReadingFile.distance, ReadingFile.timeElapsed, ReadingFile.startTime,"
                + "ReadingFile.temperatureList[j], ReadingFile.velocityList[k], ReadingFile.altitudeList[i], ReadingFile.latList[x],"
                + "ReadingFile.longList[y])");
        }}}}}

Ответы [ 3 ]

2 голосов
/ 20 января 2011

Вы не можете вставлять переменные или массивы в базу данных.Вы можете вставлять только данные, т.е. значения ваших переменных или массивов.

A PreparedStatement - это путь.Это выглядело бы примерно так:

int a = 1;
Date b = new Date();
String c = "hello world";

PreparedStatement stmt = conn.prepareStatement("INSERT INTO MyTable VALUES (?,?,?)");
stmt.setInt(1, a);
stmt.setDate(2, new java.sql.Date(b.getTime());
stmt.setString(3, c);
stmt.execute();

Обратите внимание, что не похоже, что вы правильно спроектировали свою таблицу для соответствия вашим данным.Ваши ReadingFile, кажется, имеют 5 List с, и вам нужно выяснить, как значения в этих списках связаны друг с другом.Ваша текущая логика с 5 вложенными циклами почти наверняка не , что вы хотите.В результате получается сильно денормализованная структура.

Например, скажем, у вас был объект ReadingFile с идентификатором 1, датой 20/1/2011, расстоянием 10, прошедшим временем 20 и временем начала 30Тогда каждый из списков имел два значения:
- температура 21, 23
- скорость 51, 52
- высота над уровнем моря 1000, 2000
- широта 45,1, 47,2
- длина 52,3, 58,4

Тогда ваши вложенные циклы будут вставлять данные в вашу таблицу следующим образом:

+--+---------+--------+-----------+---------+-----------+--------+--------+----+----+
|id|     date|distance|timeElapsed|startTime|temperature|velocity|altitude| lat|long|
+--+---------+--------+-----------+---------+-----------+--------+--------+----+----+
| 1|20.1.2011|      10|         20|       30|         21|      51|    1000|45.1|52.3|
| 1|20.1.2011|      10|         20|       30|         21|      51|    1000|45.1|58.4|
| 1|20.1.2011|      10|         20|       30|         21|      51|    1000|47.2|52.3|
| 1|20.1.2011|      10|         20|       30|         21|      51|    1000|47.2|58.4|
| 1|20.1.2011|      10|         20|       30|         21|      52|    1000|45.1|52.3|
| 1|20.1.2011|      10|         20|       30|         21|      52|    1000|45.1|58.4|
| 1|20.1.2011|      10|         20|       30|         21|      52|    1000|47.2|52.3|
| 1|20.1.2011|      10|         20|       30|         21|      52|    1000|47.2|58.4|
| 1|20.1.2011|      10|         20|       30|         23|      51|    1000|45.1|52.3|
| 1|20.1.2011|      10|         20|       30|         23|      51|    1000|45.1|58.4|
| 1|20.1.2011|      10|         20|       30|         23|      51|    1000|47.2|52.3|
| 1|20.1.2011|      10|         20|       30|         23|      51|    1000|47.2|58.4|
| 1|20.1.2011|      10|         20|       30|         23|      52|    1000|45.1|52.3|
| 1|20.1.2011|      10|         20|       30|         23|      52|    1000|45.1|58.4|
| 1|20.1.2011|      10|         20|       30|         23|      52|    1000|47.2|52.3|
| 1|20.1.2011|      10|         20|       30|         23|      52|    1000|47.2|58.4|
| 1|20.1.2011|      10|         20|       30|         21|      51|    2000|45.1|52.3|
| 1|20.1.2011|      10|         20|       30|         21|      51|    2000|45.1|58.4|
| 1|20.1.2011|      10|         20|       30|         21|      51|    2000|47.2|52.3|
| 1|20.1.2011|      10|         20|       30|         21|      51|    2000|47.2|58.4|
| 1|20.1.2011|      10|         20|       30|         21|      52|    2000|45.1|52.3|
| 1|20.1.2011|      10|         20|       30|         21|      52|    2000|45.1|58.4|
| 1|20.1.2011|      10|         20|       30|         21|      52|    2000|47.2|52.3|
| 1|20.1.2011|      10|         20|       30|         21|      52|    2000|47.2|58.4|
| 1|20.1.2011|      10|         20|       30|         23|      51|    2000|45.1|52.3|
| 1|20.1.2011|      10|         20|       30|         23|      51|    2000|45.1|58.4|
| 1|20.1.2011|      10|         20|       30|         23|      51|    2000|47.2|52.3|
| 1|20.1.2011|      10|         20|       30|         23|      51|    2000|47.2|58.4|
| 1|20.1.2011|      10|         20|       30|         23|      52|    2000|45.1|52.3|
| 1|20.1.2011|      10|         20|       30|         23|      52|    2000|45.1|58.4|
| 1|20.1.2011|      10|         20|       30|         23|      52|    2000|47.2|52.3|
| 1|20.1.2011|      10|         20|       30|         23|      52|    2000|47.2|58.4|
+--+---------+--------+-----------+---------+-----------+--------+--------+----+----+
1 голос
/ 20 января 2011

это будет неверный запрос.

Вам нужно перейти на PreparedStatement.

0 голосов
/ 21 января 2011

Так что я нашел самый простой способ сделать то, что мне нужно, используя цикл while

while(!(sampleSize == temp)){
        conn.prepareStatement(insertStr);
        prstat.setInt(1, id);
        prstat.setInt(7, v.get(temp));
        temp++;
        prstat.executeUpdate();
        }

temp изначально устанавливается в ноль и увеличивается при вставке элементов из arrayList в базу данных, пока она не будет равна sampleSize (sampleSize = v.size ();), чтобы он знал, что достиг конца списка. Спасибо всем за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...