【ODBC】ODBC連線資料庫詳細說明
ODBC
一、ODBC簡介
開放資料庫互連(ODBC)是微軟提出的資料庫訪問介面標準。開放資料庫互連定義了訪問資料庫的API一個規範,這些API獨立於不同廠商的DBMS,也獨立於具體的程式語言。通過使用ODBC,應用程式能夠使用相同的原始碼和各種各樣的資料庫進行互動。這使得開發者不需要以特殊的資料庫管理系統DBMS為目標,或者瞭解不同支撐背景的資料庫的詳細細節,就能夠開發和釋出客戶/伺服器應用程式。下面是ODBC應用系統的體系結構。
二、ODBC控制代碼
應用程式執行後,為維護執行的狀態,ODBC 管理器和ODBC 驅動程式中必須保持足夠的控制資訊。應用程式要求ODBC 管理器和ODBC 驅動程式為ODBC
(1)環境控制代碼:整個ODBC上下文的根控制代碼。標識全程資料訪問控制資訊的記憶體結構,包括有效連線控制代碼以及當前活動連線控制代碼。ODBC將環境控制代碼定義為HENV型別的變數。應用程式使用單一的環境控制代碼,在連線到資料來源以前必須申請該控制代碼。
(2)連線控制代碼:管理有關資料庫會話的所有資訊。連線控制代碼標識每個特定的連線資訊的記憶體結構。ODBC將環境控制代碼定義為HDBC型別的變數。應用程式在連線資料來源之前申請連線控制代碼。每個連線控制代碼與環境控制代碼有關,環境控制代碼上可以有多個與其有關的連線控制代碼。
(3)語句控制代碼:ODBC語句包括應用訪問資料來源的SQL語句和語句相關的管理資訊,語句控制代碼標識每個語句管理資訊的記憶體結構。ODBC將語句控制代碼定義為HSTMT型別的變數。應用程式在提交SQL請求之前也必須申請語句控制代碼。每個語句控制代碼與一個連線控制代碼有關,每個連線控制代碼上可以有多個與其有關的語句控制代碼。
三、ODBC程式執行流程
Ø 分配環境控制代碼
基於ODBC3.X版本的應用統一使用SQLAllocHandle來分配控制代碼。呼叫時設計不同的控制代碼型別就可以獲得該型別的控制代碼。但在API內部實現上一般重新轉換為執行SQLAllocEnv,SQLAllocConnect
例如:ret = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &oraclehenv);
Ø 分配連線控制代碼
SQLAllocConnect:用來分配連線控制代碼。連線控制代碼提供對一些資訊的訪問,例如,在連線上的有效語句及識別符號控制代碼,以及當前是否開啟一些一個事務處理。呼叫SQLAllocConnect 函 數 獲 取 連 接 句 柄。例如:
ret = SQLAllocHandle(SQL_HANDLE_DBC, oraclehenv, &oraclehdbc);
Ø 建立資料來源
使用已分配的連線控制代碼來建立應用程式和資料來源/資料庫系統的連線,進行控制代碼和資料來源的繫結。繫結也由目標資料來源的ODBC驅動程式完成。
例 如:ret = SQLConnect(oraclehdbc,
"conn",SQL_NTS, //ODBC的DNS名稱
"scott",SQL_NTS, //使用者賬號
"123",SQL_NTS); //密碼
Ø 分配語句控制代碼
使用者對DBC資料來源的存取操作,都是通過SQL語句實現的。在這個過程中,應用程式 將通過連線向ODBC資料庫提交SQL語句,以完成使用者請求的操作。即通過執行SQLAllocHandle或SQLAllocStmt來分配語句控制代碼。呼叫SQLAllocStmt 函式獲取語句控制代碼。例如:
SQLstmt= "SELECT * FROM authors"
rc= SQLAllocStmt(hdbc, hstmt)
Ø 執行SQL語句
執行SQL語句。 執行SQL 語 句 的方法比較多, 最簡單明瞭的方法是呼叫SQLAllocStmt函式,例如:
SQLstmt= "SELECT * FROM authors"
rc= SQLExecDirect(hstmt, SQLstmt, Len(SQLstmt))
如果SQL語句被順利提交併正確執行,那麼就會產生一個結果集。檢索結果集的方法有很多,最簡單最直接的方法是呼叫SQLFetch 和SQLGetData 函 數。
SQLFetch函式的功能是將結果集的當前記錄指標移至下一個記錄;
SQLGetData函式的功能是提取結果集中當前記錄的某個欄位值。通常可以採用一個迴圈以提取結果集中所有記錄的所有欄位值,該迴圈重複執行SQLFetch和SQLGetData函式,直至SQLFetch函式返回SQL_NO_DATA_FOUND, 這表示已經到達結果集的末尾。
DimColVal As String * 225
ColVal= String(255, 0)
Ø 結束應用程式
在應用程式完成資料庫操作, 退出執行之前,必須釋放程式中使用的系統資源。這些系統資源包括:語句控制代碼、連線控制代碼和ODBC環境控制代碼。完成這個過程的如下:
呼叫SQLFreeStmt 函式釋放語句控制代碼及其相關的系統資源。例如:
rc= SQLFreeStmt(hstmt, SQL_DROP)
呼叫SQLDisconnect 函式關閉連線。 例 如:
rc= SQLDisconnect(hdbc)
呼叫SQLFreeConnect函式釋放連線控制代碼及其相關的系統資源。例如:
rc= SQLFreeConnect(hdbc)
呼叫SQLFreeEnv函式釋放環境控制代碼及其相關的系統資源,停止ODBC 操作。 例如:
rc= SQLFreeEnv(henv)
(7)錯 誤 處 理
所有DBCAPI函 數, 若在執行期間發生錯誤, 都將返回一個標準錯誤程式碼SQL_ERROR。
一般來講,在每次呼叫ODBC API 函 數 之 後, 都應該檢查該函式返回值,確定該函式是否成功地執行,再決定是否繼續後續過程。 而詳細的錯誤資訊,可以呼叫SQLError 函式獲得。SQLError 函式將返回下列資訊: 標準的ODBC錯誤狀態碼 ODBC 資料來源提供的內部錯誤編碼錯誤資訊串
四、開發環境的配置
1.建立Oracle ODBC資料來源
對於WIN 7系統來說,開啟控制面板,找到ODBC,具體位置如下圖所示,如果沒有找到,可以在右上角搜尋欄裡面輸入ODBC,就可以找到了。
對於WIN XP系統來說,開啟控制面板,找到管理工具,找到資料來源(ODBC),顯示ODBC資料來源管理器對話方塊。對話方塊如下圖所示。
2.設定和配置一個系統DSN,單擊“系統DSN標籤”,選擇“新增”。
3.找到需要配置的資料來源,單擊完成,彈出如下對話框,
4.輸入資料來源的名稱,一個簡單的描述,使用者名稱和網路連線名。點選確認。
五、學生表建立
1.首先建立stu表
createtable stu(
sno char(11) ,
sname varchar2(10),
sex char(2),
sage number,
sdepart varchar2(30)
);
六、資料型別
七、參考資料
資料庫系統概論 第四版 王珊 薩師煊 高等教育出版社
ODBC程式
開發工具vs2017<database.h>
#pragma once
#ifndef _DATABASE_H
#define _DATABASE_H
#include <sql.h>
#include<sqlext.h>
#include<sqltypes.h>
typedef struct {
SQLHENV oraclehenv; //環境控制代碼
SQLHDBC oraclehdbc; //連線控制代碼
SQLHSTMT oraclehsmt; //語句控制代碼
SQLRETURN ret; //結果集
}DATABASE;
DATABASE getConnection(); //獲取連線
void init(DATABASE *d); //初始化
void freeConnection(DATABASE d); //釋放連線資源
#endif // !_DATABASE_H
<student.h>
#pragma once
#include "DATABASE.h"
#ifndef _STUDENT_H
#define _STUDENT_H
#include <sql.h>
#include<sqlext.h>
#include<sqltypes.h>
#define sno_length 11
#define sname_length 10
#define sdepart_length 30
#define ssex_length 5
typedef struct {
SQLCHAR sno[sno_length], sname[sname_length], sdepart[sdepart_length], ssex[ssex_length];
SQLSMALLINT sage;
SQLINTEGER cbsno, cbsname, cbdepart, cbsage, cbsex;
}STUDENT;
SQLCHAR *get(SQLCHAR *p, char *s); //將char陣列轉換SQLCHAR型別
void processSQL(SQLCHAR *sql, SQLHSTMT oraclehsmt);
void display(DATABASE d);
void getStu(char *sno, SQLHSTMT oraclehsmt);
int insert(STUDENT, DATABASE);
void deleteStu(char *sno, DATABASE d);
SQLRETURN updateStu(STUDENT s, DATABASE d);
STUDENT inputStu();
void error(SQLRETURN err, int n);
#endif // !_DATABASE_H
<getConnection.cpp>
#include"DATABASE.h"
#include <sql.h>
#include<sqlext.h>
#include<sqltypes.h>
#include<stdlib.h>
#include <stdio.h>
#include<windows.h>
#include<string.h>
DATABASE getConnection() {
DATABASE d;
/****分配環境控制代碼********/
d.ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &d.oraclehenv);
d.ret = SQLSetEnvAttr(d.oraclehenv, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0);
/********建立連線*********/
d.ret = SQLAllocHandle(SQL_HANDLE_DBC, d.oraclehenv, &d.oraclehdbc);
d.ret = SQLConnect(d.oraclehdbc, (SQLCHAR *)"con", SQL_NTS, (SQLCHAR *)"HR", SQL_NTS, (SQLCHAR *)"oracle", SQL_NTS);
if (SQL_SUCCEEDED(d.ret))
{
puts("Connect Sucess!");
init(&d);
}
else
{
//連線失敗時返回錯誤值
puts("Conect Fail!");
}
return d;
}
void init(DATABASE *d)
{
/***初始化控制代碼*/
SQLEndTran(SQL_HANDLE_DBC, d->oraclehdbc, SQL_COMMIT); //提交事務
d->ret = SQLAllocHandle(SQL_HANDLE_STMT, d->oraclehdbc, &d->oraclehsmt); //初始化語句控制代碼
d->ret = SQLSetStmtAttr(d->oraclehsmt, SQL_ATTR_ROW_BIND_TYPE, (SQLPOINTER)SQL_BIND_BY_COLUMN, SQL_IS_INTEGER);//設定語句選項
}
void freeConnection(DATABASE d)
{
SQLEndTran(SQL_HANDLE_DBC, d.oraclehdbc, SQL_COMMIT); //提交事務
SQLFreeHandle(SQL_HANDLE_STMT, d.oraclehsmt);
SQLDisconnect(d.oraclehdbc);
SQLFreeHandle(SQL_HANDLE_DBC, d.oraclehdbc);
SQLFreeHandle(SQL_HANDLE_ENV, d.oraclehenv);
printf("釋放連線\n\n");
}
<operateStudent.cpp>
#include "DATABASE.h"
#include "STUDENT.h"
#include <sql.h>
#include<sqlext.h>
#include<sqltypes.h>
#include<stdlib.h>
#include <stdio.h>
void processSQL(SQLCHAR *sql, SQLHSTMT oraclehsmt)
{
STUDENT s;
int count = 1;
s.cbsno = SQL_NTS;
s.cbsname = SQL_NTS;
s.cbdepart = SQL_NTS;
s.cbsage = 0;
s.cbsex = SQL_NTS;
SQLRETURN ret = SQLExecDirect(oraclehsmt, sql, SQL_NTS);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
{
ret = SQLBindCol(oraclehsmt, 1, SQL_C_CHAR, s.sno, sno_length, &s.cbsno);
ret = SQLBindCol(oraclehsmt, 2, SQL_C_CHAR, s.sname, sname_length, &s.cbsname);
ret = SQLBindCol(oraclehsmt, 3, SQL_C_CHAR, s.ssex, ssex_length, &s.cbsex);
ret = SQLBindCol(oraclehsmt, 4, SQL_C_LONG, &s.sage, 0, &s.cbsage);
ret = SQLBindCol(oraclehsmt, 5, SQL_C_CHAR, s.sdepart, sdepart_length, &s.cbdepart);
}
/***處理結果**/
while ((ret = SQLFetch(oraclehsmt)) != SQL_NO_DATA_FOUND )
{
if (ret == SQL_ERROR)
{
printf("erro!\n");
}
else
{
printf("\t%-3d %s %s %s %4d %s\n", ++count, s.sno, s.sname, s.ssex, s.sage, s.sdepart);
}
}
}
void display(DATABASE d)
{
SQLCHAR *sql = (SQLCHAR *)"select * from stu";
processSQL(sql, d.oraclehsmt);
}
/*****插入********/
int insert(STUDENT s, DATABASE d)
{
char str[100] = "insert into stu values(";
char *age = (char *)malloc(sizeof(s.sage) + 1);
_itoa_s((int)s.sage, age, 10, 10);
strcat_s(str, sizeof(str), "'");
strcat_s(str, sizeof(str), (char *)s.sno);
strcat_s(str, sizeof(str), "',");
strcat_s(str, sizeof(str), "'");
strcat_s(str, sizeof(str), (char *)s.sname);
strcat_s(str, sizeof(str), "',");
strcat_s(str, sizeof(str), "'");
strcat_s(str, sizeof(str), (char*)s.ssex);
strcat_s(str, sizeof(str), "',");
strcat_s(str, sizeof(str), "'");
strcat_s(str, sizeof(str), age);
strcat_s(str, sizeof(str), "',");
strcat_s(str, sizeof(str), "'");
strcat_s(str, sizeof(str), (char *)s.sdepart);
strcat_s(str, sizeof(str), "')");
d.ret = SQLExecDirect(d.oraclehsmt, (SQLCHAR *)str, SQL_NTS);
error(d.ret, 77);
return 0;
}
SQLCHAR *get(SQLCHAR *p, char *s)
{
if ((s == NULL) || (p == NULL))
{
return NULL;
}
SQLCHAR *r = p;
while ((*r++ = *s++) != '\0');
return p;
}
void getStu(char *sno, SQLHSTMT oraclehsmt)
{
SQLCHAR *sql;
char str[100] = "select * from stu where sno = \'";
strcat_s(str, sizeof(str), sno);
strcat_s(str, sizeof(str), "'");
sql = (SQLCHAR *)str;
printf("getStu()函式\n");
getchar();
processSQL(sql, oraclehsmt);
}
void deleteStu(char *sno, DATABASE d)
{
SQLCHAR *sql = NULL;
char str[100] = "delete from stu where sno = \'";
strcat_s(str, sizeof(str), sno);
strcat_s(str, sizeof(str), "'");
sql = (SQLCHAR *)str;
d.ret = SQLExecDirect(d.oraclehsmt, sql, SQL_NTS);
error(d.ret, 114);
}
SQLRETURN updateStu(STUDENT s, DATABASE d)
{
SQLRETURN ret;
SQLCHAR *sql = NULL;
char str[100] = "update stu set ";
char *age = (char *)malloc(sizeof(s.sage) + 1);
_itoa_s((int)s.sage, age, 10, 10);
strcat_s(str, sizeof(str), "sname = \'");
strcat_s(str, sizeof(str), (char *)s.sname);
strcat_s(str, sizeof(str), "', ");
strcat_s(str, sizeof(str), "sex = \'");
strcat_s(str, sizeof(str), (char *)s.ssex);
strcat_s(str, sizeof(str), "', ");
strcat_s(str, sizeof(str), "sage = \'");
strcat_s(str, sizeof(str), age);
strcat_s(str, sizeof(str), "', ");
strcat_s(str, sizeof(str), "sdepart = \'");
strcat_s(str, sizeof(str), (char *)s.sdepart);
strcat_s(str, sizeof(str), "' ");
strcat_s(str, sizeof(str), "where sno = \'");
strcat_s(str, sizeof(str), (char *)s.sno);
strcat_s(str, sizeof(str), "'");
for (int i = 0; i < sizeof(str); i++)
{
printf("%c", str[i]);
}
printf("\n");
sql = (SQLCHAR *)str;
ret = SQLExecDirect(d.oraclehsmt, sql, SQL_NTS);
error(ret, 150);
return ret;
}
STUDENT inputStu()
{
STUDENT s;
char sno[sno_length], sname[sname_length], ssex[ssex_length], sdepart[sdepart_length], ssage[5];
int sage;
fflush(stdin);
printf("請輸入一個學號:");
gets_s(sno, sizeof(sno));
printf("\n請輸入一個姓名:");
gets_s(sname, sizeof(sname));
printf("\n請輸入一個性別:");
gets_s(ssex, sizeof(ssex));
printf("\n請輸入一個年齡:");
sage = atoi(gets_s(ssage));
printf("\n請輸入一個部門:");
gets_s(sdepart, sizeof(sdepart));
get(s.sno, sno);
get(s.sname, sname);
get(s.ssex, ssex);
s.sage = sage;
get(s.sdepart, sdepart);
return s;
}
void error(SQLRETURN err, int n) {
printf("%d ", n);
switch (err) {
case SQL_SUCCESS:puts("****SQL_SUCCESS*****"); break;
case SQL_SUCCESS_WITH_INFO:puts("SQL_SUCCESS_WITH_INFO"); break;
case SQL_ERROR:puts("SQL_ERROR"); break;
case SQL_INVALID_HANDLE:puts("SQL_INVALID_HANDLE"); break;
case SQL_NO_DATA_FOUND:puts("SQL_NO_DATA_FOUND"); break;
case SQL_NEED_DATA:puts("SQL_NEED_DATA"); break;
default:puts("err");
}
}
<Test.cpp>
#include "STUDENT.h"
#include "DATABASE.h"
#include <sql.h>
#include<sqlext.h>
#include<sqltypes.h>
#include<stdlib.h>
#include <stdio.h>
#include<windows.h>
#include<string.h>
char menu()
{
char choice;
printf("\t a.查詢4所有人的資訊\n");
printf("\t s.查詢個人資訊指定學號\n");
printf("\t i.插入\n");
printf("\t d.刪除\n");
printf("\t u.修改\n");
printf("\t q.退出\n");
printf("\n **********************\n \t請輸入你的選項:");
choice = getchar();
return choice;
}
void deal(char choice, DATABASE d)
{
getchar();
switch (choice)
{
init(&d);
case 'a':display(d);break;
case 's': {
char sno[10];
fflush(stdin);
printf("\n請輸入學號:");
gets_s(sno);
printf("sno = %s\n", sno);
getStu(sno, d.oraclehsmt); break;
}
case 'i': {
STUDENT s = inputStu();
insert(s, d);break;
}
case 'd': {
char sno[10];
printf("請輸入學號:");
gets_s(sno);
deleteStu(sno, d); break;
}
case 'u': {
STUDENT s = inputStu();
updateStu(s, d);break;
}
case 'q': freeConnection(d); exit(0);
default:printf("輸入錯誤,請從新輸入\n"); break;
}
printf("\n\t***************處理結束******************\n");
}
int main()
{
DATABASE database = getConnection();
do
{
char c;
c = menu();
deal(c,database);
getchar();
system("cls");
} while (true);
return 0;
}
<sql>
drop table stu;
create table stu(
sno char(10),
sname varchar2(10),
sex char(5),
sage number,
sdepart varchar2(30),
primary key(sno)
);
insert into stu values('201500730','張三','男',20,'計算機系' );
insert into stu values('201500731','李四','男',20,'計算機系' );
insert into stu values('201500732','王五','男',20,'計算機系' );
insert into stu values('201500733','趙六','男',20,'計算機系' );
commit;
select * from stu;
相關推薦
【ODBC】ODBC連線資料庫詳細說明
ODBC一、ODBC簡介開放資料庫互連(ODBC)是微軟提出的資料庫訪問介面標準。開放資料庫互連定義了訪問資料庫的API一個規範,這些API獨立於不同廠商的DBMS,也獨立於具體的程式語言。通過使用ODBC,應用程式能夠使用相同的原始碼和各種各樣的資料庫進行互動。這使得開發者
【PyQt502】PyQt5連線sqlite3資料庫
PyQt5連線sqlite3資料庫 使用QSqlDatabase.addDatabase()連線sqlite,使用setDatabaseName連線相應資料庫,通過QSqlQuery()執行sql命令。 如下,我們在mypet.db資料庫的user資料表插入一條
【PowerDesigner】PowerDesigner連線Oracle資料庫反向匯出資料庫表
1.oracle與plsql等資料倉庫配置預設配置完畢 2.新建PowerDesigner 3.建立物理模型 4.建立物理模型後,選單file會發生變化,開啟file選單下的DataBase 5.新建對應的oracle版本database 6.連線遠端or
【JAVA】 JAVA連線MySql資料庫
步驟:1.eclipse工具連線工具:eclipse MySQL5.6 MySQL連線驅動:mysql-connector-java-5.1.27.jar http://cdn.mysql.com//Downloads/Connector-J/mysql-conn
【J2EE】【2.JDBC】JDBC連線資料庫(MariaDB,Mysql)(繼續之前jee的登陸例子)
零,名詞解釋 JDBC JDBC(Java Data Base Connectivity,java資料庫連線)是一種用於執行SQL語句的Java API,可以為多種關係資料庫提供統一訪問,它由一組用Java語言編寫的類和介面組成。JDBC提供了一種基準,據此可以構建更高階的
【Delphi學習】ADOQuery連線資料庫的查詢、插入、刪除、修改
//查詢記錄procedure TForm1.Button1Click(Sender: TObject);beginADOQuery.Close;ADOQuery.SQL.Clear;ADOQuery.SQL.Add('select * from YourTABLE wher
【CAS】自定義資料庫連線配置
在上一篇部落格中,對CAS進行了整體的介紹,我們知道,CAS可分為Server和Client。本篇部落格開始介紹對CAS Sever進行的一些自定義配置。 【版本說明】:CAS Server 4.0 【下載地址】:https://github.com/aper
【ASP.NET】GridView連線資料庫,顯示資料
前端 1、新增控制元件GridView,新增資料來源,接著按步驟選擇自己的資料庫 新增資料來源顯示資料有倆種方法: (1)一種方法是在GridView控制元件上直接按步驟新增資料來源,及設計想要顯
【mysql】關於連線mysql資料庫時出現的時區錯誤time zone
錯誤來源:mysql執行報The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or represents more than one time zone的解決方法 sql 命令結尾要加分後!!
【轉】MFC OnIdle的詳細說明
理解 輸入 成員函數 並且 重載函數 未處理 target spa 命令 轉載出處:http://blog.csdn.net/tsing_best/article/details/25055707 CWinApp::OnIdlevirtual BOOL OnIdle( LO
【基礎】函數的聲明&返回值
com 高效率 ima tar 函數類 pac inf mage ase 以加減乘除運算為例 /* 函數的一般形式: 類型標示符 函數名(形式參數,形式參數...){ 函數體 } 類型表示符 為 該函數返回值的類型 不返回任何值的函數,返回值類型可以用voi
【socket】 超時連線
Java socket有兩種timeout : 建立連線timeout, 讀取資料timeout, 注意:如果想實現超時連線,需要採用一下方式進行socket連線  
【轉】postgresql 檢視資料庫叢集建立時間
原文連結:https://blog.csdn.net/ctypyb2002/article/details/80930809 使用 pg_controldata 檢視 Database system identifier $ /usr/pgsql-10/bin/pg_controldata
【mysql】mysql建立資料庫,基字符集 和 資料庫排序規則 的對比選擇
1.一般選擇utf8.下面介紹一下utf8與utfmb4的區別。 utf8mb4相容utf8,且比utf8能表示更多的字元。至於什麼時候用,看你的做什麼專案了,到https://www.cnblogs.com/sxdcgaq8080/p/9932786.html看unicode編碼區從1 ~ 126就屬於傳
【VUE】腳手架專案搭建詳細流程
整理了一下VUE大型專案腳手架的搭建,和一些自己的理解,不對的地方歡迎指出! 第一步:下載NODE 下載NODE,在這裡是為了用到node裡邊的npm,node下載成功後 第
【oracle】dual在資料庫不同啟動狀態其欄位數
dual在資料庫不同啟動狀態其欄位數 不經意間在《oracle DBA工作日記》看到dual這個系統表在資料庫nomount、mount、open狀態其欄位不一樣,驗證後記錄如下: --關閉資料庫 SQL> shutdown immediate Database cl
【PHP】全自動安裝資料庫,不需要手動匯入
author:咔咔 wechat:fangkangfk 用了很多的自動安裝資料庫的專案了,今天也來寫一個,只是一個簡單版本,可以按照這個思路來建立適合自己專案的安裝資料庫 原始碼地址問價: https://download.csdn.net/download/f
論文解讀|【Densenet】密集連線的卷積網路(附Pytorch程式碼講解)
@[t oc] 1 簡單介紹 論文題目:Densely Connected Convolutional Networks 發表機構:康奈爾大學,清華大學,Facebook AI 發表時間:2018年1月 論文程式碼:https://github.com/Wang
【10】【1】Android GreenDao資料庫講解
GreenDao資料庫講解 在Android開發過程中,資料的快取的開發可能會使用SQLite。然而在使用它時,我們往往需要做許多額外的工作,編寫Native SQL(原生的)語句與解析查詢結果等。所
【轉載】dbcp連線池的簡單使用
dbcp資料庫連線池的簡單使用---MySQL 有問題可以留言,如果你是初學者,下面的示例程式碼很不錯:) package mysqlTest; import org.apache.commons.dbcp2.BasicDataSource; import