V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jchnxu
V2EX  ›  程序员

jdbc 是个啥原理啊

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

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

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

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

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

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

    ====

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

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

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

    所以真要跨数据库写代码还是得上 ORM 。比如 Python SQLAlchemy 。
    whileFalse
        47
    whileFalse  
       12 天前 via iPhone
    jdbc 就是 java 搞面向对象搞魔怔了的结果,除了 jdbc 还有 servlet 。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   873 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 20:46 · PVG 04:46 · LAX 13:46 · JFK 16:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.