1.DriverManager用来建立和数据库的链接以及管理JDBC驱动程序

driverManager的常用方法

方法 描述
registerDriver(Driver driver) 在DerverManager中注册JDBC驱动程序
getConnection(String url,String user,String pwd) 建立和数据库的连接,返回Connection对象
setLoginTime(int seconds) 设定等待数据库连接的最长时间
setLogWriter(PrintWriter out) 设定输出数据库日志的PrintWriter对象

2.Connection代表Java程序和数据库的连接

Connection的常用方法

方法 描述
getMetaData()  获取一个 DatabaseMetaData 对象,该对象包含关于此 Connection 对象所连接的数据库的元数据。例如当前数据库连接的用户名,数据库的最大连接数,以及数据库的版本等。
createStatement() 创建并返回Statement对象
prepareStatement(String sql) 创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。

3.Statement用来执行静态的SQL语句。例如:对于insert,update和delete语句,可以调用executeUpdate(String sql)的方法;对于select语句,可以调用executeQuery(String sql方法),这个方法返回一个ResultSet对象。

例如:

String sql="select id,name,title,price from books where name='tom' and price=40";

ResultSet rs=stmt.executeQuery(sql);//stmt为Statement对象

4.PreparedStatement用来执行动态的SQL语句。

例如:

String sql="select id,name,title,price from books where name=? and price=?";

在这种情况,用PreparedStatement比Statement更方便,因为PreparedStatement允许sql语句中包含参数。

PreparedStatement具体使用如下:

(1)生产PreparedStatement对象。例如:SQL语句中name的值和price的值都用"?"来替代,他们表示两个可以被替换的参数:

  String sql="select id,name,title,price from books where name=? and price=?";

  PrepareStatement prepStmt=conn.prepareStatement(sql);

(2)调用PreparedStatement的setxxx方法,给参数赋值:

  prepStmt.setString(1,"tome");

  prepStmt.setString(2,40);

(3)执行SQL语句:

  ResultSet=prepStmt.executeQuery();

5.ResultSet表示select语句查询得到的记录集合。

(1)ResultSet的记录行号从1开始,一个Statement对象在同一时刻只能打开一个ResultSet对象。调用ResultSet的next()方法可以使游标定位到下一条记录。调用ResultSet的getxxx()方法可以取得某个字段的值。

(2)ResultSet既可以通过字段的序号来指定字段,也可以通过字段的名字来指定字段。

例如:

String sql="select id,name,title,price from books where name='tome' and price=40";

ResultSet rs=stmt.executeQuery(sql);

如果要访问id字段,可以用

rs.getString(1); 或者rs.getString("id");

如果要取出ResultSet中所有记录,可以采用下面的循环语句:

while(rs.next()){

  String col1=rs.getString(1);

  String col2=rs.getString(2);

  String col3=ts.getString(3);

  float col4=rs.getFloat(4);

}

6.总结介绍JDBC访问数据库的步骤

  (1)装载并注册数据库JDBC驱动程序,(其中JDBC-ODBC Driver是在JDK中自带的,默认已经注册,所以不需要再注册)

    //装载JdbcOdbcDriver.class(只需要装载,不需要注册)

    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

    //装载并注册SQLServerDriver

    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

    java.sql.DriverManager.registerDriver(new com.microsoft.jdbc.sqlserver.SQLServerDriver());

    //装载并注册OracleDriver

    Class.forName("oracle.jdbc.driver.OracleDriver");

    java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

    //装载并注册MySQLDriver

    Class.forName("com.mysql.jdbc.Driver");

    java.sql.DriverManager.registerDriver(new com.mysql.jdbc.Driver());//这个注册不上必要的

    说明:

      对于mysql的驱动程序类com.mysql.jdbc.Driver,在JVM加载这个类时,会执行以下静态代码

      static{

        try{

          java.sql.DriverManager.registerDriver(new Driver());

        }catch(){

          throw new RuntimeException("..");

        }

        ....

      }

      所以程序中只要通过Class.forName方法加载mysql driver类即可,可以不需要再注册。

  (2)建立与数据库的连接

    Connection conn=java.sql.DriverManager.getConnection(url,user,password);

    mysql: url="jdbc:mysql://localhost:3306/dbName";

  (3)创建Statement对象,准备调用SQL语句

    Statement stmt=conn.createStatement();

  (4)调用SQL语句:

    String sql="select id,name,title,price from books where name='tom' and price=40";

    ResultSet rs=stmt.executeQuery(sql);

  (5)访问ResultSet中的记录集    

  (6)一次关闭 ResultSet,Statement和Connection对象:

    rs.close();

    stmt.close();

    conn.close();

7.事务处理

  (1)在Connection类中提供了3个控制事物的方法:

    setAutoCommit(boolean autoCommit);设置是否自动提交事物

    commit();提交事物

    rollback();回滚事物

  (2)在DJBC API中,默认情况下为自动提交事物。可以通过调用setAutoCommit(false)来禁止提交事物。

    try{

      con.java.sql.DriverManager.getConnection(dbUrl,user,dbPwd);

      //禁止自动提交,设置回滚点

      con.setAutoCommit(false);

      stmt=con.createStatement();

      //数据库更新操作1

      stmt.executeUpdate("update account set money=money-1000 where name='zhangsan'");

      //数据库更新操作2

      stmt.executeUpdate("update account set money=money+1000 where name='lisi'");

      //事物提交

      con.commit();

    }catch(Exception e){

      e.printStackTrace();

      //操作不成功事物回滚

      con.rollback();

    }finally{

      stmt.close();

      con.close();

    }

JDBC介绍的更多相关文章

  1. JDBC(1):JDBC介绍

    一,JDBC介绍 SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范(接口),称之为JDBC.这套接口由数据库厂商去实现,这样,开发人员只需要学习jdbc接口,并通过jdbc加 ...

  2. 关于Java(JDBC介绍)

    JDBC API 允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的. JDBC 简单功能 连接数据源,如数据库 传给数据库查询和更新指令 获取并处理数据库返回结果(对查询等的响应) 示例代码 ...

  3. JAVA记录-JDBC介绍

    JDBC(Java DataBase Connection),java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成 ...

  4. (一)mybatis之JDBC介绍

    前言:为什么在学mybatis之前要先了解JDBC呢?因为mybatis是以ORM模型为中心思想的框架,而所有的ORM模型都是基于JDBC进行封装的,不同的ORM模型对JDBC封装的强度是不一样的. ...

  5. 【Spring JDBC】spring jdbc 介绍(一)

    Spring JDBC模块是Spring框架的基础模块之一.在Spring JDBC模块中,所有的类可以被分到四个单独的包: core 核心包:它包含了JDBC的核心功能.此包内有很多重要的类,包括: ...

  6. JDBC介绍和Mybatis运行原理及事务处理

    本博客内容非自创,转载自以下三位,侵删: https://juejin.im/post/5ab7bd11f265da23906bfbc5 https://my.oschina.net/fifadxj/ ...

  7. day17-jdbc 2.jdbc介绍

    SQL是一种非过程性语言,只能写一条嘛,你写多条不行嘛.每个数据库都有自己的存储过程.你可以做编程,你可以写多条SQL语句把它放到一起.这就是存储过程.然后用的时候一调它就执行这个逻辑结构了.因为多条 ...

  8. 成都传智播客JDBC视频及讲师介绍

    成都传智播客java讲师,也许,你跟他很熟,你或者听过他的课,或者跟他争论过什么,又或者你们在一起共事,再者你们只是偶尔擦肩而过.在小编的印象中郭老师完全没有架子,和他相处会让你觉得不是面对一个老师, ...

  9. JDBC相关概念介绍

    一.JDBC相关概念介绍 1.1.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡 ...

随机推荐

  1. 微信小程序开发日记——高仿知乎日报(上)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...

  2. ie6 ie7 ie8 ie9兼容问题终极解决方案

    放下包袱,解决低版本兼容问题   这是一个老生常谈的问题,自然解决这个问题的方案也比较多,下面整理了一些解决方法: 1.强制使用高版本渲染模式. 强制使用Edge模式来解析网页代码 <meta ...

  3. 统计iOS项目的总代码行数的方法

    打开终端, 用cd命令 定位到工程所在的目录,然后调用以下命名即可把每个源代码文件行数及总数统计出来: find . "(" -name "*.m" -or - ...

  4. Android 开发一定要看的15个实战项目

    前言: 虽说网上有太多的Android课程,但是大多都是视频,有Android在线开发环境的几乎没有,但是对于学习Android的人来说拥有在线的Android开发环境是非常好的,可以随时动手操作学习 ...

  5. Linux基础介绍【第八篇】

    Linux网络基础 网线 568A 568B 线序:橙白橙 绿白蓝 蓝白绿 棕白棕 交换机.路由器 交换机:DLINK.H3C.CISCO 交换机(Switch)是一种用于电信号转发的网络设备.它可以 ...

  6. linux系统内存爆满的解决办法!~

    1.首先用free工具检查一下内存的使用情况: 这个是我的linux时时数据 Mem: 4046824 763620 3283204 9004 10284 61560  -/+buffers/cach ...

  7. JS案例之2——cycle元素轮播

    元素轮播效果是页面中经常会使用的一种效果.这个例子实现了通过元素的隐藏和显示来表现轮播效果.效果比较简单. 效果图如下: 源代码如下: <!DOCTYPE html> <html&g ...

  8. 谁偷了我的热更新?Mono,JIT,iOS

    前言 由于匹夫本人是做游戏开发工作的,所以平时也会加一些玩家的群.而一些困扰玩家的问题,同样也困扰着我们这些手机游戏开发者.这不最近匹夫看自己加的一些群,常常会有人问为啥这个游戏一更新就要重新下载,而 ...

  9. Linux上运行NET

    今天尝试了下Ubuntu上运行NET程序,按照 https://github.com/aspnet/Home 的指引,一步一步来: 1.安装DNVM(原名KVM) Linux控制台下输入 curl - ...

  10. 带进度条的文件批量上传插件uploadify

    有时项目中需要一个文件批量上传功能时,个人认为uploadify是快速简便的解决方案. 先上效果图: 一. 下载uploadify 从官网下载uploadify的Flash版本(Flash版本免费,另 ...