jdbc 是个啥原理啊 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
jchnxu
V2EX    程序员

jdbc 是个啥原理啊

  •  1
     
  •   jchnxu 2022-09-22 07:14:47 +08:00 7955 次点击
    这是一个创建于 1120 天前的主题,其中的信息可能已经有所发展或是发生改变。
    发现没有 jdbc 的 node.js 实现。我寻思这玩意不就是 tcp 连接么,为啥没人写一个
    第 1 条附言    2022-09-22 12:51:50 +08:00
    原描述没太说清,我的意思,db connection 这一类的规范,其他语言为啥没有。找各种 driver 找起来就好麻烦
    第 2 条附言    2022-09-22 21:28:51 +08:00
    环境限制条件是 electron + python cli ,能不用 jvm 最好
    48 条回复    2024-08-31 14:20:04 +08:00
    hefish
        1
    hefish  
       2022-09-22 07:21:57 +08:00   1
    node 来实现 jdbc ? 我感觉用 php 实现更快一些。
    debuggerx
        2
    debuggerx  
       2022-09-22 07:24:49 +08:00 via Android   33
    你猜 jdbc 的那个 j 是啥意思?
    KamenReborn
        3
    KamenReborn  
       2022-09-22 07:33:47 +08:00 via Android
    Java Database Connectivity
    liangkang1436
        4
    liangkang1436  
       2022-09-22 07:34:26 +08:00 via Android
    @debuggerx 哈哈哈哈
    panlatent
        5
    panlatent  
       2022-09-22 07:34:31 +08:00 via iPhone   2
    jdbc 抽调 node 的 d 再抽调 tcp 的 c 就只剩个 ..
    mikeguan
        6
    mikeguan  
       2022-09-22 07:38:32 +08:00 via Android   1
    大概率可以用 odbc
    Tink
        7
    Tink  
    PRO
       2022-09-22 07:50:46 +08:00 via Android
    j
    chendy
        8
    chendy  
       2022-09-22 08:03:20 +08:00   3
    @debuggerx 是 Javascript (确信
    neptuno
        9
    neptuno  
       2022-09-22 08:20:57 +08:00 via iPhone   1
    @debuggerx #2 Javascript(逃
    fredcc
        10
    fredcc  
       2022-09-22 08:27:09 +08:00 via Android
    Javascript DataBase Connectivity 没问题
    bthulu
        11
    bthulu  
       2022-09-22 08:31:00 +08:00   2
    jdbc 的 j 难道不是 Javascript 么?
    cweijan
        12
    cweijan  
       2022-09-22 08:38:57 +08:00
    jdbc 只是一套规范, 各种驱动实现的只是接口, 内部就是 tcp 连接
    jchnxu
        13
    jchnxu  
    OP
       2022-09-22 08:42:27 +08:00
    @mikeguan #6 感谢老哥,不过感觉 odbc 这玩意是不是特别好用,我跑半天跑不起来
    table cellpadding="0" cellspacing="0" border="0" width="100%"> wangtian2020
        14
    wangtian2020  
       2022-09-22 08:42:51 +08:00   1
    duanxianze
        15
    duanxianze  
       2022-09-22 08:54:30 +08:00   1
    xswl 加油吧新人
    kenvix
        16
    kenvix  
       2022-09-22 09:06:18 +08:00
    你用 ODBC 罢,真的
    jchnxu
        17
    jchnxu  
    OP
       2022-09-22 09:19:12 +08:00
    @wangtian2020 #14 我主要是想接 hive
    jchnxu
        18
    jchnxu  
    OP
       2022-09-22 09:21:54 +08:00
    @cweijan #12 是的。我就在想这玩意应该有人来出规范才对
    nba2k9
        19
    nba2k9  
       2022-09-22 09:31:09 +08:00
    万物皆可 Javascript 重写
    Bromine0x23
        20
    Bromine0x23  
       2022-09-22 11:33:57 +08:00
    说来其他语言有类似 JDBC 的规范吗
    dqzcwxb
        21
    dqzcwxb  
       2022-09-22 11:36:59 +08:00
    java database connectivity,简称 jdbc
    L0L
        22
    L0L  
       2022-09-22 11:43:32 +08:00
    你可能不需要 jdbc
    lookStupiToForce
        23
    lookStupiToForce  
       2022-09-22 11:52:35 +08:00   1
    xswl 萌新很可爱
    jchnxu
        24
    jchnxu  
    OP
       2022-09-22 12:50:07 +08:00
    @L0L #22 我也是这么想的,我只是想连个 hive 而已

    - hive-driver 卡在 open-session ,包也不维护了
    - npm jdbc 卡在 jni_md.h ,也许是 $JAVA_HOME 的问题,也想到用户的电脑上可能这种问题更多
    - npm odbc 也没有跑起来

    我现在的想法是自己打一个 fat jar 然后命令行调用吧
    yinft
        25
    yinft  
       2022-09-22 15:01:11 +08:00
    @debuggerx 卧槽 哈哈哈
    debuggerx
        26
    debuggerx  
       2022-09-22 15:19:48 +08:00
    “找各种 driver 找起来就好麻烦”???
    https://cwiki.apache.org/confluence/display/Hive/HiveClient
    frisktale
        27
    frisktale  
       2022-09-22 15:22:21 +08:00
    别的我不知道,c#和 golang 都是有统一的 db connection 规范的
    sshang
        28
    sshang  
       2022-09-22 15:26:38 +08:00
    @jchnxu @Bromine0x23

    JDBC 全称叫 Java Database Connectivity ,是 Java 语言提供了一套用来访问数据库的 API 规范,具体来讲,可以理解为 java.sql 这个包。

    类似的,Python 也有 Python Database API Specification ( https://peps.python.org/pep-0249/)。
    qping
        29
    qping  
       2022-09-22 15:30:44 +08:00
    @jchnxu #17 hive 的 jdbc 驱动像一坨屎一样 依赖一堆的包
    ipwx
        30
    ipwx  
       2022-09-22 15:36:59 +08:00
    原因是 JDBC 其实是比“某个数据库的 Driver”更高一层的抽象,试图规范这个语言下的所有 DB Driver 接口。这需要强大的语言掌控力。Java 是个最初由 Sun 推动的商业型语言,所以 JDBC 出现了。

    如果某个语言需要,就需要有人牵头搞一个。但是很遗憾,JS/Python 这种社区型语言,你退出某个 Javascript XXX 别人也不买账。你看 npm 上各种包。。。

    ====

    其实 ORM 比 JDBC 封装层次更高,并不是要求各大 DB 遵守,而是反过来去适配各大 DB 的 driver 。ORM 才是更优解。
    Aloento
        31
    Aloento  
       2022-09-22 15:39:19 +08:00
    entity framework 表示很 j
    dcsuibian
        32
    dcsuibian  
       2022-09-22 15:59:15 +08:00
    是的,我之前也遇到过这个问题,没找到统一的上层接口。
    这样看来 Java 还真适合工程应用。
    ttwxdly
        33
    ttwxdly  
       2022-09-22 16:04:08 +08:00
    1
    hush3
        34
    hush3  
       2022-09-22 16:42:23 +08:00
    @debuggerx 你太煤~ baby
    Mrzhs
        35
    Mrzhs  
       2022-09-22 16:49:26 +08:00
    @< href="/member/hush3">hush3 小黑子无处不在
    onice
        36
    onice  
       2022-09-22 17:34:08 +08:00
    jdbc ,开头的 j 是指的 java 。要想通用点,就用 odbc 吧。
    zoharSoul
        37
    zoharSoul  
       2022-09-22 18:42:43 +08:00
    @debuggerx #2 可能是 js, /狗头
    jchnxu
        38
    jchnxu  
    OP
       2022-09-22 21:10:49 +08:00
    @debuggerx #26 感谢老哥,我还真没想到要去找 hive 官网,因为同时在找其他的 db
    jchnxu
        39
    jchnxu  
    OP
       2022-09-22 21:14:47 +08:00
    @ipwx #30 有道理。

    我的原意是,实现本身应该不复杂,就怕有什么骚操作所以其他语言没有类似的东西。

    我想其实连接 db 无非就是 host, port, credentials, db 这些参数。然后弄一个连接池,如果是分布式的实现相应的协议。所以想当然以为所有语言都该有了。
    jchnxu
        40
    jchnxu  
    OP
       2022-09-22 21:15:20 +08:00
    fat jar 打出来了,python 的方案也跑通了,再次感谢大家!
    jchnxu
        41
    jchnxu  
    OP
       2022-09-22 21:16:51 +08:00
    @qping #29 是不是那个 thrift 协议的问题
    jchnxu
        42
    jchnxu  
    OP
       2022-09-22 21:23:14 +08:00
    @dcsuibian #32 后来咋解决的
    qping
        43
    qping  
       2022-09-22 21:42:08 +08:00
    @jchnxu #41 没有细看 它会引起各种 jar 包冲突 不过你应该不存在这个问题
    ys2016814
        44
    ys2016814  
       2022-09-22 22:00:47 +08:00
    SPI 服务提供发现机制
    cnbattle
        45
    cnbattle  
       2022-09-22 23:31:35 +08:00 via Android
    每个语言特性,语法,生态,各不相同,所以一个语言设计实现的库包,较难在别的语言有好的实现或应用
    ipwx
        46
    ipwx  
       2022-09-23 10:54:44 +08:00
    @jchnxu JDBC 其实是个很奇怪的抽象层。一方面它试图填补各个 DB driver 的差异性。但是 SQL 语言本身的差异性它又无法填补,就导致这玩意儿好像有点用,但其实毛用也没有,换个 DB 还得重写程序。毕竟所有语言的 DB driver 一般都能找得到完善的 connection pool 。

    所以真要跨数据库写代码还是得上 ORM 。比如 Python SQLAlchemy 。
    whileFalse
        47
    whileFalse  
       2022-09-23 13:13:27 +08:00 via iPhone
    jdbc 就是 java 搞面向对象搞魔怔了的结果,除了 jdbc 还有 servlet 。
    chaoschick
        48
    chaoschick  
       2024-08-31 14:20:04 +08:00
    Node.js 中有多个库可以用于连接和操作数据库,最常用的包括以下几个:

    1. **MySQL**:
    - 使用 `mysql` 或 `mysql2` 库来连接 MySQL 数据库。
    - 示例:
    ```Javascript
    const mysql = require('mysql2');

    const cOnnection= mysql.createConnection({
    host: 'localhost',
    user: 'yourUsername',
    password: 'yourPassword',
    database: 'yourDatabase'
    });

    connection.connect(err => {
    if (err) {
    console.error('Error connecting to the database:', err);
    return;
    }
    console.log('Connected to the MySQL database.');
    });

    connection.query('SELECT * FROM yourTable', (err, results) => {
    if (err) {
    console.error('Error executing query:', err);
    return;
    }
    console.log('Query results:', results);
    });

    connection.end();
    ```

    2. **PostgreSQL**:
    - 使用 `pg` 库来连接 PostgreSQL 数据库。
    - 示例:
    ```Javascript
    const { Client } = require('pg');

    const client = new Client({
    host: 'localhost',
    user: 'yourUsername',
    password: 'yourPassword',
    database: 'yourDatabase'
    });

    client.connect(err => {
    if (err) {
    console.error('Error connecting to the database:', err);
    return;
    }
    console.log('Connected to the PostgreSQL database.');
    });

    client.query('SELECT * FROM yourTable', (err, res) => {
    if (err) {
    console.error('Error executing query:', err);
    return;
    }
    console.log('Query results:', res.rows);
    });

    client.end();
    ```

    3. **SQLite**:
    - 使用 `sqlite3` 库来连接 SQLite 数据库。
    - 示例:
    ```Javascript
    const sqlite3 = require('sqlite3').verbose();

    const db = new sqlite3.Database('./yourDatabase.db');

    db.serialize(() => {
    db.each('SELECT * FROM yourTable', (err, row) => {
    if (err) {
    console.error('Error executing query:', err);
    return;
    }
    console.log('Row:', row);
    });
    });

    db.close();
    ```
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5898 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 02:22 PVG 10:22 LAX 19:22 JFK 22:22
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86