mysql c++ Driver 类解析

备忘

  • Metadata:一般指元数据,又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能
  • MySQL Connector/C++遵循JDBC规范:Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法
    • 双层:Java Applet 或应用直接访问数据源
    • 三层: 侧架构特殊之处在于,引入中间层服务。
  • msql 提供的类:
    Driver
    Connection
      - setSchema方法设置相应的Schema
    Statement:Statement对象用于向MySQL服务器发送SQL语句。该对象可以通过调用Connection::createStatement方法获得
      - Statement::executeQuery用于执行一个Select语句,它返回ResultSet对象
      - Statement::executeUpdate方法主要用于执行INSERT, UPDATE, DELETE语(executeUpdate可以执行所有的SQL语句,如DDL语句,像创建数据表。),该方法返回受影响记录的条数。   如果你不清楚要执行的是像select这样的查询语句还是像update/insert/delete这样的操作语句,可以使用execute方法。对于查询语句,execute()返回True,然后通过getResultSet方法获取查询的结果;对于操作语句,它返回False,通过getUpdateCount方法获取受影响记录的数量。
    PreparedStatement
      - 准备多条指令集中提交
    ResultSet
      - 通过ResultSet访问查询的结果。
      - 只能按顺序一条一条获取,不能跳跃式获取)。(但)在同一行中,列值的访问却是随意的
      - 分类
        - 最基本的ResultSet:只能读去一次,不能够来回的滚动读取
        ```
        Statement st = conn.CreateStatement
        ResultSet rs = Statement.excuteQuery(sqlStr); 
        ```
        - 可滚动的ResultSet类型:
        ```
        Statement st = conn.createStatement(int resultSetType, int resultSetConcurrency)
        ResultSet rs = st.executeQuery(sqlStr)
        ResultSet.TYPE_FORWARD_ONLY只能向前滚动

  ResultSet.TYPE_SCROLL_INSENSITIVE和Result.TYPE_SCROLL_SENSITIVE这两个方法都能够实现任意的前后滚动,使用各种移动的ResultSet指针的方法。二者的区别在于前者对于修改不敏感,而后者对于修改敏感。
  resultSetConcurency是设置ResultSet对象能够修改的,取值如下:

ResultSet.CONCUR_READ_ONLY 设置为只读类型的参数。
ResultSet.CONCUR_UPDATABLE 设置为可修改类型的参数。
        ```
        - 可更新的ResultSet:可以完成对数据库中表的修改,但需要满足条件
          a、只引用了单个表。
          b、不含有join或者group by子句。
          c、那些列中要包含主关键字。
        ```
        //可修改结果集的创建
        Statement st = createstatement(Result.TYPE_SCROLL_INSENSITIVE,Result.CONCUR_UPDATABLE) 更新的方法是,把ResultSet的游标移动到你要更新的行,然后调用updateXXX(),这个方法XXX的含义和getXXX()是相同的。updateXXX()方法,有两个参数,第一个是要更新的列,可以是列名或者序号。第二个是要更新的数据,这个数据类型要和XXX相同。每完成对一行的update要调用updateRow()完成对数据库的写入,而且是在ResultSet的游标没有离开该修改行之前,否则修改将不会被提交。
        moveToInsertRow()是把ResultSet移动到插入行,这个插入行是表中特殊的一行,不需要指定具体那一行,只要调用这个方法系统会自动移动到那一行的。
moveToCurrentRow()这是把ResultSet移动到记忆中的某个行,通常当前行。如果没有使用insert操作,这个方法没有什么效果,如果使用了insert操作,这个方法用于返回到insert操作之前的那一行,离开插入行,当然也可以通过next(),previous()等方法离开插入行。

  要完成对数据库的插入,首先调用moveToInsertRow()移动到插入行,然后调用updateXXX的方法完成对,各列数据的更新,完成更新后和更新操作一样,要写到数据库,不过这里使用的是insertRow(),也要保证在该方法执行之前ResultSet没有离开插入列,否则插入不被执行,并且对插入行的更新将丢失。 
        ```
        - 可保持的ResultSet
          JDBC2.0和1.0提供的都是提交后ResultSet就会被关闭。不过在JDBC3.0中,我们可以设置ResultSet是否关闭。
          ```
          Statement st=createStatement(int resultsetscrollable,int resultsetupdateable,int resultsetSetHoldability)
ResultSet rs = st.excuteQuery(sqlStr); 

resultSetHoldability表示在结果集提交后结果集是否打开,取值有两个:
ResultSet.HOLD_CURSORS_OVER_COMMIT:表示修改提交时,不关闭数据库。
ResultSet.CLOSE_CURSORS_AT_COMMIT:表示修改提交时ResultSet关闭。 
          ```
        
        
        
    Savepoint
    DatabaseMetaData
    ResultSetMetaData
    ParameterMetaData
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值