基於XML的資料庫開發 2

2021-06-07 19:02:22 字數 2822 閱讀 3192

本章主要介紹一下xml資料庫中sql語言解析的問題。

現在解析sql基本是使用了類似字尾表示式的解析方法,具體如下:

比如有乙個sql語言是這樣的:a>1 && b <2

如果我們現在將它轉換成具體sql動作如下,則會變成下面的樣子:

a 1 > b 2 < &&.

->與字尾表示式很相近,主要區別在於&&的判斷上。

演算法如下:

首先規定如下:

1.定義乙個棧p用來存放運算子。且&&的運算子優先級別低於》,《運算子。

2.只有當&& 或者 ||入棧p的情況下,才根據優先順序,將運算子推出棧,

3.反之則繼續進棧。

當前解析結果                             當前棧

1.a 放入解析結果中                   a                                         null

2.>,放入棧中                             a                                         >

3.1 放入解析結果中                   a 1                                      >

4.&&優先順序低,將》推出           a 1 >                                   &&

5.b放入解析結果中                   a 1 > b                                 &&

6.<,由於&&優先順序低,《入站    a 1 > b 2                              < &&

7.所有運算子出棧。

最後:a 1 > b 2 < &&

實際上,**會生成乙個action list,來儲存之前的解析結果。

action list如下:

action1 a1>

action2 b2<

action3 action1&&action2

關鍵**如下:

for(;i= 0;k--) else

}if(record != 0)   

continue;

}if((c == operation_and.charat(0) && querylist[i+1] == operation_and.charat(1))

||(c == operation_or.charat(0) && querylist[i+1] == operation_or.charat(1))

||(c == operation_less_than_or_equal.charat(0) && querylist[i+1] == operation_less_than_or_equal.charat(1))

||(c == operation_more_than_or_equal.charat(0) && querylist[i+1] == operation_more_than_or_equal.charat(1))

||(c == operation_equal.charat(0) && querylist[i+1] == operation_equal.charat(1))

||(c == operation_not_equal.charat(0) && querylist[i+1] == operation_not_equal.charat(1))) else

} else

if(record != 0)

i++;

continue;

}if(c == mark_more_than || c == mark_less_than)  

continue;

}if(c == mark_double_quotation)

}string node = string.valueof(querylist,i,j - i + 1);

nodelist.add(node);

i = j;

if(record != 0)

continue;

}if(c >= mark_number_0 && c <= mark_number_9)

}string node = string.valueof(querylist,i,j - i);

nodelist.add(node);

record = 0;

i = j - 1;

continue;

}if(c == operation_like.charat(0) 

&& querylist[i+1] == operation_like.charat(1)

&& querylist[i+2] == operation_like.charat(2)

&& querylist[i+3] == operation_like.charat(3))

else if(querylist[j] != mark_single_quotation) else

}string operation = operation_like;

int operationnewpri = mprioritymap.get(operation);

if(operationlist.size() > 0) else

} else

if(record != 0)

i = i + 4;

break;}}

}record++;

}if(record != 0)

//last out

if(operationlist.size() != 0)

}

XML與資料庫(2)

1.0 簡介本 簡要的 了 xml和資料庫之間的關係,同時羅列出一些可以使用資料庫處理 xml文件的軟體工具。雖然在這裡不可能詳盡地介紹和提供對這些軟體更深層次的評價,但是我希望它能夠描述使用資料庫處理 xml文件中的主要部分。這裡有點偏向與關係資料 庫,因為我的經驗如此。2.0 為什麼使用資料庫?...

資料庫開發 2

if defined afx globalfuntion h 26b3816f 5d75 4df4 bad6 79deb8624cac included define afx globalfuntion h 26b3816f 5d75 4df4 bad6 79deb8624cac included ...

基於sqlCE 3 0的資料庫開發

最近想使用一下在wince連線sql server 2005資料庫的例項。此前一直安裝的是visual c 6.0以及evc 4.0,一直猶豫是否要安裝visual studio 2005這個巨集大的傢伙。但是在網上查了一下,多數與wince 5.0及sqlce3.0的相關例程和文章都是用vs開發的...