电竞比分网-中国电竞赛事及体育赛事平台

分享

用js連接access數(shù)據(jù)庫的方法

 平平鳳鳳 2010-03-14
 

Access數(shù)據(jù)庫名為 MyData.Mdb, 里面建了一個(gè)名為count的表,表由兩個(gè)字段組成: ID和COUNT,表里有一條數(shù)據(jù): ('count','100')。    文本文件名為 count.txt,里面隨便寫入一個(gè)數(shù)字。 靜態(tài)頁面名為Cnt.htm。

以上3個(gè)文件都放在同一目錄下。

      由于采用Access數(shù)據(jù)庫,而它采用非標(biāo)準(zhǔn)SQL語法,所以要注意在表名和字段名上需要加方括號(hào): []

下面是頁面里的代碼:

      其中g(shù)etCountFromDB方法是對(duì)Access數(shù)據(jù)庫進(jìn)行操作,getCountFromTxt方法是對(duì)txt純文本進(jìn)行操作,這兩個(gè)方法都在本地執(zhí)行通過。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE> New Document </TITLE>

<META NAME="Generator" CONTENT="EditPlus">

<META NAME="Author" CONTENT="">

<META NAME="Keywords" CONTENT="">

<META NAME="Description" CONTENT="">

<SCRIPT LANGUAGE="JavaScript">

<!--

function getCountFromDB() {

      //以當(dāng)前頁面文件為基礎(chǔ),找到文件所在的絕對(duì)路徑。

      var filePath = location.href.substring(0, location.href.indexOf("Cnt.htm"));

      var path = filePath + "MyData.mdb";

      //去掉字符串中最前面的"files://"這8個(gè)字符。

      path = path.substring(8);

      var updateCnt = 0;

      //生成查詢和更新用的sql語句。

      var sqlSelCnt = "SELECT COUNT FROM [COUNT] WHERE ID = 'count'";

      var sqlUpdCnt = "UPDATE [COUNT] SET [COUNT] = '";

      //建立連接,并生成相關(guān)字符串 www.。

      var con = new ActiveXObject("ADODB.Connection");

      con.Provider = "Microsoft.Jet.OLEDB.4.0";

      con.ConnectionString = "Data Source=" + path;

      con.open;

      var rs = new ActiveXObject("ADODB.Recordset");

      rs.open(sqlSelCnt, con);

      while (!rs.eof) {

          var cnt = rs.Fields("COUNT");

          document.write(cnt);

          //將取得結(jié)果加1后更新數(shù)據(jù)庫。

          updateCnt = cnt * 1 + 1;

          rs.moveNext;

      }

      rs.close();

      rs = null;

      sqlUpdCnt = sqlUpdCnt + updateCnt + "'";

      con.execute(sqlUpdCnt);

      con.close();

      con = null;

}

function getCountFromTxt() {

      var filePath = location.href.substring(0, location.href.indexOf("Cnt.htm"));

      var path = filePath + "count.txt";

      path = path.substring(8);

      var nextCnt = 0;

      var fso, f1, ts, s;

      //以只讀方式打開文本文件。

      var ForReading = 1;

      //以讀寫方式打開文本文件。

      var ForWriting = 2;

      fso = new ActiveXObject("Scripting.FileSystemObject");

      f1 = fso.GetFile(path);

      ts = f1.OpenAsTextStream(ForReading, true);

      s = ts.ReadLine();

      nextCnt = eval(s) + 1;

      document.write("now count is :" + s);

      ts.Close();

      ts = f1.OpenAsTextStream(ForWriting, true);

      ts.WriteLine(nextCnt);

      ts.close();

}

//-->

</SCRIPT>

</HEAD>

<BODY>

<SCRIPT LANGUAGE="JavaScript">

<!--

getCountFromTxt();

//-->

</SCRIPT>

</BODY>

</HTML>

后記:雖然在只支持靜態(tài)頁面的免費(fèi)空間不可用,但是我想一些支持Asp的免費(fèi)空間應(yīng)該能用,當(dāng)然我沒有具體試過,只是憑自己想象。并且用這種方法來讀寫數(shù)據(jù)庫,只適合做計(jì)數(shù)器和留言版這樣的不需要保密性的工作,畢竟代碼全是用javascript寫成的,誰都可以看到,然后就可以得到路徑把db文件下載下來進(jìn)行分析,所以沒辦法用它來保存一些不想讓別人知道的東西。就像我一個(gè)同事說的,用javascript連接數(shù)據(jù)庫進(jìn)行操作,簡(jiǎn)直就是霸王硬上弓,呵呵,的確如此,既然不能用在免費(fèi)空間上作自己的計(jì)數(shù)器,那這段代碼就只能用來玩玩,自己找找良好感覺了。

收集:

  

簡(jiǎn)單的數(shù)據(jù)庫操作:

<HTML>

<HEAD>

<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">

<TITLE></TITLE>

<script language=javascript>

function connectDb()

{

var ConnDB = new ActiveXObject("ADODB.Connection");

    ConnDB.ConnectionString="dsn=shbxdatabase;uid=ldbx;pwd=123456;";  

    ConnDB.Open();  

var    Rs = new ActiveXObject("ADODB.Recordset");

var tempstr="";

Rs.Open("select * from WDA1",ConnDB,1,3);

while(!Rs.EOF)

{

    tempstr = tempstr + Rs("TNAME") + "<br/>";

    Rs.MoveNext;

}

    test.innerHTML=tempstr;

}

</script>

</HEAD>

<BODY onbeforeunload="return 'ok?'">

<P><div id=test> </div>

<P><INPUT id=button1 type=button value=顯示 name=button1 onclick="connectDb()"></P>

</BODY>

</HTML>

>>>>>>-------------------------------------

var db="D:\\js\\9t\\db1.mdb";

function opendb(dbname,sql)

{

var opendb =new ActiveXObject("ADODB.Recordset")

opendb.ActiveConnection = "DBQ="+dbname+";DRIVER={Microsoft Access Driver (*.mdb)};"

opendb.Source = sql

opendb.CursorType = 1

opendb.CursorLocation = 2

opendb.LockType = 3

opendb.Open()

return opendb

}

var rs=new Object();

rs=opendb(db,"select * from 產(chǎn)品 where id="+i);

document.all.xx1.innerHTML=rs("生產(chǎn)廠商").value;

document.all.xx2.innerHTML=rs("產(chǎn)品名稱")+"/"+rs("型號(hào)");

document.all.xx3.innerHTML=rs("售價(jià)");

document.all.xx4.innerHTML=rs("批發(fā)");

document.all.xx5.innerHTML=rs("備注");

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<---------------------------------------

連接ACCESS只能用數(shù)據(jù)源,操作數(shù)據(jù)庫的方法跟ASP之類是一樣的。

只不過執(zhí)行的語句不一樣罷了。

如:

String dbUrl = "sun.jdbc.odbc.JdbcOdbcDriver";

String dbConStr = "jdbc:odbc:dnsName";

Connection Conn = null;

Statement stmt = null;

try{

      Class.forName(dbUrl);

      }catch(ClassNotFoundException e){

          System.err.println("Not Found ClassForName" + e.getMessage());

      }

try{

      Conn = DriverManager.getConnection(dbConStr, "uid", "pwd");     //連接數(shù)據(jù)庫,uid與pwd分別為 用戶名及密碼(連接數(shù)據(jù)庫的),如果沒有既為空

      stmt = Conn.createStatement();

      }catch(Exception e){

          System.err.println("Can't Connect the DATA" + e.getMessage());

      }

//以下為操作數(shù)據(jù)庫的

String sql = "select * from tableName[....]";

ResultSet Rs = stmt.executeQuery(sql);      // 返回記錄集

String sqlUpdate = "update...";

String sqlInsert = "insert into....";

stmt.executeUpdate(sqlUpdate);     //更新記錄

stmt.executeUpdate(sqlInsert);    //插入記錄

Conn.close();

stmt.close();

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1496900

簡(jiǎn)單的數(shù)據(jù)庫操作:

<HTML>

<HEAD>

<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">

<TITLE></TITLE>

<script language=javascript>

function connectDb()

{

var ConnDB = new ActiveXObject("ADODB.Connection");

   ConnDB.ConnectionString="dsn=shbxdatabase;uid=ldbx;pwd=123456;";  

   ConnDB.Open();  

var   Rs = new ActiveXObject("ADODB.Recordset");

var tempstr="";

Rs.Open("select * from WDA1",ConnDB,1,3);

while(!Rs.EOF)

{

   tempstr = tempstr + Rs("TNAME") + "<br/>";

   Rs.MoveNext;

}

   test.innerHTML=tempstr;

}

</script>

</HEAD>

<BODY onbeforeunload="return 'ok?'">

<P><div id=test> </div>

<P><INPUT id=button1 type=button value=顯示 name=button1 onclick="connectDb()"></P>

</BODY>

</HTML>

>>>>>>-------------------------------------

var db="D:\\js\\9t\\db1.mdb";

function opendb(dbname,sql)

{

var opendb =new ActiveXObject("ADODB.Recordset")

opendb.ActiveConnection = "DBQ="+dbname+";DRIVER={Microsoft Access Driver (*.mdb)};"

opendb.Source = sql

opendb.CursorType = 1

opendb.CursorLocation = 2

opendb.LockType = 3

opendb.Open()

return opendb

}

var rs=new Object();

rs=opendb(db,"select * from 產(chǎn)品 where id="+i);

document.all.xx1.innerHTML=rs("生產(chǎn)廠商").value;

document.all.xx2.innerHTML=rs("產(chǎn)品名稱")+"/"+rs("型號(hào)");

document.all.xx3.innerHTML=rs("售價(jià)");

document.all.xx4.innerHTML=rs("批發(fā)");

document.all.xx5.innerHTML=rs("備注");

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<---------------------------------------

連接ACCESS只能用數(shù)據(jù)源,操作數(shù)據(jù)庫的方法跟ASP之類是一樣的。

只不過執(zhí)行的語句不一樣罷了。

如:

String dbUrl = "sun.jdbc.odbc.JdbcOdbcDriver";

String dbConStr = "jdbc:odbc:dnsName";

Connection Conn = null;

Statement stmt = null;

try{

     Class.forName(dbUrl);

     }catch(ClassNotFoundException e){

         System.err.println("Not Found ClassForName" + e.getMessage());

     }

try{

     Conn = DriverManager.getConnection(dbConStr, "uid", "pwd");    //連接數(shù)據(jù)庫,uid與pwd分別為 用戶名及密碼(連接數(shù)據(jù)庫的),如果沒有既為空

     stmt = Conn.createStatement();

     }catch(Exception e){

         System.err.println("Can't Connect the DATA" + e.getMessage());

     }

//以下為操作數(shù)據(jù)庫的

String sql = "select * from tableName[....]";

ResultSet Rs = stmt.executeQuery(sql);     // 返回記錄集

String sqlUpdate = "update...";

String sqlInsert = "insert into....";

stmt.executeUpdate(sqlUpdate);    //更新記錄

stmt.executeUpdate(sqlInsert);   //插入記錄

Conn.close();

stmt.close();

以上就是簡(jiǎn)單的數(shù)據(jù)庫操作!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多