我试图从 java 中的 sql 数据库中读出一列,我希望结果以数组形式返回。这是功能:
public static double[] open(Connection conn,String symbol,int startdate,int enddate) throws SQLException {
int id = database.get_stockid(conn, symbol);
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery("select price_open from stock_data where stock_id="+id+" and date>="+startdate+" and date<="+enddate+";");
ArrayList<Double> data = new ArrayList<Double>();
while(rs.next()) {
data.add(rs.getDouble("open"));
}
double[] data1 = new double[data.size()];
for(int a = 0; a < data1.length; ++a) {
data1[a]=data.get(a);
}
return data1;
}
这很慢。我的 sqlite 数据库需要 1.5 秒。这是读出专栏的标准方式还是我做错了什么?这是我的应用程序的瓶颈,所以我需要它尽可能快。
编辑:谢谢。我刚刚发现 ArrayList 没有引起问题。瓶颈一定在sql部分:如果我只加载10天的数据,则需要加载10年的数据。所以我必须改进我的 sql 但是如何呢?
这里改进的代码:
public static double[] open(Connection conn,String symbol,int startdate,int enddate) throws SQLException {
int id = database.get_stockid(conn, symbol);
PreparedStatement stat = conn.prepareStatement("select price_open from stock_data where (stock_id="+id +") and (date between "+startdate+" and "+enddate+");");
ResultSet rs = stat.executeQuery();
ArrayList<Double> data = new ArrayList<Double>();
while(rs.next()) {
data.add(rs.getDouble(1));
}
double[] data1 = new double[data.size()];
for(int a = 0; a < data1.length; ++a) {
data1[a]=data.get(a);
}
return data1;
}