當前位置:首頁 » 數據倉庫 » 資料庫rnum
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

資料庫rnum

發布時間: 2022-09-04 01:40:55

Ⅰ 關於mysql資料庫裡面數據類型number的問題

MySQL 數據類型細分下來,大概有以下幾類:

  • 數值,典型代表為 tinyint,int,bigint

  • 浮點/定點,典型代表為 float,double,decimal 以及相關的同義詞

  • 字元串,典型代表為 char,varchar

  • 時間日期,典型代表為 date,datetime,time,timestamp

  • 二進制,典型代表為 binary,varbinary

  • 位類型

  • 枚舉類型

  • 集合類型

  • 大對象,比如 text,blob

  • json 文檔類型

  • 一、數值類型(不是數據類型,別看錯了)如果用來存放整數,根據范圍的不同,選擇不同的類型。


  • 注意:timestamp 代表的時間戳是一個 int32 存儲的整數,取值范圍為 '1970-01-01 00:00:01.000000' 到 '2038-01-19 03:14:07.999999';datetime 取值范圍為 '1000-01-01 00:00:00.000000' 到 '9999-12-31 23:59:59.999999'。

  • 綜上所述,日期這塊類型的選擇遵循以下原則:

  • 1. 如果時間有可能超過時間戳范圍,優先選擇 datetime。2. 如果需要單獨獲取年份值,比如按照年來分區,按照年來檢索等,最好在表中添加一個 year 類型來參與。3. 如果需要單獨獲取日期或者時間,最好是單獨存放,而不是簡單的用 datetime 或者 timestamp。後面檢索時,再加函數過濾,以免後期增加 SQL 編寫帶來額外消耗。

  • 4. 如果有保存毫秒類似的需求,最好是用時間類型自己的特性,不要直接用字元類型來代替。MySQL 內部的類型轉換對資源額外的消耗也是需要考慮的。

    示例 5

  • 建立表 t5,對這些可能需要的欄位全部分離開,這樣以後寫 SQL 語句的時候就很容易了。

  • 當然了,這種情形佔用額外的磁碟空間。如果想在易用性與空間佔用量大這兩點來折中,可以用 MySQL 的虛擬列來實時計算。比如假設 c5 欄位不存在,想要得到 c5 的結果。mysql-(ytt/3305)->alter table t5 drop c5, add c5 year generated always as (year(c1)) virtual;Query OK, 1 row affected (2.46 sec)Records: 1 Duplicates: 0 Warnings: 0



  • 五、二進制類型

  • binary 和 varbinary 對應了 char 和 varchar 的二進制存儲,相關的特性都一樣。不同的有以下幾點:

  • binary(10)/varbinary(10) 代表的不是字元個數,而是位元組數。

  • 行結束符不一樣。char 的行結束符是 ,binary 的行結束符是 0x00。

  • 由於是二進制存儲,所以字元編碼以及排序規則這類就直接無效了。

  • 示例 6

    來看這個 binary 存取的簡單示例,還是之前的變數 @a。

    切記!這里要提前計算好 @a 佔用的位元組數,以防存儲溢出。


  • 六、位類型

  • bit 為 MySQL 里存儲比特位的類型,最大支持 64 比特位, 直接以二進制方式存儲,一般用來存儲狀態類的信息。比如,性別,真假等。具有以下特性:

  • 1. 對於 bit(8) 如果單純存放 1 位,左邊以 0 填充 00000001。2. 查詢時可以直接十進制來過濾數據。3. 如果此欄位加上索引,MySQL 不會自己做類型轉換,只能用二進制來過濾。

  • 示例 7

  • 創建表 c1, 欄位性別定義一個比特位。mysql-(ytt/3305)->create table c1(gender bit(1));Query OK, 0 rows affected (0.02 sec)



  • mysql-(ytt/3305)->select cast(gender as unsigned) 'f1' from c1;+------+| f1 |+------+| 0 || 1 |+------+2 rows in set (0.00 sec)


  • 過濾數據也一樣,二進制或者直接十進制都行。mysql-(ytt/3305)->select conv(gender,16,10) as gender -> from c1 where gender = b'1';+--------+| gender |+--------+| 1|+--------+1 row in set (0.00 sec)mysql-(ytt/3305)->select conv(gender,16,10) as gender -> from c1 where gender = '1';+--------+| gender |+--------+| 1|+--------+1 row in set (0.00 sec)


  • 其實這樣的場景,也可以定義為 char(0),這也是類似於 bit 非常優化的一種用法。

  • mysql-(ytt/3305)->create table c2(gender char(0));Query OK, 0 rows affected (0.03 sec)


  • 那現在我給表 c1 簡單的造點測試數據。

  • mysql-(ytt/3305)->select count(*) from c1;+----------+| count(*) |+----------+| 33554432 |+----------+1 row in set (1.37 sec)


  • 把 c1 的數據全部插入 c2。

  • mysql-(ytt/3305)->insert into c2 select if(gender = 0,'',null) from c1;Query OK, 33554432 rows affected (2 min 18.80 sec)Records: 33554432 Duplicates: 0 Warnings: 0


  • 兩張表的磁碟佔用差不多。root@ytt-pc:/var/lib/mysql/3305/ytt# ls -sihl總用量 1.9G4085684 933M -rw-r----- 1 mysql mysql 932M 12月 11 10:16 c1.ibd4082686 917M -rw-r----- 1 mysql mysql 916M 12月 11 10:22 c2.ibd


  • 檢索方式稍微有些不同,不過效率也差不多。所以說,字元類型不愧為萬能類型。


  • 七、枚舉類型

  • 枚舉類型,也即 enum。適合提前規劃好了所有已經知道的值,且未來最好不要加新值的情形。枚舉類型有以下特性:

  • 1. 最大佔用 2 Byte。2. 最大支持 65535 個不同元素。3. MySQL 後台存儲以下標的方式,也就是 tinyint 或者 smallint 的方式,下標從 1 開始。4. 排序時按照下標排序,而不是按照裡面元素的數據類型。所以這點要格外注意。

  • 示例 8

  • 創建表 t7。mysql-(ytt/3305)->create table t7(c1 enum('mysql','oracle','dble','postgresql','mongodb','redis','db2','sql server'));Query OK, 0 rows affected (0.03 sec)



  • 八、集合類型

    集合類型 SET 和枚舉類似,也是得提前知道有多少個元素。SET 有以下特點:

  • 1. 最大佔用 8 Byte,int64。2. 內部以二進制位的方式存儲,對應的下標如果以十進制來看,就分別為 1,2,4,8,...,pow(2,63)。3. 最大支持 64 個不同的元素,重復元素的插入,取出來直接去重。4. 元素之間可以組合插入,比如下標為 1 和 2 的可以一起插入,直接插入 3 即可。

  • 示例 9

    定義表 c7 欄位 c1 為 set 類型,包含了 8 個值,也就是下表最大為 pow(2,7)。

  • mysql-(ytt/3305)->create table c7(c1 set('mysql','oracle','dble','postgresql','mongodb','redis','db2','sql server'));Query OK, 0 rows affected (0.02 sec)


  • 插入 1 到 128 的所有組合。

  • mysql-(ytt/3305)->INSERT INTO c7WITH RECURSIVE ytt_number (cnt) AS ( SELECT 1 AS cnt UNION ALL SELECT cnt + 1 FROM ytt_number WHERE cnt < pow(2, 7) )SELECT *FROM ytt_number;Query OK, 128 rows affected (0.01 sec)Records: 128 Duplicates: 0 Warnings: 0

  • 九、數據類型在存儲函數中的用法

    函數里除了顯式聲明的變數外,默認 session 變數的數據類型很弱,隨著給定值的不同隨意轉換。

  • 示例 10

  • 定義一個函數,返回兩個給定參數的乘積。定義里有兩個變數,一個是 v_tmp 顯式定義為 int64,另外一個 @vresult 隨著給定值的類型隨意變換類型。


    簡單調用下。

  • mysql-(ytt/3305)->select ytt_sample_data_type(1111,222) 'result';+--------------------------+| result |+--------------------------+| The result is: '246642'. |+--------------------------+1 row in set (0.00 sec)


  • 總結

    本篇把 MySQL 基本的數據類型做了簡單的介紹,並且用了一些容易理解的示例來梳理這些類型。我們在實際場景中,建議選擇適合最合適的類型,不建議所有數據類型簡單的最大化原則。比如能用 varchar(100),不用 varchar(1000)。

Ⅱ R軟體中的數據num和int什麼意思怎樣把int轉為num

是int r=static_cast<int>(sqrt(num))吧
將sqrt(num)的值強制類型轉換為int型

Ⅲ 怎麼把資料庫中某個欄位的值賦值給一個變數

rnum="select rnum from dbo.room where roomname=roomname1"
這一句只是一個查詢語句,下面還得有類似:
rs.open rnum,conn,1,1
的數據,然後再改為上:
If num>rs.recordcount Then

Ⅳ 關於ASP的ACCESS資料庫查詢的問題

使用movenext
比如你定義了一頁顯示20條
<%
page=request("page")
sql=你的sql語句
set rs = Server.CreateObject("Adodb.Recordset")
rs.open sql,conn,1,1
Rnum=rs.recordcount
maxsize=20

if Rnum/maxsize=int(Rnum/maxsize) then
totalpage=int(Rnum/maxsize)
else
totalpage=int(Rnum/maxsize)+1
end if

if page>1 then
targetCursor=maxsize*(page-1)
rs.move targetCursor
else
rs.movefirst
end iF

i=0
do while Not rs.eof and i<maxsize
%>
=========循環顯示內容=========
<%
rs.movenext
i=i+1
loop
%>
<a href="#" onclick="gotopage(1)">首頁</a>
<a href="#" onclick="gotopage(<%=page-1%>)">上一頁</a>
<a href="#" onclick="gotopage(<%=page+1%>)">下一頁</a>
<a href="#" onclick="gotopage(<%=totalpage%>)">尾頁</a>
<script>
function gotopage(thispage){
window.location.href="?page="+thispage;
}
</script>

===================
很久不用asp,不知道寫得對不對,盡供參考

Ⅳ Oracle資料庫rownum和row_number的不同點

明確對於rownum
來說它是oracle系統順序分配為從查詢返回的行的編號,返回的第一行分配的是1,第二行是二,以此類推,這個為欄位可以用於限制查詢的返回的總行數,因為rownum總是從1開始,但是1以上的自然數在rownum
做等於判斷時都認為是false
條件,所以無法查到
rownum=n
(n》1的自然數),所以查找第二行以後的記錄可以用子查詢方法來解決,給子查詢中的rownum取別名;對於小於某個值的情況兩種方法都差不多,但是對於某個不等於一的值或者求某個值到某個值之間的情況,用row_number()
別名獲得排名
,比用rownum偽列要簡單方便的多;因為偽列總是從一開始查找;
具體用法和區別參見以下代碼;
--取出工資最高的前5位
select
empno,ename,sal,rownum
from
emp;
select
*
from
(select
*
from
emp
order
by
sal
desc)
where
rownum<=5;
select
*
from
(select
ename,sal,row_number()
over(order
by
sal
desc)
as
num
from
emp)
where
num<=5;
select
*
from
(select
ename,sal,row_number()
over(order
by
sal
desc)
from
emp)
where
rownum<=5
--工資的前3名
select
*
from
emp
where
sal
>=any(select
*
from
(select
sal
from
emp
order
by
sal
desc)
where
rownum<=3);
select
*
from(select
*
from
emp
order
by
sal
desc)
where
rownum
<4;
select
*
from
(select
ename,sal,empno,deptno
,row_number()
over
(order
by
sal
desc)
from
emp)
where
rownum<4;
select
*
from
(select
ename,sal,empno,deptno
,row_number()
over
(order
by
sal
desc)
as
num
from
emp)
where
num<4
--按照工資排序,取出第6名到第10名
--使用偽列獲得
select
*
from
(select
ename,sal,rownum
r
from
(select
*
from
emp
order
by
sal
desc)
where
rownum<=10)
where
r>5;
--使用排名函數獲得
select
*
from
(select
ename,sal,row_number()
over(order
by
sal
desc)
as
num
from
emp)
where
num>5
and
num<=10;
-------
按工資從高到低獲得工資排名第四的員工
select
*
from
(select
ename,sal,row_number()
over(order
by
sal
desc)
as
num
from
emp)
where
num=4;
select
*
from
(select
ename,sal,rownum
r
from
(select
*
from
emp
order
by
sal
desc)
where
rownum<=4)
where
r=4;
總結oracle中rownum和row_number()的區別
row_number()是分析函數,基本語法為row_number()
over(partition
by
欄位
order
by
欄位)
rownum是一個偽列
select
*
from
dept
where
rownum<=3;
select
*
from
dept
where
rownum
between
2
and
3;這兒會出錯,因為rownum的特性(沒有1就不會有2,沒有3)決定的
SELECT
*
FROM
(SELECT
A.*,ROWNUN
FROM
DEPT
A)T1
WHERE
T1.ROWNUM
BETWEEN
2
AND
3;這么寫不對,要這樣寫
SELECT
*
FROM
(SELECT
A.*,ROWNUM
RN
FROM
DEPT
A)T1
WHERE
T1.RN
BETWEEN
2
AND
3;
他們的主要區別是:使用rownum進行排序的時候是先對結果集加入偽列rownum然後再進行排序,而函數row_number()在包含排序從句後是先排序再計算行號碼。

Ⅵ sql 分頁

SELECTTOP10*
FROM(SELECT*
FROM(selects.PositionNameassName,
h.MonValueasmonValue,
ROW_NUMBER()OVER(ORDERBYs.PositionNameASC)ASRNUM
fromHourSourceh
LEFTJOINPollutantponp.PollutantCode=h.PollutantCode
LEFTJOINStationsons.StationCode=h.StationCode
whereh.TimePointBETWEEN'2015-01-0111:00'and
'2015-01-0112:00'
ands.stationIdin(1,2))bbPIVOT(MAX(monvalue)FORpNamein(O3,CO,PM10))ASpvt)A
WHEREA.RNUM>0andA.rnum<10

sqlserver 資料庫?

Ⅶ 資料庫原理中num是什麼意思

一般代表number(數字)的簡寫,如studentNum(學生人數),有的資料庫中用這個代表數值型數據類型。

Ⅷ this.rnum = Math.random()*100+10;這句什麼意思啊,在代碼中起什麼作用

這是個賦值語句,this 只某個類 rnum 是這個類的屬性 math.random()*100+10 是得到一個隨機數然後*100+10 把這個結果賦值給屬性RNUM
採納哦

Ⅸ 關於PHP資料庫

PHP調用三種資料庫的方法

本文比較詳細的介紹PHP調用MySQL、ODBC以及ORACLE資料庫。

MySQL是一個小巧靈瓏的資料庫伺服器軟體,對於中、小型應用系統是非常理想的。除了支持標準的ANSI SQL語句外,最重要的是,它還支持多種平台,而在Unix/Linux系統上,MySQL支持多線程運行方式,從而能獲得相當好的性能。它和PHP、 Apache一樣,是屬於開放源代碼軟體。其官方網站是:http://www.mysql.com,上面提供Windows,Linux,Unix版本的源代碼的下載。

注意,MySQL訪問函數都需要有相應的許可權才能運行。常用的相關函數介紹如下:

(1)integer mysql_connect(主機,用戶名,口令);

此函數開始一個對指定主機上的MySQL資料庫的連接。若該資料庫位於一個不同地埠,則在主機名後加上冒號和埠號。所有參數均為可選的,預設情況下分別對應為本地主機、用戶正在執行的腳本名和空。主機可以是IP地址或域名。

在腳本執行結束時,連接被自動關閉,也可以用mysql_close提前關閉。

(2)boolean mysql_create_db(資料庫名);

創建一個資料庫。注意必須用一個帶有創建資料庫許可權的帳號打開連接。

(3)boolean mysql_select_db(資料庫名,連接號);

選擇預設資料庫。

(4)integer mysql_query(SQL語句,連接號);

對指定資料庫進行查詢。如果SQL語句是select,則返回一個結果號,否則返回的值可以不理會。如果失敗,返回false.。

(5)array mysql_fetch_array(結果號);

取出下一行,返回一個數組.可以用數字下標訪問(第一個欄位是下標 0),也可以用字元串下標訪問(即使用各欄位名)。如已取了最後一行,返回 false.。

(6)mysql_fetch_row(結果號);

返回一個矩陣代表結果集中一行的所有域。每次調用都會產生下一行,直到沒有行剩下時返回false。每個域值都由一個從零開始的偏移量索引。這是從查詢中獲取結果的最快方法。

(7)integer mysql_num_rows(結果號);

返回結果集中行的數目

(8)integer mysql_num_fields(結果號);

返回結果集中域的數目。

(9)integer mysql_list_dbs();

向伺服器查詢資料庫列表。它返回一個結果指針,該指針可用於mysql_fetch_row函數及類似函數。

(10)mysql_list_tables(資料庫名);

獲取一個指向指定資料庫的表單列表的結果指針。該結果指針可用於任何從結果集中獲取行的函數。

(11)mysql_close(連接號);

關閉對資料庫的連接。連接必須是由mysql_connect打開的。該函數的使用不是嚴格必需的,因為在腳本結束時,所有非永久鏈路都會被自動關閉。

(12)mysql_pconnect(主機,用戶名,口令);

與mysql_connect完全相似,但建立一個"永久連接",該連接一經建立永不關閉,即使使用mysql_close函數或程序執行完畢也不關閉.下一次試圖建立永久連接時,系統如發現已存在一個永久連接,則直接返回該連接號而不重新創建。

下面是一個調用MYSQL資料庫並分頁顯示的例子。

<?

$pagesize = 5; //每頁顯示5條記錄

$host="localhost";

$user="user";

$password="psw";

$dbname="book"; //所查詢的庫表名;

//連接MySQL資料庫

mysql_connect("$host","$user","$password") or die("無法連接MySQL資料庫伺服器!");

$db = mysql_select_db("$dbname") or die("無法連接資料庫!");

$sql = "select count(*) as total from pagetest";//生成查詢記錄數的SQL語句

$rst = mysql_query($sql) or die("無法執行SQL語句:$sql !"); //查詢記錄數

$row = mysql_fetch_array($rst) or die("沒有更多的記錄!"); /取出一條記錄

$rowcount = $row["total"];//取出記錄數

mysql_free_result($rst) or die("無法釋放result資源!"); //釋放result資源

$pagecount = bcdiv($rowcount+$pagesize-1,$pagesize,0);//算出總共有幾頁

if(!isset($pageno)) {

$pageno = 1; //在沒有設置pageno時,預設為顯示第1頁

}

if($pageno<1) {

$pageno = 1; //若pageno比1小,則把它設置為1

}

if($pageno>$pagecount) {

$pageno = $pagecount; //若pageno比總共的頁數大,則把它設置為最後一頁

}

if($pageno>0) {

$href = eregi_replace("%2f","/",urlencode($PHP_SELF));//把$PHP_SELF轉換為可以在URL上使用的字元串,這樣的話就可以處理中文目錄或中文文件名

if($pageno>1){//顯示上一頁的褳接

echo "<a href="" . $href . "?pageno=" . ($pageno-1) . "">上一頁</a> ";

}

else{

echo "上一頁";

}

for($i=1;$i<$pageno;$i++){

echo "<a href="" . $href . "?pageno=" . $i . "">" . $i . "</a> ";

}

echo $pageno . " ";

for($i++;$i<=$pagecount;$i++){

echo "<a href="" . $href . "?pageno=" . $i . "">" . $i . "</a> ";

}

if($pageno<$pagecount){//顯示下一頁的褳接

echo "<a href="" . $href . "?pageno=" . ($pageno+1) . "">下一頁</a> ";

}

else{

echo "下一頁 ";

}

$offset = ($pageno-1) * $pagesize;//算出本頁第一條記錄在整個表中的位置(第一條記錄為0)

$sql = "select * from pagetest LIMIT $offset,$pagesize";//生成查詢本頁數據的SQL語句

$rst = mysql_query($sql);//查詢本頁數據

$num_fields = mysql_num_fields($rst);//取得欄位總數

$i = 0;

while($i<$num_fields){//取得所有欄位的名字

$fields[$i] = mysql_field_name($rst,$i);//取得第i+1個欄位的名字

$i++;

}

echo "<table border="1" cellspacing="0" cellpadding="0">";//開始輸出表格

echo "<tr>";

reset($fields);

while(list(,$field_name)=each($fields)){//顯示欄位名稱

echo "<th>$field_name</th>";

}

echo "</tr>";

while($row=mysql_fetch_array($rst)){//顯示本頁數據

echo "<tr>";

reset($fields);

while(list(,$field_name)=each($fields)){//顯示每個欄位的值

$field_value = $row[$field_name];

if($field_value==""){

echo "<td> </td>";

}

else{

echo "<td>$field_value</td>";

}

}

echo "</tr>";

}

echo "</table>";//表格輸出結束

mysql_free_result($rst) or die("無法釋放result資源!");//釋放result資源

}

else{

echo "目前該表中沒有任何數據!";

}

mysql_close($server) or die("無法與伺服器斷開連接!");//斷開連接並釋放資源

?>

開放資料庫連接(ODBC)已成為一種與資料庫進行通信的工業標准。PHP也提供了標準的介面,使得PHP能調用Access,SQL SERVER等資料庫。其相關函數是:

(1)integer odbc_connect(string dsn, string user, string password)

連接到一個ODBC資料庫源名字上。

(2)integer odbc_exec(integer connection, string query)或 odbc_do(integer connection, string query)

在一個連接上執行查詢。

(3)boolean odbc_fetch_row(integer result, integer row)

從一個結果集中獲取一行數據。Row參數是可選的,若為空缺,則返回下一個有效行。在結果集中不再剩餘行時返回false。

(4)boolean odbc_close(integer connection)

關閉一個資料庫的連接。若在該連接上有打開的事務,則返回一個錯誤,而且連接不會被關閉。

最後,還是看個分頁的例子:

<?

//設定每頁顯示條數

$show_num = 10;

$spages = $pages;//避免$pages後期被改變

//定義連接

$dsn = "localhost";

$user = "sa";

$password = "";

//計算總記錄數

$rs_num = "select count(*) as id from bbs where zu='0' and lei='".$lei."'";

$conn_id = odbc_connect($dsn,$user,$password);

$rnum = odbc_exec($conn_id,$rs_num);

while(odbc_fetch_row($rnum)){

$total_rs = odbc_result($rnum,"id");//將總記錄數放入$total_rs變數

}

//計算與頁有關的條數

$nnn = $total_rs / $show_num;//計算總頁數

$hnnn = intval($nnn);//將總頁數取整

$cnnnn = $nnn - $hnnn;

//計算所需總頁數

switch ($cnnn){

case "0":

$hnnn++;

$nnn = $hnnn;//總頁數

break;

default :

$nnn = $hnnn;//總頁數

break;

};

if ($nnn == 0)$nnn++;

//計算頁面改變所需的條件

$fore = $pages;

$next = $pages;

$fore -= 1;

$next += 1;

if ($fore > 0) {

echo "<a>首頁</a>";

echo "<a>前頁</a>";

};

if ($pages < $nnn) {

echo "<a>後頁</a>";

echo "<a>尾頁</a>";

};

echo "共".$nnn."頁";

$query_string = "SELECT * FROM table where condition order by you wanted order";

$cur = odbc_exec($conn_id,$query_string);

//取到循環的頂部

$cnum = ($pages-1) * $show_num;//計算當前的記錄游標的位置

//空循環到顯示記錄游標處
if ($cnum != 0){

for ($i=0;$i<=$cnum;odbc_fetch_row($cur)){$i++;};

};

$i=1;

//顯示記錄

while(odbc_fetch_row($cur)){

echo ;

if ($i == $show_num){//在不滿頁數時跳出程序

break;

};

$i++;

};

//關閉連接

odbc_close($conn_id);

?>

Oracle(甲骨文)是世界上最為流行的關系資料庫。它是大公司推崇的工業化的強有力的引擎。我們先看看其相關的函數:

(1)integer ora_logon(string user , string password)

開始對一個Oracle資料庫伺服器的連接。

(2)integer ora_open(integer connection)

打開給出的連接的游標。

(3)integer ora_do(integer connection, string query)

在給出的連接上執行查詢。PHP生成一個指示器,解析查詢,並執行之。

(4)integer ora_parse(integer cursor, string query)

解析一個查詢並准備好執行。

(5)boolean ora_exec(integer cursor)

執行一個先前由ora_parse函數解析過的查詢。

(6)boolean ora_fetch(integer cursor)

此函數會使得一個執行過的查詢中的行被取到指示器中。這使得您可以調用ora_getcolumn函數。

(7)string ora_getcolumn(integer cursor, integer column)

返回當前的值。列由零開始的數字索引。

(8)boolean ora_logoff(integer connection)

斷開對資料庫伺服器的鏈接。

以下是向ORACLE資料庫插入數據的示常式序:

<html>

<head><title>向ORACLE資料庫中插入數據</title></head>

<body>

<form action="<?echo $PHP_SELF;?>" method="post">

<table border="1" cellspacing="0" cellpadding="0">

<tr>

<th>ID</th>

<th>name</th>

<th>Description</th>

</tr>

<tr>

<td><input type="text" name="name" maxlength="50" size="10"></td>

<td><input type="text" name="email" maxlength="255" size="30"></td>

<td><input type="text" name="Description" maxlength="255" size="50"></td>

</tr>

<tr align="center">

<td colspan="3"><input type="submit" value="提交"><input type="reset" value="重寫"></td>

</tr>

</table>

</form>

<?

//先設置兩個環境變數ORACLE_HOME,ORACLE_SID

putenv("ORACLE_HOME=/oracle/app/oracle/proct/8.0.4");

putenv("ORACLE_SID=ora8");

//設置網頁顯示中文

putenv("NLS_LANG=Simplified_Chinese.zhs16cgb231280");

if($connection=ora_logon("scott","tiger")) {

//庫表test有ID,name,Description三項

$sql = 'insert into test(ID,name,Description) values ';

$sql .= '('' . $ID . '','' . $name . '',''. $Description . '')';

if($cursor=ora_do($connect,$sql)) {

print("insert finished!");

}

$query = 'select * from test';

if($cursor=ora_do($connect,$query)) {

ora_fetch($cursor);

$content0=ora_getcolumn($cursor,0);

$content1=ora_getcolumn($cursor,1);

$content2=ora_getcolumn($cursor,2);

print("$content0");

print("$content1");

print("$content2");

ora_close($cursor);

}

ora_logoff($connection);

}

?>

</body>

</html>
通過PHP你可以輕松的連接到資料庫,請求數據並將其顯示在你的web站點中,甚至修改資料庫中的數據。 MySQL是一種很流行的資料庫,並且在互聯網中有許多有關PHP與MySQL的教程。MySQL是免費的,這一點也許就吸引了不少人。由於其廣泛應用, 我就不想在這里贅述MySQL的使用方法了。Oracle被大量在企業應用中採用,因此我們就利用Oracle來介紹PHP與資料庫的連接。我們當然不會 提及Oracle資料庫的設計原理,原因是這已經超出了我們的討論范圍。
PHP提供了兩套函數與Oracle連接,分別是ORA_和OCI函數。其中ORA_函數略顯陳舊。OCI函數更新據說更好一些。兩者的使用語法幾乎相差無幾。如前所述,你的PHP安裝選項應該可以支持兩者的使用。
想獲得更多有關在Microsoft Windows平台上安裝支持PHP3的Apache伺服器的知識以及更多有關Oracle資料庫的知識,請查閱以下URL:www.csoft.net/~vsbabu/articles/oraphp.html。
4.1 連接

if ($conn=Ora_Logon("user@TNSNAME","password"))
{
echo "SUCCESS ! Connected to database\n";
}
else
{
echo "Failed :-( Could not connect to database\n";
}
Ora_Logoff($conn);
phpinfo();
?>
以上代碼使用TNSNAME(在你的tnsnames.ora文件中指明)定義的Oracle資料庫名稱、用戶名稱和密碼連接資料庫。在成功連接的基礎上,ora_logon函數返回一個非零的連接ID並儲存在變數$conn中。

4.2 查詢

假設與資料庫已經連接就緒,下面我們就來實際的應用對資料庫的查詢。下面的代碼演示了一個連接並查詢的典型例子:
/*
* 連接資料庫並執行查詢
*/
function printoraerr($in_cur)
{
// 檢查Oracle是否出錯
// 如果存在錯誤則顯示
// 當指針被激活時每次請求Oracle後調用該函數
if(ora_errorcode($in_cur))
echo "Oracle code - ".ora_error($in_cur)."\n";
return;
}
/** 主程序 */
if (!($conn=ora_logon("user@TNSNAME","password")))
{
echo "Connection to database failed\n";
exit;
}
echo "Connected as connection - $conn
\n";
echo "Opening cursor ...
\n";
$cursor=ora_open($conn); printoraerr($cursor);
echo "Opened cursor - $cursor
\n";
$qry="select user,sysdate from al";
echo "Parsing the query $qry ...
\n";
ora_parse($cursor,$qry,0); printoraerr($cursor);
echo "Query parsed
\n";
echo "Executing cursor ...
\n";
ora_exec($cursor); printoraerr($cursor);
echo "Executed cursor
\n";
echo "Fetching cursor ...
\n";
while(ora_fetch($cursor))
{
$user=ora_getcolumn($cursor,0); printoraerr($cursor);
$sysdate=ora_getcolumn($cursor,1); printoraerr($cursor);
echo " row = $user, $sysdate
\n";
}
echo "Fetched all records
\n";
echo "Closing cursor ...
\n";
ora_close($cursor);
echo "Closed cursor
\n";
echo "Logging off from oracle...
\n";
ora_logoff($conn);
echo "Logged off from oracle
\n";
?>
(譯者註:以上代碼段缺少注釋,請讀者參考PHP Manual的Oracle資料庫函數部分)

4.3 顯示結果

以下代碼演示了怎樣查詢資料庫並將結果輸出:
function printoraerr($in_cur, $conn)
{
// 檢查Oracle是否出錯
// 如果存在錯誤則顯示
// 當指針被激活時每次請求Oracle後調用該函數
// If it encountered an error, we exit immediately
if(ora_errorcode($in_cur))
{
echo "Oracle code - ".ora_error($in_cur)."
n";
ora_logoff($conn);
exit;
}
return;
}

function exequery($w_qry,$conn)
{
$cursor=ora_open($conn); printoraerr($cursor,$conn);
ora_parse($cursor,$w_qry,0); printoraerr($cursor,$conn);
ora_exec($cursor); printoraerr($cursor,$conn);
$numrows=0;
$w_numcols=ora_numcols($cursor);
// 顯示頭部
echo "

\n";
for ($i=0;$i<$w_numcols;$i++)
{
$align=(ora_columntype($cursor,$i)=="NUMBER")?"RIGHT":"LEFT";
echo "\t ".ora_columnname($cursor,$i)." \n";
}
echo "
\n";
while(ora_fetch($cursor))
{
echo " \n";
for ($i=0;$i<$w_numcols;$i++)
{
$align=(ora_columntype($cursor,$i)=="NUMBER")?"RIGHT":"LEFT";
if(ora_columntype($cursor,$i)=="LONG")
echo " ".
ora_getcolumn($cursor,$i)."
\n";
else
echo " ".ora_getcolumn($cursor,$i)." \n";
printoraerr($cursor,$conn);
}
$numrows++;
echo "
\n";
}
if ($numrows==0)
echo " Query returned no records

\n";
else
{
echo " \n";
echo " Count \n";
echo " $numrows \n";
echo "
\n";
}
echo " \n";
ora_close($cursor);
return;
}

// 主程序
if(!($conn=ora_logon("user@SID","password")))
{
echo "Error: Cannot connect to database\n";
exit;
}
$qry="SELECT
deptno \"Dept\"
,empno \"Emp\"
,empnm \"Name\"
,salary \"Salary\"
FROM
employee
ORDER BY 1,2";
exequery($qry);
ora_logoff($conn);
?>
(譯者註:以上代碼段缺少注釋,請讀者參考PHP Manual的Oracle資料庫函數部分)

4.4 基於HTTP的Oracle登錄

將以下代碼加在PHP頁面代碼之前以確認Oracle登錄。注意你必須正確設定$ SID。
if(!isset($PHP_AUTH_USER))
{
Header("WWW-authenticate: basic realm=\"$SID\"");
Header("HTTP/1.0 401 Unauthorized");
$title="Login Instructions";
echo "

You are not authorized to enter the site

\n";
exit;
}
else
{
if (!($conn=ora_logon("$PHP_AUTH_USER@$SID",$PHP_AUTH_PW)))
{
Header("WWW-authenticate: basic realm=\"$SID\"");
Header("HTTP/1.0 401 Unauthorized");
$title="Login Instructions";
echo "

You are not authorised to enter the site

\n";
exit;
}
}
?>

Ⅹ java怎麼將excel中string類型在導入到資料庫時轉換成表中對應的id

首先你得解析excle,再封裝實體,賦值對應的欄位,存入資料庫,類似下面的這個:

publicstaticvoidreadExcel(StringfilePath){
Proctsprocts=newProcts();
SqlSessionsqlSession=MybatisSqlSessionFactory.getSession();
ProctsMapperproctsMapper=sqlSession.getMapper(ProctsMapper.class);
Map<Integer,String>map1=FileUtil.readfile(filePath,null);
for(inti=0;i<map1.size();i++){
//獲取工作表
Workbookworkbook=ExcelUtil.reWorkbook(map1.get(i));
//獲取sheet個數
intshNum=ExcelUtil.reExcelSheet(workbook);
for(intnum=0;num<shNum;num++){
//獲取行數
introwNum=ExcelUtil.reExcelSheetRowNum(workbook,num);
if(rowNum!=0)
{
for(intrnum=0;rnum<=rowNum;rnum++){
//獲取列數
intcellNum=ExcelUtil.reExcelSheetCellNum(workbook,num,rnum);
if(cellNum!=0)
{
Stringvalue=ExcelUtil.reExcelValue(workbook,num,rnum,0,false);
procts.setProctcode(value);
procts.setActivestatus("1");
intcode=proctsMapper.updateByProctCode(procts);
sqlSession.commit();
if(code!=0)
{
logger.info("讀取Excel的行數為{},更新數據條數為{}",rnum,code);
}
}
}
}
}
logger.info("讀取Excel完成");
}
}