次のシナリオがあります。私のアプリケーションでは、AsyncTask Aを使用してデータベースに接続し、ログインを確認しています。このAsyncTaskのdoInBackgroundメソッドは、ブール値を返します。一部のユーザーインタラクションでは、AsyncTask Bを使用して同じデータベースに接続し、ResultSetを取得しています。すべて正常に動作していますが、AsyncTaskを1つだけ使用したいと思います。これどうやってするの?
AsyncTaskコード
@Override
protected Boolean doInBackground(String... arg0) {
String username = arg0[0];
String password = arg0[1];
Boolean v = false;
ResultSet rs = null;
Statement stmt = null;
try {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
conn = DriverManager.getConnection(jdbcURL, user, passwd);
try {
stmt = conn.createStatement();
try {
rs = stmt
.executeQuery("execute"
+ username + "'");
if (rs.next()) {
String p=rs.getString("pass_word");
if (p==null){
if(password.equals(""))
v = true;}
else
if(p.equals(password))
v=true;
}
} finally {
try {
rs.close();
} catch (Throwable ignore) {
}
}
} finally {
try {
stmt.close();
} catch (Throwable ignore) {
}
}
} catch (java.sql.SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (java.lang.ClassCastException e) {
e.printStackTrace();
}
return v;
}
AsyncTaskBコード
@Override
protected ResultSet doInBackground(String... params) {
Statement stmt = null;
ResultSet rs = null;
try {
if (conn == null) {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
conn = DriverManager.getConnection(jdbcURL, user, passwd);
}
stmt = conn.createStatement();
rs = stmt.executeQuery(params[0]);
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}