多语言 JDBC SQL 发送

多语言 JDBC SQL 发送

记录各个语言使用 JDBC 发送 SQL 的代码片段。

Python

import jaydebeapi

# pip install jaydebeapi

# JDBC驱动类名
driver = 'com.mysql.jdbc.Driver'
# 数据库连接URL
url = 'jdbc:mysql://hostname:port/databasename?characterEncoding=UTF-8&serverTimezone=UTC'
# 数据库用户名
user = 'username'
# 数据库密码
password = 'password'
# JDBC驱动JAR文件路径
jarFile = 'path_to_your_jdbc_driver.jar'

# 使用jaydebeapi.connect函数建立数据库连接
conn = jaydebeapi.connect(jclassname=driver, url=url, driver_args=[user, password], jars=jarFile)

# 创建游标并执行SQL语句
curs = conn.cursor()
curs.execute('SELECT * FROM your_table')

# 获取查询结果
results = curs.fetchall()

# 打印结果
for row in results:
    print(row)

# 关闭游标和连接
curs.close()
conn.close()

Java

// javac -cp ".:./mysql-connector-java-8.0.27.jar:." JdbcDemo.java
// java -cp ".:./mysql-connector-java-8.0.27.jar:." JdbcDemo
// windows 中用 ; 分隔路径, linux 中用 : 分隔路径

import java.sql.*;

public class JdbcDemo {
    public static void main(String[] args) {
        String url = "jdbc:mysql://hostname:port/databasename";
        String user = "username";
        String password = "password";

        try {
            // 加载驱动类
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 建立连接
            Connection conn = DriverManager.getConnection(url, user, password);

            // 创建Statement对象
            Statement stmt = conn.createStatement();

            // 执行查询
            ResultSet rs = stmt.executeQuery("SELECT * FROM your_table");

            // 处理查询结果
            while (rs.next()) {
                // 获取并使用数据
                int id = rs.getInt("id");
                String data = rs.getString("data");
                // ...
            }

            // 清理环境
            rs.close();
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

C++

# 将上面的 JdbcDemo 使用 javah 编译
javah -jni -o JdbcDemo.h JdbcDemo
#include <jni.h>
#include "JdbcDemo.h"

int main() {

    JavaVM *jvm;
    JNIEnv *env;
    JavaVMInitArgs vm_args;
    JavaVMOption options[1];
    options[0].optionString = "-Djava.class.path=."; // 指定类路径
    options[0].extraInfo = NULL;
    vm_args.version = JNI_VERSION_1_6;
    vm_args.nOptions = 1;
    vm_args.options = options;
    vm_args.ignoreUnrecognized = JNI_TRUE;
    jint res = JNI_CreateJavaVM(&jvm, (void **)&env, &vm_args);
    if (res < 0) {
        std::cerr << "Failed to create JVM" << std::endl;
        return 1;
    }

    // 获取JdbcDemo类
    jclass cls = env->FindClass("JdbcDemo");
    if (cls == NULL) {
        std::cerr << "Class not found" << std::endl;
        return 1;
    }

    // 调用main方法
    env->CallStaticVoidMethod(cls, env->GetStaticMethodID(cls, "main", "()V"));

    // 销毁JVM
    jvm->DestroyJavaVM();

    return 0;
}


posted on 2024-05-07 20:37  LambdaQ  阅读(4)  评论(0编辑  收藏  举报