我只需写入我需要的数据就可以成功地将数据插入到数据库中。现在我正在尝试插入将保存数据的变量和数组。这是在黑暗中拍摄的,因为我不知道该怎么做,我只是猜到了。我没有语法错误,所以我认为我做得很好,但它没有编译......我只需要知道确切的语法来做到这一点。
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])");
}}}}}
答案 0 :(得分:2)
您无法将变量或数组插入数据库。您只能插入数据,即变量或数组的值。
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个嵌套循环的当前逻辑几乎肯定是不你想要的。它导致高度非规范化的结构。
例如,假设您有一个ID为1的ReadingFile对象,日期为20/1/2011,距离为10,经过的时间为20,开始时间为30.然后每个列表都有两个值; <登记/>
- 温度21,23
- 速度51,52
- 海拔1000,2000
- lat 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 :(得分:1)
这将是无效的查询。
您需要选择PreparedStatement
。
答案 2 :(得分:0)
所以我想出了使用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();),以便它知道它到达列表的末尾。感谢大家的帮助!