【发布时间】:2014-03-14 06:49:19
【问题描述】:
只是好奇是否有人对使这个程序更简单有任何想法。它将数据库中的记录读入 ArrayList 并允许用户按状态搜索记录。它在大约 16000 毫秒内处理包含 100 万条记录的数据库。
import java.sql.*;
import java.util.*;
public class ShowEmployeeDB
{
public static void main(String args[])
{
ArrayList <String> Recs = new ArrayList <String>();
String driverName = "sun.jdbc.odbc.JdbcOdbcDriver";
String connectionURL = "jdbc:odbc:CitizensDB";
Connection con = null;
Statement stmt = null;
String sqlStatement = "SELECT * FROM Citizens";
ResultSet rs = null;
int r = 0;
Scanner scan = new Scanner(System.in);
String search = null;
long starttime = System.currentTimeMillis();
try
{
Class.forName(driverName).newInstance();
con = DriverManager.getConnection(connectionURL);
stmt = con.createStatement();
rs = stmt.executeQuery(sqlStatement);
String ID = null;
String Age = null;
String State = null;
String Gender = null;
String Status = null;
String record = null;
while (rs.next())
{
for (int k = 1; k <= 1; ++k)
{
ID = rs.getString(k) + " ";
for (int j = 2; j <= 2; ++j)
Age = rs.getString(j) + " ";
for (int i = 3; i <= 3; ++i)
State = rs.getString(i).toUpperCase() + " ";
for (int h = 4; h <= 4; ++h)
Gender = rs.getString(h) + " ";
for (int g = 5; g <= 5; ++g)
Status = rs.getString(g) + " ";
}//for
record = ID + Age + State + Gender + Status;
Recs.add(record);
++r;
}//while
rs.close();
stmt.close();
con.close();
} catch (Exception ex) { ex.printStackTrace(); }
String endtime = System.currentTimeMillis() - starttime + "ms";
System.out.println(endtime);
System.out.print("Enter A Search State: ");
search = scan.nextLine().toUpperCase();
Iterator<String> iter = Recs.iterator();
while(iter.hasNext())
{
String s = iter.next();
if (s.contains(search))
{
System.out.println(s);
}
}//while
} // main
} // ShowEmployeeBD
任何建议将不胜感激。提前谢谢!
【问题讨论】:
-
我猜 16000 是一个巨大的时间量,我建议你让查询更快,然后来 java 部分。尝试在数据库端搜索的内容创建索引。还要寻找分页。
-
通常的交易,你要求用户输入然后搜索数据库(利用索引)不要拉整个数据库并在java端搜索记录
-
也;
for (int j = 2; j <= 2; ++j)?? -
那些 for 循环是什么意思?
-
这是 Stack Exchange Code Review 站点的问题。
标签: java jdbc arraylist performance