sql源碼
應該一個文件就夠了, 下面是HTML和腳本放在一個文件里的, 你直接復制到一個ASP文件里就行,腳本使用VB, 其中資料庫連接字元串根據你實際情況改一下,登錄顯示的頁面地址也根據實際情況改一下, 其他各頁面載入前先判斷這個cnn_save1的session對象是否存在, 如果存在就繼續執行, 如果不存在就跳轉到這個登錄頁面
<html>
<head>
</head>
<body background="DROPLETS.JPG" bgcolor="#0000FF">
<form method="POST" action="login.asp">
<font color="#FFFF00">用戶名:</font><input type="text" name="yonghuming" size="6"></p>
<p><font color="#FFFF00">密 碼:</font><input type="password" name="mima" size="6">
<input type="submit" value="確認" name="B1"></p>
</form>
<%
usr_name=request("yonghuming")
passwd = request ("mima")
set cnn=server.createobject("adodb.connection")
cnn.provider="sqloledb"
provstr="server=伺服器名;database=資料庫名;uid=sa;pwd=資料庫密碼;"
cnn.open provstr
set rs = server.createobject("adodb.recordset")
rs.open"select username,password from user where username='"&usr_name&"'",cn,adOpenStatic,4
if rs.RecordCount=1 then
if rs.fields(1).value=passwd then
session.timeout=60
set session("cnn_save1")=cnn
response.redirect "登錄成功 要顯示的頁面"
else
response.write"<font color=yellow size=5>請輸入用戶名和密碼</font>"
end if
else
response.write"<font color=yellow size=5>請輸入用戶名和密碼</font>"
end if
%>
</body>
</html>
⑵ 畢業生管理信息系統jsp,sql源代碼
八七二六零零八九九,add me ,幫解決
⑶ 如何對Oracle中的PL/SQL源碼進行加密
可以使用wrap 工具或者DBMS_DDL子程序對PL/SQL源碼進行加密。wrap工具加密單個源文件,如SQL*Plus腳本。DBMS_DDL子程序加密單個動態生成的PL/SQL單元,如一個CREATE PROCEDURE聲明。加密的源文件可以移動,備份,可被SQL*Plus和Improt和Export工具處理,但在靜態數據字典視圖*_SOURCE中無法看到源碼。 WRAP語法 wrap iname=input_file [oname=output_file ] 可省略文件擴展名,如以下的命令是等同的: wrap iname=/mydir/myfile wrap iname=/mydir/myfile.sql 輸出文件默認的擴展名為.plb,當然你也可以指定不同的文件名和擴展名。 wrap iname=/mydir/myfile oname=/yourdir/yourfile.out wrap主要是混淆PL/SQL語句的主體部分,如下CREATE語句可以被加密: CREATE [OR REPLACE] FUNCTION function_name
CREATE [OR REPLACE] PROCEDURE procere_name
CREATE [OR REPLACE] PACKAGE package_name
CREATE [OR REPLACE] PACKAGE BODY package_name
CREATE [OR REPLACE] TYPE type_name AS OBJECT
CREATE [OR REPLACE] TYPE type_name UNDER type_name
CREATE [OR REPLACE] TYPE BODY type_name CREATE [OR REPLACE] TRIGGER語句不能被加密,但你可調用加密的過程。加密文件中除了語句頭部和C風格(/*…*/)注釋外,其它所有注釋被刪除。
⑷ vb如何連接sql資料庫,求源碼
Public My_Cnn As New ADODB.Connection '連接資料庫
StrCnn = "Provider=SQLOLEDB.1;Password=密碼;Persist Security Info=True;User ID=用戶名;Initial Catalog=資料庫名;Data Source=伺服器名"
My_Cnn.CursorLocation = adUseClient
My_Cnn.Open StrCnn
使用資料庫
Dim sql As String
Dim My_temp As New ADODB.Recordset
執行SQL語句(一般插入,刪除數據)
sql = "資料庫語句"
My_cnn.Execute sql
讀取數據
sql = "查詢語句"
My_temp.Open sql, My_cnn, adOpenDynamic, adLockOptimistic
My_temp.field("欄位名")
⑸ 可能是全網最詳細的 Spark Sql Aggregate 源碼剖析
縱觀 Spark Sql 源碼,聚合的實現是其中較為復雜的部分,本文希望能以例子結合流程圖的方式來說清楚整個過程。這里僅關注 Aggregate 在物理執行計劃相關的內容,之前的 parse、analyze 及 optimize 階段暫不做分析。在 Spark Sql 中,有一個專門的 Aggregation strategy 用來處理聚合,我們先來看看這個策略。
本文暫不討論 distinct Aggregate 的實現(有興趣的可以看看另一篇博文 https://www.jianshu.com/p/77e0a70db8cd ),我們來看看 AggUtils#planAggregateWithoutDistinct 是如何生成聚合的物理執行計劃的
創建聚合分為兩個階段:
AggregateExpression 共有以下幾種 mode:
Q:是否支持使用 hash based agg 是如何判斷的?
摘自我另一篇文章: https://www.jianshu.com/p/77e0a70db8cd
為了說明最常用也是最復雜的的 hash based agg,本小節暫時將示例 sql 改為
這樣就能進入 HashAggregateExec 的分支
構造函數主要工作就是對 groupingExpressions、aggregateExpressions、aggregateAttributes、resultExpressions 進行了初始化
在 enable code gen 的情況下,會調用 HashAggregateExec#inputRDDs 來生成 RDD,為了分析 HashAggregateExec 是如何生成 RDD 的,我們設置 spark.sql.codegen.wholeStage 為 false 來 disable code gen,這樣就會調用 HashAggregateExec#doExecute 來生成 RDD,如下:
可以看到,關鍵的部分就是根據 child.execute() 生成的 RDD 的每一個 partition 的迭代器轉化生成一個新的 TungstenAggregationIterator ,即 HashAggregateExec 生成的 RDD 的各個 partition。由於 TungstenAggregationIterator 涉及內容非常多,我們單開一大節來進行介紹。
此迭代器:
註:UnsafeKVExternalSorter 的實現可以參考:
UnsafeRow 是 InternalRow(表示一行記錄) 的 unsafe 實現,由原始內存(byte array)而不是 Java 對象支持,由三個區域組成:
使用 UnsafeRow 的收益:
構造函數的主要流程已在上圖中說明,需要注意的是:當內存不足時(畢竟每個 grouping 對應的 agg buffer 直接佔用內存,如果 grouping 非常多,或者 agg buffer 較大,容易出現內存用盡)會從 hash based aggregate 切換為 sort based aggregate(會 spill 數據到磁碟),後文會進行詳述。先來看看最關鍵的 processInputs 方法的實現
上圖中,需要注意的是:hashMap 中 get 一個 groupingKey 對應的 agg buffer 時,若已經存在該 buffer 則直接返回;若不存在,嘗試申請內存新建一個:
上圖中,用於真正處理一條 row 的 AggregationIterator#processRow 還需進一步展開分析。在此之前,我們先來看看 AggregateFunction 的分類
AggregateFunction 可以分為 DeclarativeAggregate 和 ImperativeAggregate 兩大類,具體的聚合函數均為這兩類的子類。
DeclarativeAggregate 是一類直接由 Catalyst 中的 Expressions 構成的聚合函數,主要邏輯通過調用 4 個表達式完成,分別是:
我們再次以容易理解的 Count 來舉例說明:
通常來講,實現一個基於 Expressions 的 DeclarativeAggregate 函數包含以下幾個重要的組成部分:
再來看看 AggregationIterator#processRow
AggregationIterator#processRow 會調用
生成用於處理一行數據(row)的函數
說白了 processRow 生成了函數才是直接用來接受一條 input row 來更新對應的 agg buffer,具體是根據 mode 及 aggExpression 中的 aggFunction 的類型調用其 updateExpressions 或 mergeExpressions 方法:
比如,對於 aggFunction 為 DeclarativeAggregate 類型的 Partial 下的 Count 來說就是調用其 updateExpressions 方法,即:
對於 Final 的 Count 來說就是調用其 mergeExpressions 方法,即:
對於 aggFunction 為 ImperativeAggregate 類型的 Partial 下的 Collect 來說就是調用其 update 方法,即:
對於 Final 的 Collect 來說就是調用其 merge 方法,即:
我們都知道,讀取一個迭代器的數據,是要不斷調用 hasNext 方法進行 check 是否還有數據,當該方法返回 true 的時候再調用 next 方法取得下一條數據。所以要知道如何讀取 TungstenAggregationIterator 的數據,就得分析其這兩個方法。
分為兩種情況,分別是:
Agg 的實現確實復雜,本文雖然篇幅已經很長,但還有很多方面沒有 cover 到,但基本最核心、最復雜的點都詳細介紹了,如果對於未 cover 的部分有興趣,請自行閱讀源碼進行分析~