JavaのJDBCのMySQLのクエリ再帰関数メニュー単純な実装

親子テーブルの最も簡単な構造

ステートメントを作成するための機能:

バージョンを選択();
#5.7.26
「sql_modeの」のようなショーの変数。
#sql_mode ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION

sql_modeの=の#set '';
mysqlのの#このバージョンの私は、関数sqkの実行に文句を言うだろう- ONLY_FULL_RTOUP_BY内部モードは、それを削除し、実行
のSET sql_modeの= 'STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTIONを';
#show ;変数"のsql_mode"のような
DELIMITER //
ドロップ機能のIFは、F1キーをEXISTS;
関数f1(TABLEID int型)を作成します
VARCHAR(200)を返し
始める
DECLARE P1はVARCHAR(2000);
; P2 VARCHAR(200)DECLARE
P3のVARCHAR(200)を宣言;
SETをP1 = '';
SET P3 = '';
SET P2 =キャスト(charとしてTABLEID);
P2はヌルされていない間に行う
、SETのP1 =連結(P1、 ''、P2)
SET P3 = P2と、
SELECT GROUP_CONCAT(ID )CからP2へ
ここFIND_IN_SET(PID、P2)> 0。
エンド間;
P1を返します。
終わり//

Javaは直接呼び出し関数を呼び出します。

テストパッケージ、
インポートのjava.sql.Connection;
インポートのjava.sql.DriverManager、
インポートのjava.sql.ResultSet;
インポートjava.sql.Statementの;


/ *
* JDBCデータベースの手順:
* 1.登録ドライバーは
* JVMを通知するために使用どのドライブのデータベースで
接続GETTING * 2
* mysqlデータベース(TCPプロトコル)への接続を完了するために、クラスでJDBCを使用
* 3文の実行プラットフォームを得る
executorが接続オブジェクトでSQL文をオブジェクト取得*
* 4。 SQLステートメントの実装は
*データベースへのSQL文を実行パフォーマーオブジェクトを使用
*データベースの実行後の結果を得る
* 5.処理結果
* 6解放リソースを
*使用閉じるの束を呼び出す
* /
publicクラスてJDBCTest {

公共の静的な無効メイン(文字列[ ]引数)が例外をスロー{

// 1ドライブ登録
//静的メソッドなregisterDriverのjava.sql.DriverManagerクラス(駆動ドライバ)
//ドライバは、インターフェース、送信パラメータである:実装クラスドライバMySQLを
DriverManager.registerDriver //(新しい新しいドライバ());
//、駆動源のカテゴリをチェックし、2つのドライバ、資源の浪費登録する
にClass.forName( "はcom.mysql.jdbc.Driver");
// 2.が接続GETTING
// URI :データベースのJDBCのアドレス:mysqlの://ホストIP接続する:ポート番号//データベース名の
文字列のURLを= "はjdbc:mysqlの:// localhostを:偽3306 / useSslオプションテスト=?";
//静的接続のgetConnection(文字列のURL、文字列ユーザー、文字列のパスワード)が
値を返す//のjava.sql.Connectionインタフェースの実装クラスで、ドライバーのMySQL
接続コネティカットはしたDriverManager.getConnection(URL、「根」、「ルート」)を=;
System.out.printlnは(コネティカット); // com.mysql.jdbc.JDBC4Connection@10d1f30
// 3. SQL文を取得するために、データベース接続オブジェクトを介して、オブジェクトのパフォーマーを文の実行プラットフォームを得る
(メソッド文のcreateStatementを呼び出し、// CONNオブジェクト)文のオブジェクトを取得し、データベースへのSQL文の送信
クラスオブジェクトは、文のインタフェース、MySQLドライバの達成される返す//
でCONNステートメントSTAT =を。createStatement();
System.out.println(STAT); // com.mysql.jdbc.StatementImpl@137bc9
// 4. SQL文を実行
//幹部オブジェクトでSQL文を実行メソッドを呼び出し、結果を得る
// int型のexecuteUpdate(文字列のSQL)の実行SQLデータベースの文、INSERTに制限され、更新、削除
// int型の戻り値を、データベース内の行の数の正常な動作
のResultSet stat.executeQueryのRS =(「(2)F1を選択」)、
一方(rs.next()){
rs.getString RES =文字列(1);
のSystem.out.println(RES);
}
// 5リリース資源
stat.close();
はconn.close();
}

}

 

 

出力:

com.mysql.jdbc.JDBC4Connection@5a10411
com.mysql.jdbc.StatementImpl@2ef1e4fa
、2,5,6,11,12

 

Javaはすべて2件の検索を呼び出します。

パッケージテスト。

インポートのjava.sql.Connection;
インポートのjava.sql.DriverManager。
インポートのjava.sql.ResultSet;
輸入java.sql.Statementの。
輸入はjava.util.ArrayList;
輸入java.util.HashMapを;
輸入はjava.util.List;

輸入com.mysql.jdbc.StringUtils。

/ *
* JDBCデータベースの手順:
* 1.登録ドライバーは
* JVMに通知が運転データベース使用しています
* 2。取得した接続
JDBCクラスを使用して*を、mysqlデータベース(TCPプロトコル)への接続を完了
* 3。取得した文の実行インターネット
接続オブジェクトのSQL文オブジェクトを行うことにより得られた*
* 4. SQLステートメントを実行する
*データベースへのSQL文を実行し、オブジェクトを使用して行われた
*データベースの実行後に結果を得る
* 5.処理結果
* 6.リリースリソースは、
*利用閉じるの束を呼び出す
* /
publicクラスJDBCTest2 {

公共の静的な無効メイン(文字列[]引数)が例外をスロー{

//登録1.ドライブ
//静的メソッドなregisterDriverのjava.sql.DriverManagerクラス(ドライバドライバ)
//ドライバインターフェイス、送信パラメータである:MySQLの実装クラスドライバ
//にDriverManager.registerDriver(新しいドライバ()) ;
// 2つのドライバ、資源の浪費登録し、駆動源のカテゴリをチェックし
たClass.forName( "はcom.mysql.jdbc.Driverを");
// 2.が接続GETTING
:// URIアドレスデータベースのJDBC:mysqlの:ホストへの接続を// IP:ポート番号//データベース名の
文字列のURL = "はjdbc:MySQLの:// localhostを:偽3306 / useSslオプションテスト=?";
//静的接続のgetConnection(文字列のURL、ユーザーの文字列、文字列のパスワード)が
値を返す// javaのです.sql.Connectionインタフェースの実装クラス、ドライバのMySQL
接続コネチカットはたDriverManager.getConnection(URL、 "ルート"、 "ルート")=;
//のSystem.out.println(コネティカット); // com.mysql.jdbc @ 10d1f30 .JDBC4Connection
// 3.データベース接続オブジェクトを介して、文の実行プラットフォームを取得し、SQL文の実行へのアクセスが対象となります
// connオブジェクト()のcreateStatementステートメントメソッドを呼び出し、データベースにSQL文を送信するStatementオブジェクトを取得し
たクラスオブジェクトはStatementインタフェースを実現さ返す//、ドライバのMySQL
、ステートメントconn.createStatement STAT =()
//システム.out.println(STAT); // com.mysql.jdbc.StatementImpl@137bc9

4.実行SQL文//
エグゼキュータオブジェクトで実行される//結果を取得、メソッドのSQL文を呼び出す
、UPDATE、DELETE挿入することが制限されているデータベースで実行// int型のexecuteUpdate(文字列のSQL)SQL文を
操作、//戻り値int成功したデータベース行の数
// int型の列は= stat.executeUpdateは( "(ソート。INSERT INTO SNAME、Sprice、sdesc - )
// VALUES( '自動車用品'、50000 '狂気の価格')");
//のResultSet rsを= stat.executeQuery( "CからIDを選択)");
StringBufferのStringBufferの新しい新しいRESの=();
ResultSetのstat.executeQueryのRS =( "CからID、PIDを選択");
リスト<のHashMap <文字列、文字列>>すべての新しい新しいです= ArrayList <HashMapの<文字列、文字列>>();
リスト<HashMapの<文字列、文字列>> =新しい新しいresListのArrayList <HashMapの<文字列、文字列>>();
文字列ID、PID、
一方(rs.next()){
ID = rs.getString(1)。
PID = rs.getString(2)。
HashMapの<文字列、文字列> E =新規HashMapの<文字列、文字列>();
e.put( "ID"、ID)。
e.put( "PID"、PID);
all.add(E);
// getAllChild(STAT、RES、PID);
}
getAllChild(resList、全て、 "1")。
{(; iがresList.sizeを()<I ++は、I = 0の整数)のため
のSystem.out.println( "ID =" + resList.get(I)に.get( "ID")+ "PID =" + resList .get(I)に.get( "PID"));
}
// 5.释放资源
stat.close()。
conn.close();
}

プライベートの静的な無効getAllChild(一覧<HashMapの<文字列、文字列>> resList、リスト<HashMapの<文字列、文字列>>すべて、
文字列の援助){
のために(int型私= 0;私は++; iがall.size()<){
HashMapを<文字列、文字列>マップ= all.get(I)。
文字列ID = map.get( "ID")。
ストリングPID = map.get( "PID")。
IF(id.equals(AID)){
resList.add(マップ)
}
IF(pid.equals(AID)){
resList.add(マップ)
でGetChild(resList、全て、ID)。
}
}
}

プライベートの静的な無効でGetChild(一覧<HashMapの<文字列、文字列>> resList、リスト<HashMapの<文字列、文字列>>すべて、文字列の援助){
のために(int型私= 0;私は++; iがall.size()<){
HashMapを<文字列、文字列>マップ= all.get(I)。
ストリングPID = map.get( "PID")。
IF(pid.equals(AID)){
resList.add(マップ)
}
}
}

}

出力:

ID = 1、PID = 0
、ID = 3、PID = 1
、ID = 7、PID = 3
、ID = 8、PID = 3
、ID = 4、PID = 1
、ID = 9、PID = 4
、ID = 10、PID = 4

Javaは、呼び出し、3つのチェックにすべてのツリー構造を構成します:

パッケージテスト。

インポートのjava.sql.Connection;
インポートのjava.sql.DriverManager。
インポートのjava.sql.ResultSet;
輸入java.sql.Statementの。
輸入はjava.util.ArrayList;
輸入java.util.HashMapを;
輸入はjava.util.List;
輸入java.util.Map;

輸入com.mysql.jdbc.StringUtils。

/ *
* JDBCデータベースの手順:
* 1.登録ドライバーは
* JVMに通知が運転データベース使用しています
* 2。取得した接続
JDBCクラスを使用して*を、mysqlデータベース(TCPプロトコル)への接続を完了
* 3。取得した文の実行インターネット
接続オブジェクトのSQL文オブジェクトを行うことにより得られた*
* 4. SQLステートメントを実行する
*データベースへのSQL文を実行し、オブジェクトを使用して行われた
*データベースの実行後に結果を得る
* 5.処理結果
* 6.リリースリソースは、
*利用閉じるの束を呼び出す
* /
publicクラスJDBCTest3 {

公共の静的な無効メイン(文字列[]引数)が例外をスロー{

//登録1.ドライブ
//静的メソッドなregisterDriverのjava.sql.DriverManagerクラス(ドライバドライバ)
//ドライバインターフェイス、送信パラメータである:MySQLの実装クラスドライバ
//にDriverManager.registerDriver(新しいドライバ()) ;
// 2つのドライバ、資源の浪費登録し、駆動源のカテゴリをチェックし
たClass.forName( "はcom.mysql.jdbc.Driverを");
// 2.が接続GETTING
:// URIアドレスデータベースのJDBC:mysqlの:ホストへの接続を// IP:ポート番号//データベース名の
文字列のURL = "はjdbc:MySQLの:// localhostを:偽3306 / useSslオプションテスト=?";
//静的接続のgetConnection(文字列のURL、ユーザーの文字列、文字列のパスワード)が
値を返す// javaのです.sql.Connectionインタフェースの実装クラス、ドライバのMySQL
接続コネチカットはたDriverManager.getConnection(URL、 "ルート"、 "ルート")=;
//のSystem.out.println(コネティカット); // com.mysql.jdbc @ 10d1f30 .JDBC4Connection
// 3.データベース接続オブジェクトを介して、文の実行プラットフォームを取得し、SQL文の実行へのアクセスが対象となります
// connオブジェクト()のcreateStatementステートメントメソッドを呼び出し、データベースにSQL文を送信するStatementオブジェクトを取得し
たクラスオブジェクトはStatementインタフェースを実現さ返す//、ドライバのMySQL
、ステートメントconn.createStatement STAT =()
//システム.out.println(STAT); // com.mysql.jdbc.StatementImpl@137bc9

4.実行SQL文//
エグゼキュータオブジェクトで実行される//結果を取得、メソッドのSQL文を呼び出す
、UPDATE、DELETE挿入することが制限されているデータベースで実行// int型のexecuteUpdate(文字列のSQL)SQL文を
操作、//戻り値int成功したデータベース行の数
// int型の列は= stat.executeUpdateは( "(ソート。INSERT INTO SNAME、Sprice、sdesc - )
// VALUES( '自動車用品'、50000 '狂気の価格')");
//のResultSet rsを= stat.executeQuery( "CからIDを選択)");
StringBufferのStringBufferの新しい新しいRESの=();
ResultSetのstat.executeQueryのRS =( "IDを選択して、CからPID");
リスト<地図<文字列、オブジェクト>>すべての新しい新しいです= ArrayList <地図<文字列オブジェクト>>();
地図の<string、オブジェクト> =新しい新しいResMapのHashMap <文字列オブジェクト>();
文字列ID、PID、
一方(rs.next()){
ID = rs.getString( 1);
PID = rs.getString(2)。
地図<文字列、オブジェクト> E =新しいHashMapの<文字列、オブジェクト>();
e.put( "ID"、ID)。
e.put( "PID"、PID);
all.add(E);
// getAllChild(STAT、RES、PID);
}
getAllChild(resMap、全て、 "1")。
System.out.println(resMap)。

resMap =新しいハッシュマップの<string、オブジェクト>();
getAllChild(resMap、全て、 "2");
System.out.println(resMap)。
// 5.释放资源
stat.close();
conn.close();
}

プライベートの静的な無効getAllChild(地図<文字列、オブジェクト> resMap、一覧<地図<文字列、オブジェクト>>すべて、
文字列の援助){
{(;;私は(all.sizeを<)私は++ i = 0をint型)のための
地図<文字列、オブジェクト>マップ= all.get(I)。
。文字列ID = map.get( "ID")のtoString();
ストリングPID = map.get( "PID")のtoString()。
IF(id.equals(AID)){
resMap.put( "ID"、ID)。
resMap.put( "PID"、PID);
}
IF(pid.equals(AID)){
でGetChild(マップ、全て、ID)。
(resMap.get( "子")== NULL){もし
resMap.put( "子"、新しいのArrayList <地図<文字列、オブジェクト>>());
}
((ArrayListの<地図<文字列、オブジェクト>>)resMap.get( "子"))(マップ)を追加します。


プライベートの静的な無効でGetChild(地図<文字列、オブジェクト> resMap、一覧<地図<文字列、オブジェクト>>すべて、文字列の援助){
{(;;私は(all.sizeを<)私は++ i = 0をint型)のための
地図<文字列、オブジェクト>マップ= all.get(I)。
ストリングPID = map.get( "PID")のtoString()。
IF(pid.equals(AID)){
でGetChild(マップ、全て、map.get( "ID")のtoString())。
(resMap.get( "子")== NULL){もし
resMap.put( "子"、新しいのArrayList <地図<文字列、オブジェクト>>());
}
((ArrayListの<地図<文字列、オブジェクト>>)resMap.get( "子"))(マップ)を追加します。
}
}
}

}

出力:

{PID = 0、ID = 1、子供= [{PID = 1、ID = 3、子供= [{PID = 3、ID = 7}、{PID = 3、ID = 8}]}、{PID = 1 、ID = 4、子供= [{PID = 4、ID = 9}、{PID = 4、ID = 10}]}]}
{PID = 0、ID = 2、子供= [{PID = 2、ID = 5、子供= [{PID = 5、ID = 11}]}、{PID = 2、ID = 6、子供= [{PID = 6、ID = 12}]}]}

あなたは文字列に変えたい場合は、先行するJSONを参照することができます

https://mvnrepository.com/artifact/net.sf.json-lib/json-lib/2.4     に依存するJARパッケージとそれに関連する設定

https://www.cnblogs.com/heqiyoujing/p/9840424.html

あなたが思うなら、私はと混同や歓迎を共有するための良い方法を持っていませんよ。

おすすめ

転載: www.cnblogs.com/xzhg/p/11774713.html