0
サーバーテーブルにはサーバー名に関する情報が含まれているスタースキーマモデルがあります。 情報テーブルには、特定のサーバーに必要な情報が含まれています。 実際のデータテーブルには、どのサーバにどの情報が含まれているかに関する情報が含まれています。JDBCを使用して効率的にスタースキーマに挿入
Server Table
Information Table
Actual Data Table
今、私はIS-私が使用して データテーブルにデータを挿入しようとしていますが午前問題J DBC。しかし、スタースキーマモデルの実際のデータテーブルにどのようにデータを追加すればよいかわかりません。私はデータベースに接続して各情報のたびにそれを挿入するか、データベースと一度だけ通信することでそれを行うことができる直接的な方法があります。これは私のコードで、私は各サーバーのすべての情報を取得しています。 IndexDataはOracle Databaseに値を挿入するクラスです。
public void fetchlog() {
InputStream is = null;
InputStream isUrl = null;
FileOutputStream fos = null;
try {
is = HttpUtil.getFile(monitorUrl);
if(monitorUrl.contains("stats.jsp") || monitorUrl.contains("monitor.jsp")) {
trimUrl = monitorUrl.replaceAll("(?<=/)(stats|monitor).jsp$", "ping");
}
isUrl = HttpUtil.getFile(trimUrl);
BufferedReader in = new BufferedReader (new InputStreamReader (is));
String line;
int i=0,j=0,k=0;
while ((line = in.readLine()) != null) {
if(line.contains("numDocs")) {
docs = in.readLine().trim();
//So should I keep on inserting into Database for each information, like this
//IndexData id = new IndexData(timeStamp, ServerName, InformationName, docs);
} else if(line.contains("indexSize")) {
indexSize = in.readLine().trim();
//For this information-- the same way?
//IndexData id = new IndexData(timeStamp, ServerName, InformationName, indexSize);
} else if(line.contains("cumulative_lookups")) {
cacheHits= in.readLine().trim();
//For this information too-- the same way?
//IndexData id = new IndexData(timeStamp, ServerName, InformationName, cacheHits);
} else if(line.contains("lastCommitTime")) {
lastCommitTime = in.readLine().trim();
//For this information too-- the same way?
//IndexData id = new IndexData(timeStamp, ServerName, InformationName, lastCommitTime);
}
BufferedReader inUrl = new BufferedReader (new InputStreamReader (isUrl));
String lineUrl;
Pattern regex = Pattern.compile("<str name=\"status\">(.*?)</str>");
while ((lineUrl = inUrl.readLine()) != null) {
System.out.println(lineUrl);
if(lineUrl.contains("str name=\"status\"")) {
Matcher regexMatcher = regex.matcher(lineUrl);
if (regexMatcher.find()) {
upDown= regexMatcher.group(1);
//For this information too-- the same way?
//IndexData id = new IndexData(timeStamp, ServerName, InformationName, upDown);
}
System.out.println("Status:- " + status);
}
}
//Or is there some other way we can insert directly into database by communicating with database only one time not multiple times for each information.
//IndexData id = new IndexData(timeStamp, ServerName, InformationName, Value);
fos = new FileOutputStream(buildTargetPath());
IOUtils.copy(is, fos);
} catch (FileNotFoundException e) {
log.error("File Exception in fetching monitor logs :" + e);
} catch (IOException e) {
log.error("Exception in fetching monitor logs :" + e);
}
}
I hope question is clear to everyone. Any suggestions will be appreciated.
起動時にjdbc接続プーリングを使用しています。しかし、どうやってデータベースに挿入すればいいのか分かりません。スキーマがスタースキーマでない場合は、次のような方法でこれを行いました。このように、 'IndexData id = new IndexData(timeStamp、ServerName、updown、indexSize、cacheHits、lastCommit、docs);' – ferhan
JDBCを使用したJavaでのバッチ操作の例接続プールからの接続方法を既に知っていると仮定すると、 http://www.jguru.com/faq/view.jsp?EID=5079 –