私の側から試してみてください
コードを変更し、List を使用して ResultSet の値を保持するソリューションを得ましたが、質問が 1 つだけあります。つまり、Callable で型 (ResultSet) として結果を取得できませんでした。
future get() 関数を使用して値を取得しようとすると、どういうわけか結果セットが空でした
結果セット rs = (結果セット)future.get();
以下は、機能しなかったコードの一部です。
ExecutorService service=Executors.newFixedThreadPool(1);
Callable<ResultSet> callable = new SelectThreadResultSet();
Future<ResultSet> future = service.submit(callable);
ResultSet rs = (ResultSet)future.get();
// Here I dont get any values
while(rs.next()){
System.out.println(rs.getString("EMPLOYEE"));
}
私のために働いた解決策を以下に見つけてください。Listを使用して値を保持し、それを返しました。
クラス SelectThreadClass:
public class SelectThreadClass implements Callable<List<String>> {
public List<String> call(){
ResultSet rs = null;
List<String> strList = new ArrayList<String>();
try {
rs = perform();
while(rs.next()){
strList.add(rs.getString("EMPNAME"));
}
System.out.println("Passed");
} catch (InstantiationException | IllegalAccessException | SQLException e) {
e.printStackTrace();
}
return strList;
}
public ResultSet perform() throws InstantiationException, IllegalAccessException, SQLException{
Connection conn = null;
try {
Class.forName("org.sqlite.JDBC");
try {
conn = DriverManager.getConnection("jdbc:sqlite:C:\\SqlLite\\EMPLOYEE.db");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Statement s = null;
try {
s = conn.createStatement();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ResultSet rs = null;
try {
rs = s.executeQuery(Utils.selectQuery);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs;
}catch (ClassNotFoundException e){
e.printStackTrace();
return null;
}
}
}
クラスユーティリティ:
public class Utils {
public static String selectQuery = "SELECT EMPNAME FROM EMPLOYEEDETAILS";
public static void dbSelect(String query) throws InterruptedException, ExecutionException, SQLException{
ExecutorService service=Executors.newFixedThreadPool(1);
Callable<List<String>> callable = new SelectThreadClass();
Future<List<String>> future = service.submit(callable);
List<String> empList = future.get();
for(String emp : empList){
System.out.println(emp);
}
}
public static void main(String args[]) throws InterruptedException, ExecutionException, SQLException{
dbSelect("SELECT EMPNAME FROM EMPLOYEEDETAILS");
}
}