答えて
あなたは最速意味最高による場合 - これはJDBCを使用するよりも道高速になりますように私は、ファイルをダンプするネイティブデータベースツールを使用して検討します。
プログラムで行う必要があります – Gauls
Java(+ Hibernate?)は、プロセスを不必要にダウンさせる原因になります。 sqlplusスクリプトとスプール形式のフィールドをxmlファイルに簡単に追加できます。
POJOのみ許可 – Gauls
私はデータベースのビルド手順(XMLパスなど)を使用して、既にxml形式で変換されたデータを取得します。
ファイルに書き込むには2通りの方法があります。
1.データを取得するためにJavaインタフェース(JDBC)を使用する必要がある場合は、このデータを読み込んでファイル(出力を確認する必要がない限り、XMLパーサーは関与しません)。
2. Javaの制限がない場合は、XMLデータをファイルにダンプするストアドプロシージャを記述します。
更新はコメントする:最速の検索のため
ワークフロー:
- データを取得し、ファイルにダンプしますストアドプロシージャを作成します。
- どちらのSPでもファイル名を返すことができます。また、出力場所を動的に管理できるようにファイル名を取得するSPを作成することもできます。
私は非常に長い間Oracleを使用していませんが、このlinkがキックスタートに役立つことを願っています。
データベースにクエリを実行し、すべてのデータをRESULTSETに取得し、次のコードを使用してルート要素を開始することができます。
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.newDocument();
Element Element_root = document.createElement("rootElement");
その後あなたは
Element Element_childnode = document.createElement("childnode");//create child node
Element_childnode.appendChild(document.createTextNode("Enter the value of text here"));//add data to child node
Element_root.appendChild(Element_childnode);//close the child node
を使用して、子要素のように多くの人がこれを使用しFAILなし最後に
をルートを閉じて開かれたノードを閉じることを忘れないでくださいに追加することができます根を閉じてください。
終わりdocument.appendChild(Element_causelist);
あなたはXSDが良い結果を提供するオンライン検証をグーグル.....それに対してそれをあなたのXMLを検証している場合 .... http://tools.decisionsoft.com/schemaValidate/
注:TIME !!!それはデータが巨大であるときに時間がかかります... しかし、これは一つと、それを行うのが最も簡単な方法だと思う....データを考慮して、私は1つは、少ないトラフィック....このことができます
希望....グッドラックガウル....
あなたは-ve投票を説明することができますか?これまで誰がこれを行ったのですか...答えで何が間違っているのか説明できます –
私はdownvoteをしませんでしたが、レコードの大部分は非常にメモリを消費します。 –
ヒキガエルでは、あなたは右の表をクリックすると、XMLへのエクスポート]をクリックします。商用版ではすべてのテーブルをエクスポートできますが、わかりません
DBがOracleの場合は、SQLXクエリでJDBCを使用するだけで済みます。これにより、クライアント側で独自に行うよりも、サーバー上のXMLフラグメントとして直接結果セットが生成されます。 SQLXは8.1.7からAuroraプロジェクトとして、また9i以降はXMLDBとして標準で提供されています。
ここは簡単な例です。 XMLELEMENTに加えて
select XMLelement ("Process",
XMLelement("number", p.p_ka_id, '.', p_id),
XMLElement("name", p.p_name),
XMLElement ("processGroup", pg.pg_name))
from
PMP_processes p,
PMP_process_groups pg
where
condition ;
、SQLXはあなたにどんな結果ツリーを可能にXMLattribute、XMLFOREST、XMLaggregate ...を持っています。
もう1つの可能性(JDBCドライバですべてのdbを操作する)は、Apache Cocoonを使用することです。実際には2つの方法があります:XSP(単独で、およびESQLで)。両方の技術が素早く開発できます。
XSP単独の例XSPをJSPのように少し考えてみてください。例えばDB。
<?xml version="1.0"?>
<xsp:page language="java" xmlns:xsp="http://apache.org/xsp"
xmlns:esql="http://apache.org/cocoon/SQL/v2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://apache.org/cocoon/SQL/v2 xsd/esql.xsd"
space="strip">
<xsp:structure>
<xsp:include>java.sql.Connection</xsp:include>
<xsp:include>java.sql.DriverManager</xsp:include>
<xsp:include>java.sql.PreparedStatement</xsp:include>
<xsp:include>java.sql.SQLException</xsp:include>
<xsp:include>java.sql.ResultSet</xsp:include>
</xsp:structure>
<xsp:logic><![CDATA[
private static final String connectionString =
"jdbc:mysql://localhost/mandarin?user=mandarin&password=mandarin" ;
private Connection conn = null ;
private PreparedStatement pstmt = null ;
private void openDatabase() {
try {
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
conn = DriverManager.getConnection (connectionString);
pstmt = conn.prepareStatement(
"select " +
" count(*) as cardinality " +
" from " +
" unihan50 u " +
" where " +
" unicode_id >= ? and " +
" unicode_id <= ? ") ;
} catch (SQLException e) {
e.printStackTrace();
}
}
private int getRangeCardinality (int lowerBound, int upperBound) {
int cnt = 0 ;
try {
cnt = 2 ;
pstmt.setInt (1, lowerBound) ;
pstmt.setInt (2, upperBound) ;
boolean sts = pstmt.execute() ;
if (sts) {
ResultSet rs = pstmt.getResultSet();
if (rs != null && rs.next()) {
cnt = rs.getInt ("cardinality") ;
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return cnt ;
}
private void closeDatabase() {
try {
pstmt.close() ;
} catch (SQLException e) {
e.printStackTrace();
}
try {
conn.close() ;
} catch (SQLException e) {
e.printStackTrace();
}
}
]]>
</xsp:logic>
<ranges>
<xsp:logic><![CDATA[
openDatabase() ;
for (int i = 0; i < 16 ; i++) {
int from = i * 0x1000 ;
int to = i * 0x1000 + 0x0fff ;
]]>
<range>
<from>0x<xsp:expr>Integer.toString(from, 16)</xsp:expr></from>
<to>0x<xsp:expr>Integer.toString(to, 16)</xsp:expr></to>
<count><xsp:expr>getRangeCardinality (from, to)</xsp:expr></count>
</range>
}
closeDatabase() ;
</xsp:logic>
</ranges>
</xsp:page>
XSPはさらにESQLと相まって簡単です。ここでDOM、XMLをしませ書き込むためのサンプル
<?xml version="1.0" encoding="UTF-8"?>
<xsp:page language="java" xmlns:xsp="http://apache.org/xsp"
xmlns:esql="http://apache.org/cocoon/SQL/v2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsp-request="http://apache.org/xsp/request/2.0"
xsi:schemaLocation="http://apache.org/cocoon/SQL/v2 xsd/esql.xsd"
space="strip">
<keys>
<esql:connection>
<esql:pool>mandarinMySQL</esql:pool>
<esql:execute-query>
<esql:query><![CDATA[
select
unicode_id,
kMandarin,
...
from
unihan50_unified
where
add_strokes = 0
order by
radical
]]>
</esql:query>
<esql:results>
<esql:row-results><key><esql:get-columns /></key></esql:row-results>
</esql:results>
</esql:execute-query>
</esql:connection>
</keys>
</xsp:page>
使用StAXのです。すべての再ため
感謝私はスレッドを使用することに基づいて解決策を得ることができたし、複数の選択を1つの複雑なSQL結合(私はSQLの複雑なものを嫌う)の代わりに使用する人生は単純でなければなりません:)私はあまりにも多くの時間私は各選択ステートメントごとに新しいスレッドを使用しています。
probabaly春を使用してPOJOの任意のより良い解決策はまた、取るよ時間的に ガウル
複数の選択肢があなたを遅らせる可能性があります。結合を解く - それがあなたのデータベースを持っている理由です! –
public class someclassname{
public static String somemethodname(){
String sql;
sql="SELECT * from yourdatabase.yourtable ";
return sql;
}
public static String anothermethodname(){
/*this is another method which is used to excute another query simultaneously*/
String sql;
sql="SELECT * from youdatabase.yourtable2";
return sql;
}
private static void saveasxml(String sql,String targetFile) throws SQLException, XMLStreamException, IOException{
int i,count;
FileOutputStream fos;
try{
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://yourdomain:yourport/yourdatabase","username","password");
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(sql);
ResultSetMetaData rsmd=rs.getMetaData();
count=rsmd.getColumnCount();
XMLOutputFactory outputFactory = XMLOutputFactory.newFactory();
fos=new FileOutputStream(targetFile);
XMLStreamWriter writer = outputFactory.createXMLStreamWriter(fos);
writer.writeStartDocument();
writer.writeCharacters("\n");
writer.writeStartElement("maintag line");
writer.writeCharacters("\n");
while(rs.next()){
writer.writeCharacters("\t");
writer.writeStartElement("foreveyrow-tagline");
writer.writeCharacters("\n\t");
for(i=1;i<count+1;i++){
writer.writeCharacters("\t");
writer.writeStartElement("Field"+i);
writer.writeCharacters(rs.getString(i));
writer.writeEndElement();
writer.writeCharacters("\n\t");
}
writer.writeEndElement();
writer.writeCharacters("\n");
}
writer.writeEndElement();
writer.writeEndDocument();
writer.close();
}catch(ClassNotFoundException | SQLException e){
}
}
public static void main(String args[]) throws Exception{
saveasxml(somemethodname(), " file location-path");
saveasxml(anothermethodname(), "file location path");
}
}
コードで説明している解決策は何ですか?いくつかの説明を含めてください。ありがとう! –
このコードは、結果セットとしてデータベース(mysql)からデータを取得し、STAXライターを使用して結果セットをxmlファイルに変換する方法を説明しています......データベースからデータを取得し、複数のxmlファイルをクエリに –
- 1. データベースから読み込んで大きなデータをローカルドライブに書き込む
- 2. ファイルから読み込み、Javaのファイルに書き込む
- 3. ソケットの巨大なデータを読み取ってソケットチャネルに書き込む方法
- 4. xmlからデータを読み込む
- 5. Javaで巨大なZipファイルを読み込む - メモリ不足エラー
- 6. Firebaseデータベースからデータを読み込む
- 7. 大きなXMLをsybaseに書き込んで読み込みますか?
- 8. バイナリファイル(Java)からデータを読み込む?
- 9. C++から巨大なtxtファイルを読み込みますか?
- 10. pythonバイナリファイルからデータを読み込み、符号付きintに書き込む
- 11. Javaから巨大な.pdfファイルを読み込むための最高のAPI
- 12. ファイルから巨大なデータを読み込み、それらを呼び出す
- 13. クォーツジョブからデータベースへの読み込み/書き込み
- 14. XMLを辞書に読み込む
- 15. 大きなデータベースのデータベースをExcelに読み込む
- 16. Python:巨大なテキストファイルをメモリに読み込む方法
- 17. XMLデータをlazarusに読み込む
- 18. 巨大なXMLファイルを読み込んでMemoryErrorを扱う
- 19. Elmを読み込んでSQLデータベースに書き込む
- 20. Javaで動的なファイルパス(書き込みやテキストファイルを読み込むに)
- 21. 大きな画像を読み込む
- 22. データベースから一括データ(動的クエリ)を読み込み、春のバッチを使用してフラットファイルに書き込む
- 23. ファイルから読み込まれたデータに応じて、ダイナミックバッファサイズの大きなファイルを読み込む方法。
- 24. Java - キーボード入力を読み込んでテキストファイルに書き込む
- 25. 書き込みキャッシュポリシーに書き込み/フェッチを書き込む
- 26. Oracleから数百万行の大きなテーブルを読み込み、HDF5に書き込む
- 27. 複数のXML要素を読み込み、C#でSQLに書き込む
- 28. python csv巨大ループからの書き込み
- 29. 大きなJSONデータ[2GB]をPHPに読み込むには?
- 30. C#でMicrosoft.Office.Interop.Excelを使用して巨大なデータを読み込む
おかげで結構ですか? – code511788465541441
標準読み込みでは、1つずつ選択してファイルにダンプしますが、これは簡単な手順です。手作業でxmlを作成するのは簡単です。 – bestsss
@ user521180:それは数秒で非常に速く起こる必要があります – Gauls