JDBC和ODBC是两种用于数据库访问的API,它们在不同的环境中使用。
1. JDBC(Java Database Connectivity)
JDBC是一个用于Java应用程序访问各种数据库的API。它提供了一种标准的方式来执行SQL语句,并允许Java应用程序与不同类型的数据库进行交互。JDBC使用SQL作为数据操作语言,因此开发者可以使用相同的代码访问不同的数据库。
示例代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JDBCExample {
public static void main(String[] args) {
// 加载数据库驱动
try {
Class.forName("com.mysql.cj.jdbc.Driver");
// 建立连接
Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test_db", "root", "password");
// 创建Statement对象
Statement statement = connection.createStatement();
// 执行SQL查询
ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
// 处理结果集
while (resultSet.next()) {
System.out.println(resultSet.getString("username") + ", " + resultSet.getString("email"));
}
// 关闭资源
resultSet.close();
statement.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
2. ODBC(Open Database Connectivity)
ODBC是一个用于C/C++应用程序访问各种数据库的API。它提供了一种标准的方式来执行SQL语句,并允许C/C++应用程序与不同类型的数据库进行交互。ODBC使用SQL作为数据操作语言,因此开发者可以使用相同的代码访问不同的数据库。
示例代码:
#include <stdio.h>
#include <windows.h>
#include <odbc.h>
int main() {
SQLHDBC hdbc; // 数据库连接句柄
SQLHENV henv; // 环境句柄
SQLHSTMT hstmt; // 语句句柄
SQLRETURN ret;
// 初始化ODBC环境
ret = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);
if (ret != SQL_SUCCESS) {
printf("Error initializing ODBC environment: %d\n", ret);
return 1;
}
// 设置ODBC环境
ret = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
if (ret != SQL_SUCCESS) {
printf("Error setting ODBC environment attribute: %d\n", ret);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 1;
}
// 分配数据库连接句柄
ret = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
if (ret != SQL_SUCCESS) {
printf("Error allocating database connection: %d\n", ret);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 1;
}
// 连接到数据库
char connectString[] = "DRIVER={MySQL ODBC 8.0 ANSI Driver};SERVER=localhost;DATABASE=test_db;UID=root;PWD=password;";
ret = SQLConnect(hdbc, (SQLCHAR*)connectString, SQL_NTS, NULL, 0, NULL, 0);
if (ret != SQL_SUCCESS) {
printf("Error connecting to database: %d\n", ret);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 1;
}
// 分配语句句柄
ret = SQLAllocHandle