/***********************************************************************/ /* JDBConn.h : header file for the JDBC connection classes. */ /***********************************************************************/ //nclude /* Windows include file */ //nclude /* Message crackers */ /***********************************************************************/ /* Included C-definition files required by the interface. */ /***********************************************************************/ #include "block.h" /***********************************************************************/ /* JDBC interface. */ /***********************************************************************/ #include /***********************************************************************/ /* Constants and defines. */ /***********************************************************************/ // Miscellaneous sizing info #define MAX_NUM_OF_MSG 10 // Max number of error messages //efine MAX_CURRENCY 30 // Max size of Currency($) string #define MAX_TNAME_LEN 32 // Max size of table names //efine MAX_FNAME_LEN 256 // Max size of field names //efine MAX_STRING_INFO 256 // Max size of string from SQLGetInfo //efine MAX_DNAME_LEN 256 // Max size of Recordset names //efine MAX_CONNECT_LEN 512 // Max size of Connect string //efine MAX_CURSOR_NAME 18 // Max size of a cursor name #define DEFAULT_FIELD_TYPE 0 // TYPE_NULL #if !defined(__WIN__) typedef unsigned char *PUCHAR; #endif // !__WIN__ enum JCATINFO { CAT_TAB = 1, // JDBC Tables CAT_COL = 2, // JDBC Columns CAT_KEY = 3, // JDBC PrimaryKeys //CAT_STAT = 4, // SQLStatistics //CAT_SPC = 5 // SQLSpecialColumns }; /***********************************************************************/ /* This structure is used to control the catalog functions. */ /***********************************************************************/ typedef struct tagJCATPARM { JCATINFO Id; // Id to indicate function PQRYRES Qrp; // Result set pointer char *DB; // Database (Schema) char *Tab; // Table name or pattern char *Pat; // Table type or column pattern } JCATPARM; typedef jint(JNICALL *CRTJVM) (JavaVM **, void **, void *); typedef jint(JNICALL *GETJVM) (JavaVM **, jsize, jsize *); #if defined(_DEBUG) typedef jint(JNICALL *GETDEF) (void *); #endif // _DEBUG // JDBC connection to a data source class TDBJDBC; class JDBCCOL; class JDBConn; class TDBXJDC; /***********************************************************************/ /* JDBConn class. */ /***********************************************************************/ class JDBConn : public BLOCK { friend class TDBJDBC; friend class TDBXJDC; //friend PQRYRES GetColumnInfo(PGLOBAL, char*&, char *, int, PVBLK&); private: JDBConn(); // Standard (unused) constructor public: JDBConn(PGLOBAL g, TDBJDBC *tdbp); int Open(PJPARM sop); int Rewind(char *sql); void Close(void); PQRYRES AllocateResult(PGLOBAL g); // Attributes public: char *GetQuoteChar(void) { return m_IDQuoteChar; } // Database successfully opened? bool IsOpen(void) { return m_Opened; } //PSZ GetStringInfo(ushort infotype); int GetMaxValue(int infotype); //PSZ GetConnect(void) { return m_Connect; } public: // Operations //void SetLoginTimeout(DWORD sec) {m_LoginTimeout = sec;} //void SetQueryTimeout(DWORD sec) {m_QueryTimeout = sec;} //void SetUserName(PSZ user) {m_User = user;} //void SetUserPwd(PSZ pwd) {m_Pwd = pwd;} int GetResultSize(char *sql, JDBCCOL *colp); int ExecuteQuery(char *sql); int ExecuteUpdate(char *sql); int Fetch(int pos = 0); bool PrepareSQL(char *sql); int ExecuteSQL(void); bool SetParam(JDBCCOL *colp); int ExecSQLcommand(char *sql); void SetColumnValue(int rank, PSZ name, PVAL val); int GetCatInfo(JCATPARM *cap); //bool GetDataSources(PQRYRES qrp); bool GetDrivers(PQRYRES qrp); PQRYRES GetMetaData(PGLOBAL g, char *src); public: // Set static variables static void SetJVM(void) { LibJvm = NULL; CreateJavaVM = NULL; GetCreatedJavaVMs = NULL; #if defined(_DEBUG) GetDefaultJavaVMInitArgs = NULL; #endif // _DEBUG } // end of SetJVM static void ResetJVM(void); static bool GetJVM(PGLOBAL g); // Implementation public: //virtual ~JDBConn(); // JDBC operations protected: bool gmID(PGLOBAL g, jmethodID& mid, const char *name, const char *sig); bool Check(jint rc = 0); //void ThrowDJX(int rc, PSZ msg/*, HSTMT hstmt = SQL_NULL_HSTMT*/); //void ThrowDJX(PSZ msg); //void Free(void); protected: // Members #if defined(__WIN__) static HANDLE LibJvm; // Handle to the jvm DLL #else // !__WIN__ static void *LibJvm; // Handle for the jvm shared library #endif // !__WIN__ static CRTJVM CreateJavaVM; static GETJVM GetCreatedJavaVMs; #if defined(_DEBUG) static GETDEF GetDefaultJavaVMInitArgs; #endif // _DEBUG PGLOBAL m_G; TDBJDBC *m_Tdb; JavaVM *jvm; // Pointer to the JVM (Java Virtual Machine) JNIEnv *env; // Pointer to native interface jclass jdi; // Pointer to the java wrapper class jobject job; // The java wrapper class object jmethodID xqid; // The ExecuteQuery method ID jmethodID xuid; // The ExecuteUpdate method ID jmethodID xid; // The Execute method ID jmethodID grs; // The GetResult method ID jmethodID readid; // The ReadNext method ID jmethodID fetchid; // The Fetch method ID jmethodID typid; // The ColumnType method ID jmethodID prepid; // The CreatePrepStmt method ID jmethodID xpid; // The ExecutePrep method ID jmethodID pcid; // The ClosePrepStmt method ID jmethodID errid; // The GetErrmsg method ID jmethodID objfldid; // The ObjectField method ID jmethodID chrfldid; // The StringField method ID jmethodID intfldid; // The IntField method ID jmethodID dblfldid; // The DoubleField method ID jmethodID fltfldid; // The FloatField method ID jmethodID datfldid; // The DateField method ID jmethodID timfldid; // The TimeField method ID jmethodID tspfldid; // The TimestampField method ID jmethodID bigfldid; // The BigintField method ID //DWORD m_LoginTimeout; //DWORD m_QueryTimeout; //DWORD m_UpdateOptions; char *Msg; char *m_Wrap; char m_IDQuoteChar[2]; //PSZ m_Driver; //PSZ m_Url; //PSZ m_User; PSZ m_Pwd; int m_Ncol; int m_Aff; int m_Rows; int m_Fetch; int m_RowsetSize; jboolean m_Updatable; jboolean m_Transact; jboolean m_Scrollable; bool m_Opened; bool m_Full; }; // end of JDBConn class definition