JDBC和ODBC的区别和使用

203 阅读2分钟

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