基于JNI技术的组态软件数据库访问方法及应用
数据库技术及应用:数据库访问

数据库引擎就是驱动各种数据库的程序,它负责处理 数据库相关工作的整个核心部份。同样的,数据库应用程 序的操作指令,均会通过数据库引擎的处理作用到数据库 上,从而简化并统一对不同数据库的访问。
(二) Command对象
在建立Connection后,可以发出命令操作数据源。一般 情况下,Command对象可以在数据库中添加、删除或更新 数据,或者在表中进行数据查询。
Command对象在定义查询参数或执行一个有输出参数 的存储过程时非常有用。
Command对象通常声明为全局变量,格式为: Dim cm As New mand
7.2.5 数据库访问
只有具备专业知识的人员才能通过数据库管理系统操 作数据库,而一般用户都是通过数据库应用系统来使用数 据库的。
数据库应用系统是一种面向普通用户的应用程序,它 通过友好的前台界面向用户提供数据库操作接口,同时通 过程序代码来操作数据库,最终实现对数据库中数据的访 问。
一、数据库引擎及其接口
一、数据库引擎及其接口
应用程序
数据库引擎
……
1. JET与DAO 2. ODBC与RDO 3. OLE DB与ADO
数据库1 数据库n
二、OLE DB与ADO
OLE DB,对象链接与嵌入数据库,是微软提供一种对各 类应用程序均适用的,采用ODBC接口,通过结构化查询语言 SQL对数据库进行访问操作的总体解决方案。
二、OLE DB与ADO
应用系统 ADO OLE DB
游标 引擎
查询 引擎
Shape 引擎
OLE DB电子 表格Fra bibliotekODBC SQL
jni 函数

jni 函数JNI 函数简介JNI(Java Native Interface)是一种允许Java代码调用和被C或C++代码调用的机制。
它提供了一种连接Java虚拟机(JVM)和本地代码的方式,使得Java程序可以调用底层的本地库,以及本地代码可以调用Java程序中的方法和对象。
在Android开发中,JNI函数起到了至关重要的作用。
它可以用于实现与底层硬件交互、调用第三方库、提高性能等。
本文将介绍一些常用的JNI函数及其用途。
1. JNIEnv 和 jclassJNIEnv是JNI的环境接口,它提供了一系列函数用于Java代码与本地代码之间的通信。
通过JNIEnv,我们可以获取Java虚拟机的实例,并调用Java方法、获取Java对象等。
jclass则代表Java中的类,在JNI中可以用来获取类的方法、字段等信息。
2. jstring 和 char*jstring是JNI中表示Java字符串的类型,它可以与C/C++中的char*进行互相转换。
通过JNIEnv的GetStringUTFChars函数可以将jstring转换为char*,而通过NewStringUTF函数可以将char*转换为jstring。
3. jint 和 intjint是JNI中表示Java整数的类型,它可以与C/C++中的int进行互相转换。
通过JNIEnv的GetIntField函数可以获取Java对象的整数字段值,而通过SetIntField函数可以设置Java对象的整数字段值。
4. jobjectArray 和 jobjectjobjectArray是JNI中表示Java对象数组的类型,它可以与C/C++中的数组进行互相转换。
通过JNIEnv的GetObjectArrayElement函数可以获取数组中的元素,而通过SetObjectArrayElement函数可以设置数组中的元素。
5. jmethodID 和 jfieldIDjmethodID和jfieldID是JNI中表示Java方法和字段的标识符。
219434023_基于Java_语言的数据库访问技术应用研究

83Internet Application互联网+应用数据库访问技术是计算机软件开发过程中,经常用到的一项基本技术。
现如今,随着计算机技术快速发展,基于Java 语言的数据库访问技术在基本软件开发过程中得到了广泛应用,而且它的重要性日益凸显。
对于网络工程师而言,将Java 语言与数据库访问技术结合应用到计算机软件的开发中,可以简化计算机软件开发设计流程,更能够提高软件开发的便捷性与有效性、安全性,因此这项技术是软件设计技术的一大进步[1]。
但是,在 软件开发设计时,由于用户的需求日益精细和多元,工 程师除了要提高软件开发的效率之外,还要充分考虑计 算机语言设计的全面性和安全性。
这就要求工程师在数 据库访问过程中,采用更加适合的计算机语言进行程序 设计,通过优化计算机语言,实现数据库的高效访问, 提升软件运行的效率。
在此背景下,本文对目前常用的四种数据库访问技术进行分析,并将Java 语言运用到数据库访问中,提升软件运行整体效率。
一、基于Java 语言的常用数据库访问技术(一)Java 的持久化技术基于Java 语言的“持久化”数据库访问技术通常指的是“JPA 技术”,该项技术的主要运行工作原理是,在数据库中,将描述对象与运行期实体对象关系表之间的映射关系进行持久化处理,通过对计算机运行程序进行标准化执行,基于Java 语言提高数据库操作访问的便捷性,目前,专业的计算机工程师通常采用JPA 技术,借助Java 语言实现数据库访问[2]。
(二)Java 命名与目录接口技术基于Java 语言的“Java 命名与目录接口”技术也称“JNDI 技术”,这种技术便于计算机开发工作人员实基于Java 语言的数据库访问技术应用研究现对象与命名之间的关联性,基于Java 语言通过为数据库开发人员提供一种对数据库进行高效访问的可供数据查找与访问、目录服务与命名的通用接口,有效提升数据库访问的响应效率。
(三)Java 数据库连接技术基于Java 语言的数据库连接主要是指基于JDBC 技术的数据库连接,此技术能够为数据库开发工作人员提供一种新的编程接口,使得技术人员在数据库开发时,借助JDBC 技术进行数据库连接。
java jni原理

java jni原理Java JNI原理和使用方法一、什么是JNI?JNI(Java Native Interface)是一种允许Java代码调用本地(C/C++)代码的技术。
它提供了一种机制,使得Java程序能够与底层的原生代码进行交互,从而实现跨平台的功能。
通过JNI,我们可以在Java中调用C/C++编写的函数,同时也可以在C/C++中调用Java方法。
二、为什么要使用JNI?在某些场景下,Java语言的性能和功能可能无法满足需求。
而C/C++这样的低级编程语言在效率和灵活性方面有着明显的优势。
因此,使用JNI 可以让我们在Java中利用C/C++的优势,同时继续享受Java的跨平台特性。
三、JNI的工作原理1. 创建Java Native Method接口:首先,我们需要在Java代码中声明一个本地方法,这个方法用native关键字修饰,明确表示这个方法是由本地代码实现的。
2. 生成Java头文件:接下来,我们需要通过命令行工具`javah`来生成一个.h头文件,该文件定义了Java中声明的本地方法的接口。
3. 编写C/C++代码:根据生成的Java头文件,我们可以编写相应的C/C++代码,实现Java中声明的本地方法。
在C/C++代码中,我们可以使用JNI提供的函数和数据类型来与Java进行交互。
4. 编译本地代码生成动态链接库:将C/C++代码编译成一个动态链接库(DLL文件),以供Java程序调用。
这个动态链接库可以在不同的操作系统平台上使用。
5. 在Java程序中加载本地库:在Java程序中使用System.loadLibrary()方法来加载生成的动态链接库。
通过加载库文件,Java程序可以使用本地方法提供的功能。
6. 调用本地方法:在Java代码中,通过调用本地方法来执行C/C++代码的功能。
在调用本地方法时,JNI会负责将Java的数据类型转化为C/C++支持的数据类型以及异常处理。
J2EE组件使用JDBC应用程序编程接口API中包含的数据对

(1)连接:
在JDBC驱动程序成功加载和注册后,J2EE组 件需要连接数据库。
JDBC要连接的数据源使用URL格式来定义。 URL包括三个部分,即:
jdbc 指出JDC协议是用来读取URL的 <subprotocol> JDBC驱动程序的名字 <subname> 数据库的名字
与数据库的连接通过使用DriverManager的 getConnction()方法,该方法有3种形式(2次重 载)。
getConnection(String url);
getConnection(String url, String user, String password);
getconnection(String url, Properties props);
关闭DBMS和J2EE组件之间的连接
类型: JDBC驱动程序规范把JDBC驱动程序分为4组:
(1)JDBC-to-ODBC驱动程序
JDBC-to-ODBC驱动程序从符合JDBC规范的 J2EE组件接收消息,这些消息被JDBC-toODBC驱动程序转换为ODBC消息格式,然后又 被转换为ODBC消息格式,然后再被转换为 DBMS可以理解的消息格式。
3.1 JDBC驱动程序
JAVA程序员可以使用定义在JDBC API里的高 层JAVA数据对象来编写与DBMS进行交互的程 序。JAVA数据对象把程序转换成符合JDBC驱 动程序规范的底层消息,并把消息发送到JDBC 驱动程序,JDBC驱动程序再把程序翻译成能被 DBMS理解和处理的底层消息。
JDBC驱动程序使J2EE组件与数据库无关,这 补充了JAVA的平台无关性原则。
示例—连接到DBMS String url = “jdbc:odbc:CustomerInformation”; String userID = “lpf”; String pwd = “whut”; private Connection Db; try{
组态软件操作指南与数据库连接

第八章与数据库连接本章容创建数据源及数据库创建表格模板创建记录体对数据库的操作数据集函数在关系库中的应用概述本章我们将讲解如何将阀门的状态变化记录到数据库中并进行查询。
数据库我们选择Access数据库,记录的容包括:日期、时间、阀门描述、阀门状态四个字段。
我们利用KingSCADA的SQL访问功能来实现。
KingSCADA SQL访问功能实现KingSCADA和其他外部数据库之间的数据传输。
提供2种访问方式:一种是记录体的方式,即变量和数据库表中的字段建立绑定关系;一种是数据集方式。
记录体方式就是通过记录体配置项,实现把数据库里面的字段和KingSCADA的变量建立绑定关系。
绑定后,可以通过SQL插入或更新函数将绑定变量插入或更新到数据库的对应字段中;也可以通过SQL 查询函数将数据库中对应字段数据查询并保存到绑定变量中,实现KingSCADA和关系数据库的数据交互。
记录体方式只能在KingSCADA服务器端应用。
数据集方式就是通过KingSCADA提供的一系列数据集函数,执行标准SQL语句,实现KingSCADA 与关系数据库之间的增、查、删、改等所有数据交互功能,尤其可以通过数据集函数,实现从数据库查询出符合SQL语句的数据集合,并在报表、曲线中进行批量数据展示。
数据集方式支持在KingSCADA服务器端、C/S客户端、WEB上使用。
在这里建议采用数据集方式,更加方便、灵活。
下面具体介绍2种方式的具体使用第一节记录体方式在关系数据库中的应用(仅参考)一、创建数据源及数据库以KingSCADA带的DEMO工程中的mine.mdb数据库为例,首先将mine.mdb文件从DEMO工程中拷贝到我们新建的这个培训工程中。
然后,用Windows控制面板中自带的ODBC Data Sources (32bit)管理工具新建一个Microsoft Access Driver(*.mdb)驱动的数据源,名为:mine,然后配置该数据源,指向刚才拷贝过来的Access数据库(即mydb.mdb),如图8-1所示:图8-1ODBC数据源的建立二、创建表及记录体创建表用ACCESS打开mine.mdb数据库,在库中新建表“KingTable”,在表中建立三个字段日期时间、液位、温度,如图8-2所示:图8-2在mine数据库中创建表日期时间字段为日期时间类型。
jni的案例
jni的案例JNI(Java Native Interface)是一种编程工具,允许Java应用程序与本地操作系统进行通信。
使用JNI可以调用本地代码库中的方法,这些方法使用C或C++编写而不是Java。
JNI被广泛应用于Java虚拟机底层开发。
下面介绍一个JNI的案例。
在Android应用程序中,有一种常见的需求是打开本地库并与其交互。
例如,对于一些计算密集型任务,开发者可能会希望使用本地C 代码来提高应用程序的性能。
这时候就需要用到JNI。
下面介绍一个简单的JNI案例来演示该过程。
假设我们有一份名为libhello.so的本地C库,其功能是输出"Hello, World!"。
我们需要将这个本地库与Java代码进行交互。
首先,我们需要在Java代码中声明一个本地方法:```javapublic native void printHello();```然后,在命令行中执行以下操作:1. 使用Java编译器编译Java代码。
```bashjavac Main.java```2. 使用Java头文件生成器生成JNI头文件。
```bashjavah -classpath . Main```3. 创建一个C源文件,实现Java声明的本地方法。
```c#include <jni.h>#include <stdio.h>#include "Main.h"JNIEXPORT void JNICALL Java_Main_printHello(JNIEnv *env, jobject obj){printf("Hello, World!\n");}```4. 使用C编译器将C代码编译成共享库。
```bashgcc -shared -fpic -o libhello.so Main.c```5. 运行Java应用程序。
```bashjava -Djava.library.path=. Main```以上步骤的目的是使Java应用程序可以找到本地库并调用其中的本地方法。
JNI编程——精选推荐
JNI编程JNI介绍Java 本机接⼝(Java Native Interface (JNI))是⼀个本机接⼝,它是 Java 软件开发⼯具箱(Java SoftwareDevelopment Kit (SDK))的⼀部分。
JNI允许 Java 代码使⽤以其它语⾔(譬如 C 和 C++)编写的代码和代码库。
Invocation API(JNI 的⼀部分)可以⽤来将 Java 虚拟机(JVM)嵌⼊到本机应⽤程序中,从⽽允许程序员从本机代码内部调⽤ Java 代码。
环境需求JNI 最常见的两个应⽤:从 Java 程序调⽤ C/C++,以及从 C/C++ 程序调⽤ Java 代码需要下列⼯具与组件:Java 编译器:随 SDK(Java 2 SDK及以上)⼀起提供的 javac.exe。
Java 虚拟机(JVM):随 SDK ⼀起提供的 java.exe。
本机⽅法 C ⽂件⽣成器:随 SDK ⼀起提供的 javah.exe。
定义 JNI 的库⽂件和本机头⽂件。
jni.h (C 头⽂件)、jvm.lib 和 jvm.dll (window下)或 libjvm.so ⽂件(linux下),这些⽂件都是随SDK ⼀起提供的。
能够创建共享库的 C 和 C++ 编译器。
最常见的两个 C 编译器是⽤于 Windows 的 Visual C++ 和⽤于基于 UNIX 系统的 gcc/cc。
⽤Java调⽤C/C++代码当⽆法⽤ Java 语⾔编写整个应⽤程序时,JNI 允许您使⽤本机代码。
在下列典型情况下,您可能决定使⽤本机代码:希望⽤更低级、更快的编程语⾔去实现对时间有严格要求的代码。
希望从 Java 程序访问旧代码或代码库。
需要标准 Java 类库中不⽀持的依赖于平台的特性。
从 Java 代码调⽤ C/C++ 的六个步骤从 Java 程序调⽤ C 或 C ++ 代码的过程由六个步骤组成。
我们将在下⾯⼏页中深⼊讨论每个步骤,但还是先让我们迅速地浏览⼀下它们。
jni高级用法
jni高级用法JNI(Java Native Interface)是一种允许Java代码与其他编程语言进行交互的机制。
虽然大多数开发者可能只使用JNI来调用C或C++编写的库,但实际上,JNI还有许多高级用法可以发挥。
一种常见的JNI高级用法是动态注册。
通常情况下,我们需要在Java代码中使用`System.loadLibrary()`加载一个动态链接库来调用其中的函数。
然而,借助动态注册,我们可以绕过这个步骤。
动态注册允许我们在运行时直接在Java代码中注册本机方法,而无需显式加载库。
这样可以减少一些开发的繁琐过程,并增加代码的可读性。
另一个高级用法是使用JNI实现双向通信。
通常,在JNI中,我们只能从Java代码调用本地方法,以便在本地进行一些操作。
但是,我们也可以通过JNI让本地代码调用Java代码。
这样,我们可以在本地代码中处理一些复杂的操作,然后将结果传递回Java端,以便在应用程序中使用。
JNI还可以用于实现性能优化。
由于JNI调用的开销相对较高,使用JNI调用频繁的方法可能会导致性能下降。
为了解决这个问题,我们可以使用JNI直接在本地代码中进行一些耗时的计算,然后将结果返回给Java代码。
这样可以减少JNI调用的次数,从而提高整体性能。
除了上述提到的高级用法,JNI还可以用于很多其他场景,比如实现Java与其他编程语言之间的数据交换、实现跨平台的特定功能、调用硬件相关的功能等等。
不过,在使用JNI时,需要注意一些潜在的问题,比如内存管理、线程安全性等。
正确地使用JNI,可以为我们的应用程序带来更多的灵活性和性能优势。
总之,JNI是一种强大的工具,具备许多高级用法。
通过动态注册、双向通信、性能优化等方式,我们可以充分利用JNI的潜力。
然而,在使用时需要注意合理的使用场景,并遵循JNI的最佳实践,以确保程序的稳定性和可靠性。
java jni方法
java jni方法Java Native Interface(JNI)是Java 的一项技术,允许Java 程序与本地应用程序或库进行交互。
通过JNI,你可以调用本地代码(通常是用C 或C++ 编写的)并从Java 中访问本地库。
以下是一个简单的示例,演示如何使用JNI 调用本地方法:步骤1:编写Java 类```java// HelloWorld.javapublic class HelloWorld {// 加载本地库static {System.loadLibrary("HelloWorldLibrary");}// 声明本地方法public native void sayHello();// Java 主程序public static void main(String[] args) {HelloWorld helloWorld = new HelloWorld();helloWorld.sayHello();}}```步骤2:生成头文件在命令行中执行以下命令:```bashjavac HelloWorld.javajavah -jni HelloWorld```执行完上述命令后,将生成一个名为`HelloWorld.h` 的头文件。
步骤3:实现本地方法创建一个C 文件`HelloWorld.c`,并实现本地方法:```c// HelloWorld.c#include <stdio.h>#include "HelloWorld.h"JNIEXPORT void JNICALL Java_HelloWorld_sayHello(JNIEnv *env, jobject obj) {printf("Hello from C!\n");}```步骤4:生成共享库在命令行中执行以下命令:```bashgcc -shared -fpic -o libHelloWorldLibrary.so HelloWorld.c -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux```将生成一个名为`libHelloWorldLibrary.so` 的共享库。