0
我使用Java和SQLite和我有以下情況:插入/讀陣列到SQLite數據庫在java中
我有一個數據庫連接,並創建了一個表說瑞銀
現在我有陣列int[] d
和double[] o
在Java中,將其存儲在數據庫中的最有效方式是什麼?我嘗試分段插入並閱讀...插入工作,但它沒有正確讀出。
這裏是我的代碼:
int size = 20;
int[] d = new int[size];
double[] o = new double[size];
double[] c = new double[size];
int[] dtest = new int[size];
double[] otest = new double[size];
double[] ctest = new double[size];
for(int a = 0; a< size; ++a) {
d[a] = a+1;
o[a] = Math.random();
c[a] = Math.random();
}
Connection conn = DriverManager.getConnection(sDbUrl);
Statement stat = conn.createStatement();
stat.executeUpdate("CREATE TABLE ubs (date INTEGER, open DOUBLE, close DOUBLE)");
PreparedStatement prep = conn.prepareStatement("insert into ubs values (?,?,?);");
for(int a = 0; a < size; ++a) {
prep.setInt(1, d[a]);
prep.setDouble(2,o[a]);
prep.setDouble(3,c[a]);
prep.addBatch();
}
conn.setAutoCommit(false);
prep.executeBatch();
conn.commit();
conn.setAutoCommit(true);
ResultSet rs = stat.executeQuery("select * from ubs;");
int a = 0;
while (rs.next())
{
dtest[a] = rs.getInt("date");
otest[a] = rs.getDouble("open");
ctest[a] = rs.getDouble("close");
++a;
}
rs.close();
conn.close();
//test wether contain the same:
for(a = 0; a< size; ++a) {
System.out.println("original: " + o[a] +" saved: "+otest[a]);
}
這裏是它返回:
original: 0.707119601198528 saved: 0.22184821183493642
original: 0.6160408saved: 0.0
original: 0.32427329912284675 saved: 0.0
original: 0.570393637345201 saved: 0.0
original: 0.05334583924906977 saved: 0.0
original: 0.5920142191693711 saved: 0.0
original: 0.5440058264918218 saved: 0.0
original: 0.9792739762035961 saved: 0.0
original: 0.7288365270388483 saved: 0.0
original: 0.862852415217843 saved: 0.0
original: 0.6427868320117643 saved: 0.0
original: 0.4895153310585434 saved: 0.0
original: 0.9163102294291119 saved: 0.0
original: 0.7991642836297964 saved: 0.0
original: 0.35640672534480244 saved: 0.0
original: 0.047751063499014146 saved: 0.0
original: 0.4956032547461785 saved: 0.0
original: 0.8975964852843482 saved: 0.0
original: 0.11097820888267451 saved: 0.0
original: 0.22184821183493642 saved: 0.0
這沒有道理。所以我做錯了什麼?我該如何改進它?順便說一句,這段代碼可能完全沒有意義,因爲我從不同的教程拼湊起來,所以很抱歉。
你必須在'ubs'表3列的數組索引不會增加,但你將只有兩個'值(?。?)'。另外,您正在使用o [a]和c [a]兩次執行'prep.setDouble(2,o [a])'。因此,'c [a]'覆蓋'o [a]'。 – 2013-02-12 14:10:39
@BimaleshJha謝謝我改變了覆蓋錯誤,但它仍然沒有做我想做的事......我更新了上面的數據,保存的列返回原始數據的最後一個條目,然後爲零,關閉列爲空數據庫 – user2058490 2013-02-12 14:54:51
你也應該像插入'插入到ubs的值(?,?,?)',並且在設置con.setAutocmmit(true)之前在'executeBatch()'調用之後執行con.commit()。 – 2013-02-12 15:05:56