java程式碼刪除資料庫中樹形結構資料
在網上搜查了很多關於刪除樹形結構的文章,結果找到的都是一些簡單的就刪除2級目錄的操作,完全沒有刪除巢狀多層的程式碼,介於此原因,就編寫的如下程式碼,來刪除巢狀多層的樹形結構
eg:資料庫程式碼
CREATE TABLE mytest
(
f_id NUMBER ,
z_id NUMBER,
m_name varchar2(20)
)
INSERT INTO mytest VALUES (1,1,'小小');
INSERT INTO mytest VALUES (2,1,'小紅');
INSERT INTO mytest VALUES (3,2,'小青');
INSERT INTO mytest VALUES (4,2,'小佳');
INSERT INTO mytest VALUES (5,3,'小南');
INSERT INTO mytest VALUES (6,4,'小心');
INSERT INTO mytest VALUES (7,7,'信心');
INSERT INTO mytest VALUES (8,6,'嘻嘻');
INSERT INTO mytest VALUES (9,6,'哈哈');
java程式碼
public class Test {
DBConnection dbConnection = new DBConnection();
private Connection coon;
private PreparedStatement ps;
private ResultSet rs;
/變數list1來存放最終的刪除資料所使用的條件f_id(在下面的方法中);
private void GetAllChildNodeId(List<Integer> list) {
List<Integer> list1 = new ArrayList<Integer>();//定義一個區域性list1,來存放每次查詢的資料,來作為條件,進行下次查詢
coon = dbConnection.getConnection();//連線資料庫,另一個類檔案就省略了
String sql = "select f_id from mytest where z_id=?";
try {
for(Integer parent :list){
ps = coon.prepareStatement(sql);
ps.setInt(1, parent);
rs = ps.executeQuery();
while(rs.next()){
list1.add(rs.getInt(1));
}
}//下面要寫一個判斷語句,否則會進入死迴圈
if(list1.size()==0){
System.out.println("wancheng");
}else {
GetAllChildNodeId(list1);//進入遞迴方法
}
for(int parent :list1){
System.out.print(parent+" list1 ");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
//下面進行測試,結果在上面的方法中通過for迴圈遍歷,結果為(3,4,5,6,8,9)
public static void main(String[] args) {
Test test = new Test();
List<Integer> list = new ArrayList<Integer>();
list.add(2);
test.GetAllChildNodeId(list);
}
}