javascript中访问数据库
javascript本身是基于客户端运行的网页脚本,能和网页灵活配合,充分显示了天才性的一面,但是也由于他这个先天性的优越,使得他本身具有很多的局限性,数据库的支持就是其中的一个缺陷。 不足归不足,不过人是可怕的,只要有想法就有可能会让一些看似不可能的事情做好,事在认为,人定胜天。(不多说了) 要在javascript中支持数据库操作,我们的用上com技术,因为js本身对com对象的支持是很出色的,这点不用担心,然后我们自己设计一个可以访问数据库的com接口。OK,一切都可以很好完成。 js中使用com接口的方法: 1、传统方法: 创建com对象var objddo = new ActiveXObject("DDOENG.DDOAgent"); 选择这种方法的话,在页面初始化的时候会出现一个ActiveX的安全警告,要去掉该安全警告的话,你必需的在com注册的时候同时也加上安全对象的访问权限。 方法如下: inline HRESULT RegisterServer(BOOL bRegTypeLib, BOOL bService) { HRESULT hr = CoInitialize(NULL); if (FAILED(hr)) return hr; ................ / for ISafeObject / // Mark safeobject for safe initializing hr = CreateComponentCategory(CATID_SafeForInitializing, L"Controls safely initializable from persistent data!"); if (FAILED(hr)) return hr; // Register CLSID In Category hr = RegisterCLSIDInCategory(CLSID_DDOAgent, CATID_SafeForInitializing); if (FAILED(hr)) return hr; // Mark safeobject for script initializing hr = CreateComponentCategory(CATID_SafeForScripting, L"Controls safely scriptable!"); if (FAILED(hr)) return hr; hr = RegisterCLSIDInCategory(CLSID_DDOAgent, CATID_SafeForScripting); if (FAILED(hr)) return hr; / for ISafeObject / CoUninitialize(); return hr; } inline HRESULT UnregisterServer() { HRESULT hr = CoInitialize(NULL); if (FAILED(hr)) return hr; ................ / for ISafeObject / // remove safeobject mark for safe initializing hr=UnRegisterCLSIDInCategory(CLSID_NGSFT_Controller, CATID_SafeForInitializing); if (FAILED(hr)) return hr; // remove Mark safeobject for script initializing hr=UnRegisterCLSIDInCategory(CLSID_DDOAgent, CATID_SafeForScripting); if (FAILED(hr)) return hr; / for ISafeObject / CoUninitialize(); return S_OK; } // // Create Component Category HRESULT CreateComponentCategory(CATID catid, WCHAR* catDescription) { ICatRegister* pcr = NULL ; HRESULT hr = S_OK ; hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr); if (FAILED(hr)) return hr; // Make sure the HKCR/Component Categories/{..catid...} // key is registered. CATEGORYINFO catinfo; catinfo.catid = catid; catinfo.lcid = 0x0409 ; // english // Make sure the provided description is not too long. // Only copy the first 127 characters if it is. int len = wcslen(catDescription); if (len>127) len = 127; wcsncpy(catinfo.szDescription, catDescription, len); // Make sure the description is null terminated. catinfo.szDescription[len] = '/0'; hr = pcr->RegisterCategories(1, &catinfo); pcr->Release(); return hr; } // Register CLSID In Category HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid) { // Register your component categories information. ICatRegister* pcr = NULL ; HRESULT hr = S_OK ; hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr); if (SUCCEEDED(hr)) { // Register this category as being "implemented" by the class. CATID rgcatid[1] ; rgcatid[0] = catid; hr = pcr->RegisterClassImplCategories(clsid, 1, rgcatid); } if (pcr != NULL) pcr->Release(); return hr; } // UnRegister CLSID In Category HRESULT UnRegisterCLSIDInCategory(REFCLSID clsid, CATID catid) { ICatRegister* pcr = NULL ; HRESULT hr = S_OK ; hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr); if (SUCCEEDED(hr)) { // Unregister this category as being "implemented" by the class. CATID rgcatid[1] ; rgcatid[0] = catid; hr = pcr->UnRegisterClassImplCategories(clsid, 1, rgcatid); } if (pcr != NULL) pcr->Release(); return hr; } 2、ie external方法: 创建com对象var objddo = external.GetComObj("DDOENG.DDOAgent"); 这个方法需要自己去实现ie external接口并实现GetComObj方法才行,但这种方法灵活性和安全性更好,因为一切都在自己掌握中. 以上提到的对象是自定义的com对象,这个对象是在DDOENG文件中以IDDOAgent命名的接口的实例,这个接口负责所有与数据库的交互工作,比如你可以在接口中实现以下方法 Connect([in,string]BSTR host,[in,string]BSTR database,[in,string],[in,string]BSTR account,[in,string]BSTR psw, [out, retval]ULONG* pHanle); Excute([in]ULONG handle, [in,string]BSTR query, [out, retval]ULONG* pErrCode); StoreResult([in]ULONG handle, [out, retval]ULONG* pResHanle); FreeResult([in]ULONG HanleRes); Fetch([in]ULONG HanleRes, [out, retval]VARIANT* pRow); First([in]ULONG HanleRes, [out, retval]VARIANT* pRow); Next([in]ULONG HanleRes, [out, retval]VARIANT* pRow); Prev([in]ULONG handle, [out, retval]VARIANT* pRow); 这些方法如果都已经实现了的话,那还有什么好说的
javascript中访问数据库相关推荐
- 如何在Javascript中访问对象的第一个属性?
本文翻译自:How to access the first property of an object in Javascript? Is there an elegant way to access ...
- php节点对象,JavaScript_JavaScript中访问节点对象的方法有哪些如何使用,JavaScript中访问节点对象的方法 - phpStudy...
JavaScript中访问节点对象的方法有哪些如何使用 JavaScript中访问节点对象的方法有哪些? var obj = document.getElementById('fdafda'); va ...
- Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别? Java 中访问数据库的步骤 1)注册驱动: 2)建立连接: 3)创建Statement: 4)执 ...
- 选择嵌套_如何优雅地在JavaScript中访问嵌套对象
在JavaScript中访问嵌套对象 以超酷的方式安全地访问JavaScript中的嵌套对象 JavaScript是惊人的,我们都知道.但是JavaScript中的一些东西真的很奇怪,它们让我们大开眼 ...
- 避免在循环中访问数据库,一次对于PHP代码的优化经历
避免在循环中访问数据库,一次对于PHP代码的优化经历 这次是在上班过程中发生的事件,我隔壁的同事正在写一个功能.这个功能简单的描述是这样的:从数据库几个表中获取数据,导入到excel,类似的功能,实际 ...
- 在 JavaScript 中访问对象属性的 3 种方法
您可以通过 3 种方式访问 JavaScript 中对象的属性: 点属性访问器:object.property 方括号属性访问:object['property'] 对象解构:const { prop ...
- java 中访问数据库的步骤
1.导入连接数据库的Jar包 2.创建连接数据库对象Connection 3.创建Statement对象 4.执行SQL语句 5.返回结果集 6.对结果集用对象封装 7.关闭数据库连接
- jsp学习 jdbc访问数据库
因为我目前在学校有一门课程叫做javaweb,其中涉及到JavaScript中进行数据库访问的测试,经过学习发现与我们之前通过配置数据源结合spring提供的模板以及mybatis提供的方法进行数据库 ...
- C++ 版本ORM访问数据库之ODB访问oracle的Demo(三)
ODB的组成部分: 1: 操作系统的ODB编译器 2: odb核心库libodb 3: 各种数据库的相关链接库 使用ODB访问数据需要的库和头文件(不懂, 请看https://www.cnblogs. ...
最新文章
- 1132 Cut Integer
- Powershell 如何批量获取文件大小的实现代码
- 计算机count的功能是,全国计算机二级Access每日练习4
- Android 搜索框 search dialog 和 search widget
- 两种比较不错的密码修改方案
- 神经网络贷款风险评估(base on keras and python )
- java中什么方法用来清空流_这个真的写的很细,JavaIO中的常用处理流,看完只有10%的人还不懂了...
- 许昌学院计算机学院张伶俐,2019年教育科学学院毕业论文答辩工作安排
- return 0可以不加吗_拼多多开店可以不交保证金? 拼多多0元开店是真的吗?
- 为什么用自己的电脑部署服务器之后外网访问不到呢?并且该如何解决这个问题呢?
- GPS NMEA0183协议解析(转载)
- Magic Squares
- git几个救命的命令
- 苏宁成立快递员节PK京东封杀快递,谁的做法更聪明?
- 火狐浏览器安装插件步骤
- Sigmoid函数介绍
- 准确率(accuracy)、精确率(Precision)、召回率(Recall)
- 迈克尔·霍利:当我看到人们急着加入新行列、抛弃高度发展的老技术时,我就感到很伤心
- C语言中ret的作用,c-RET抑制剂 | c-RET Inhibitor
- 2020iPS细胞研究进展综述