使用Java将变量、数组插入MySQM数据库

使用Java将变量、数组插入MySQM数据库,java,sql,jdbc,Java,Sql,Jdbc,我已经成功地将数据插入数据库,只需写入所需的数据。现在我尝试插入变量和数组来保存数据。这是一种在黑暗中拍摄,因为我不知道怎么做,我只是猜测。我没有语法错误,所以我认为我做得很好,但它没有编译。。。我只需要知道具体的语法就可以了 for(int i = 0; i < ReadingFile.altitudeList.size(); i++){ for(int j = 0; j < ReadingFile.temperatureList.size(); j++){ for( int

我已经成功地将数据插入数据库,只需写入所需的数据。现在我尝试插入变量和数组来保存数据。这是一种在黑暗中拍摄,因为我不知道怎么做,我只是猜测。我没有语法错误,所以我认为我做得很好,但它没有编译。。。我只需要知道具体的语法就可以了

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])");
        }}}}}
for(int i=0;i
这将是无效的查询


您需要选择。

您不能在数据库中插入变量或数组。您只能插入数据,即变量或数组的值

一份
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();
+--+---------+--------+-----------+---------+-----------+--------+--------+----+----+ |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| +--+---------+--------+-----------+---------+-----------+--------+--------+----+----+ 请注意,您似乎没有正确设计表以匹配数据。您的
读取文件
似乎有5个
列表
s,您需要找出这些列表中的值如何相互关联。您当前具有5个嵌套循环的逻辑几乎肯定不是您想要的。它产生了一个高度非规范化的结构

例如,假设您有一个id为1的ReadingFile对象,日期为2011年1月20日,距离为10,经过的时间为20,开始时间为30。然后每个列表都有两个值
-温度21,23
-速度51,52
-海拔1000,2000
-纬度45.1,47.2
-长52.3,58.4

然后嵌套循环会像这样将数据插入表中

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();
+--+---------+--------+-----------+---------+-----------+--------+--------+----+----+ |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| +--+---------+--------+-----------+---------+-----------+--------+--------+----+----+ +--+---------+--------+-----------+---------+-----------+--------+--------+----+----+ |id |日期|距离|时间经过|开始时间|温度|速度|高度|纬度|长| +--+---------+--------+-----------+---------+-----------+--------+--------+----+----+ | 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| +--+---------+--------+-----------+---------+-----------+--------+--------+----+----+
因此,我找到了使用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();),以便它知道它已到达列表的末尾。谢谢大家的帮助

这是一个好主意-您可以准备一次语句,每次执行时只更改它的值-非常有效,特别是考虑到那些循环的深度…所以如果我有一个包含[22,25]数据的arrayList velocityList。我能为(inti=0;velocityList.size();I++){stmt.setInt(1,velocityList[I]);}做些什么?它似乎仍然不正确,我肯定我错过了一些东西…我肯定不想让我的数据库看起来像你的表:)而且它完全有意义