ÎÒÈ¥Äê×öÁ˸öÄÚ´æÊý¾Ý¿â£¬×ÔÒÔΪ¹¦ÄܺÜÇ¿´ó¡£ÄÚ´æÊý¾Ý¿âÊǶÀÁ¢ÔËÐеijÌÐò£¬¿Í»§¶Ëͨ¹ýsocket·ÃÎÊ£¬´«ËÍSQLÓï¾ä²¢µÃµ½½á¹û£¬Îª´ËÎÒÌṩÁËÒ»¸öC½Ó¿ÚµÄ¿Í»§¶ËAPI¡£
µ«Èç¹ûÒª×öµ½¸üºÃµÄͨÓÃÐÔ£¬±ØÐëÕÕ¹ËITÊÀ½çÊýÁ¿×î¶àµÄÁ½ÀàÈË£ºjava³ÌÐòÔ±ºÍc#³ÌÐòÔ±¡£c#ÎÒµÄͬÊ·â×°ÁËado.netÇý¶¯¡£Õ⼸ÌìÎÒʵÏÖÁËjdbcµÄÇý¶¯£¬±¾ÎļǼʵÏÖ¹ý³ÌµÄһЩÐĵá£
±¾È˽ÏΪÉó¤µÄÊÇC/C++£¬¶ÔjavaµÄ?àÂÓ﷨ʵÔÚ²»Ì«¸Ðð£¬Ç°Õó×ÓÓÃjavaд¹ýÒ»¸ö¹æÄ£²»´óµÄandroid³ÌÐò£¬²Å¸ÒÌôսдһ¸öjdbcÇý¶¯µÄÈÎÎñ¡£
ÎҵĿª·¢»·¾³ÊDZȽÏСÖÚµÄmac os x£¬ÕýºÃ¿¼ÑéÒ»ÏÂjavaËùνµÄ¿çƽ̨¡£
µÚÒ»²½£¬ÏȽ«C½Ó¿ÚµÄ¿Í»§¶ËAPI·â×°³ÉÒ»¸öjavaÀࣺLxjDbApi.java
package com.lxjdb.jdbc;
public class LxjDbApi {
public LxjDbApi(){
System.loadLibrary("LxjDbJdbcApi");
}
public native long Open(String host, int port, String user, String pwd);
public native void Close(long conn);
public native int Exec(long conn, String sql, String[] dbInfo); // Ö´ÐÐÒ»¸ösqlÓï¾ä
public native int Rows(long conn); // ×ÜÐÐÊý
public native int Cols(long conn); // ×ÜÁÐÊý
// µÃµ½ÁÐÐÅÏ¢
public native int GetColInfoByIndex(long conn, int col, String[] retName, int[] lenTypePos);
public native int GetColInfoByName(long conn, String name, int[] lenTypePos);
public native int Next(long conn); // µ½ÏÂÒ»Ìõ¼Ç¼£¬³É¹¦·µ»Ø1£¬µ½¼Ç¼¼¯½áÊø£¬ÔòΪ0£¬´íÎ󷵻ظºÊý
public native int GotoRec(long conn, int recNo); // ¼Ç¼ºÅ´Ó1¿ªÊ¼
// È¡×Ö¶ÎÖµ£º1.×ÜÊÇ·µ»Ø×Ö·û´®½á¹û£¬2.×Ö·û´®±äÁ¿ÒªÔ¤ÏÈ·ÖÅäÖÁÉÙ2048´óСµÄ³¤¶È
public native int LxjDbGetValByName(long conn, String fieldName, String[] retVal);
// ÁбàºÅ´Ó0¿ªÊ¼
public native int GetValByIndex(long conn, int col, String[] retVal);
}
È»ºóÓÃjavahÉú³É
cÓïÑÔµÄÍ·ÎļþÀ´±àÒëjni£¬½«cÎļþ´æ·ÅÔÚjniĿ¼Ï£¬ÔÚÖÕ¶ËÏÂʹÓÃÃüÁîÐС£
javah -classpath bin -d jni com.lxjdb.jdbc.LxjDbApi
ÏÂÃæÊÇcpp´úÂ룬Êǵ÷ÓÃÎÒÃǵÄcÓïÑÔapi£º
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "com_lxjdb_jdbc_LxjDbApi.h"
/* Header for class com_lxjdb_jdbc_LxjDbApi */
#include "LxjDbApi.h"
/*
* Class: com_lxjdb_jdbc_LxjDbApi
* Method: Open
* Signature: (Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/Long;
*/
JNIEXPORT jlong JNICALL Java_com_lxjdb_jdbc_LxjDbApi_Open
(JNIEnv * env, jobject obj, jstring host, jint port, jstring user, jstring pwd)
{
LxjDbInit();
const char* pHost = env->GetStringUTFChars(host, 0);
const char* pUser = env->GetStringUTFChars(user, 0);
const char* pPwd = env->GetStringUTFChars(pwd, 0);
void* conn = LxjDbOpen(pHost, port, "", pUser, pPwd);
env->ReleaseStringUTFChars(host, pHost);
env->ReleaseStringUTFChars(pwd, pPwd);
env->ReleaseStringUTFChars(user, pUser);
return((jlong)conn);
}
/*
* Class: com_lxjdb_jdbc_LxjDbApi
* Method: Close
* Signature: (Ljava/lang/Long;)Ljava/lang/Long;
*/
JNIEXPORT jint JNICALL Java_com_lxjdb_jdbc_LxjDbApi_Close
(JNIEnv * env, jobject obj, jlong conn)
{
void* pConn = (void*)conn;
int ret = LxjDbClose(pConn);
return(ret);
}
/*
* Class: com_lxjdb_jdbc_LxjDbApi
* Method: Exec
* Signature: (JLjava/lang/String;[Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL Java_com_lxjdb_jdbc_LxjDbApi_Exec
(JNIEnv * env, jobject obj, jlong conn, jstring sql, jobjectArray dbInfo)
{
void* pConn = (void*)conn;
const char* pSql = env->GetStringUTFChars(sql, 0);
int retCode = 0;
char pDbInfo[512];
pDbInfo[0] = '\0';
int ret = LxjDbExec(pConn, pSql, retCode, pDbInfo);
env->ReleaseStringUTFChars(sql, pSql);
env->SetObjectArrayElement(dbInfo, 0, env->NewStringUTF(pDbInfo));
return(ret>0 ? retCode : ret);
}
/*
* Class: com_lxjdb_jdbc_LxjDbApi
* Method: Rows
* Signature: (J)I
*/
JNIEXPORT jint