首先要导入JDBC的jar包;
接下来,代码:
Class.forName(xxx.xx.xx)返回的是一个类 Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类, 也就是说JVM会执行该类的静态代码段。

JDBC连接数据库

• 创建一个以JDBC连接数据库的程序,包含7个步骤:

1、加载JDBC驱动程序:

在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),

这通过java.lang.Class类的静态方法forName(String  className)实现。

例如:

try{  

  //加载MySql的驱动类   

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

  //说明:关于Class类的forName方法

  //通过该方法加载className中的类到内存空间中

  /* Class类的forName方法,如下:

  @CallerSensitive
  public static Class<?> forName(String className) throws ClassNotFoundException {
    Class<?> caller = Reflection.getCallerClass();//获得调用此方法的对象

    比如传入的是"com.mysql.jdbc.Driver",

    jvm就会到驱动jar包的 com.mysql.jdbc 中,利用调用者的类加载器,调用该Driver类

    (com.mysql.jdbc 中的Driver类继承于java.sql包中的Driver接口,

    该类的头:public class com.mysql.jdbc.Driver extends com.mysql.jdbc.NonRegisteringDriver implements java.sql.Driver {}

    可以看出该类继承了java.sql.Driver接口,因此可以在程序中使用工厂模式和单例模式结合来调用)

    return forName0(className, true, ClassLoader.getClassLoader(caller), caller);//如果加载出现异常,则返回异常

    //forName0(className, true, ClassLoader.getClassLoader(caller), caller);

    // ClassLoader.getClassLoader(caller)使用调用此方法的类的类加载器调用driver接口对应的类
  }

  */

}catch(ClassNotFoundException e){   

  System.out.println("找不到驱动程序类 ,加载驱动失败!");   

  e.printStackTrace() ; 

}

  

成功加载后,会将Driver类的实例注册到DriverManager类中。DriverManager.getConnection(url , username , password ) 操作,后续会讲到

2、提供JDBC连接的URL

  连接URL定义了连接数据库时的协议、子协议、数据源标识。

  书写格式:协议:子协议:数据源标识

  协议:在JDBC中总是以jdbc开始

  子协议:是桥连接的驱动程序或是数据库管理系统名称。

  数据源标识:标记找到数据库来源的地址与连接端口。

  例如:(MySql的连接URL):jdbc:mysql://localhost:3306/test

  全路径为  jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=gbk ;

  useUnicode=true:表示是否使用Unicode字符集。如果characterEncoding设置为  gb2312或GBK,本参数必须设置为true 。

  characterEncoding=gbk:字符编码方式。

3、创建数据库的连接

•要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,

该对象就代表一个数据库的连接。

•使用DriverManager的getConnectin(String url , String username ,

String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和密码来获得。

例如:

     //连接MySql数据库,用户名和密码都是root   

     String url = "jdbc:mysql://localhost:3306/test" ;    

     String username = "root" ;   

     String password = "root" ;   

try{   

    Connection con =  DriverManager.getConnection(url , username , password ) ;   

}catch(SQLException se){   

    System.out.println("数据库连接失败!");   

    se.printStackTrace() ;   

}

  

4、创建一个Statement

•要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下 3 种类型:

1、执行静态SQL语句。通常通过Statement实例实现。

2、执行动态SQL语句。通常通过PreparedStatement实例实现。

3、执行数据库存储过程。通常通过CallableStatement实例实现。

具体的实现方式:

  Statement stmt = con.createStatement() ;

  PreparedStatement pstmt = con.prepareStatement(sql) ;

  CallableStatement cstmt =  con.prepareCall("{CALL demoSp(? , ?)}") ;

5、执行SQL语句

  Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate 和 execute

1、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句 ,返回一个结果集(ResultSet)对象。

2、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或 DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等

3、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的 语句。

具体实现的代码:

  ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;

  int rows = stmt.executeUpdate("INSERT INTO ...") ;

  boolean flag = stmt.execute(String sql) ;

6、处理结果

两种情况:

1、执行更新返回的是本次操作影响到的记录数。

2、执行查询返回的结果是一个ResultSet对象。

• ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些行中数据的访问。

• 使用结果集(ResultSet)对象的访问方法获取数据:

  

while(rs.next()){   

    String name = rs.getString("name") ;   

    String pass = rs.getString(1) ; // 此方法比较高效   

  }

  

(列是从左到右编号的,并且从列1开始)

7、关闭JDBC对象

操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:

1、关闭记录集

2、关闭声明

3、关闭连接对象

if(rs != null){   // 关闭记录集   

  try{   

            rs.close() ;   

  }catch(SQLException e){   

    e.printStackTrace() ;   

  }   

}   

if(stmt != null){   // 关闭声明   

  try{   

    stmt.close() ;   

  }catch(SQLException e){   

    e.printStackTrace() ;   

  }   

}   

if(conn != null){  // 关闭连接对象   

  try{   

    conn.close() ;   

  }catch(SQLException e){   

    e.printStackTrace() ;   

  }   

}

  

jdbc数据库连接过程及驱动加载与设计模式详解的更多相关文章

  1. 转: javascript模块加载框架seajs详解

    javascript模块加载框架seajs详解 SeaJS是一个遵循commonJS规范的javascript模块加载框架,可以实现javascript的模块化开发和模块化加载(模块可按需加载或全部加 ...

  2. seo网页加速技术,预加载 DNS Prefetching 详解

    seo网页加速技术,预加载 DNS Prefetching 详解 DNS Prefetching 是什么 : DNS 是什么-- Domain Name System,域名系统,作为域名和IP地址相互 ...

  3. 转:web.xml 中的listener、 filter、servlet 加载顺序及其详解

    在项目中总会遇到一些关于加载的优先级问题,刚刚就遇到了一个问题,由于项目中使用了quartz任务调度,quartz在web.xml中是使用listener进行监听的,使得在tomcat启动的时候能马上 ...

  4. web.xml 中的listener、 filter、servlet 加载顺序及其详解

    在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...

  5. web.xml 中的listener、 filter、servlet 加载顺序及其详解(转)

    在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...

  6. javascript模块加载框架seajs详解

    SeaJS是一个遵循commonJS规范的javascript模块加载框架,可以实现javascript的模块化开发和模块化加载(模块可按需加载或全部加载).SeaJS可以和jQuery完美集成,使用 ...

  7. Webpack探索【16】--- 懒加载构建原理详解(模块如何被组建&如何加载)&源码解读

    本文主要说明Webpack懒加载构建和加载的原理,对构建后的源码进行分析. 一 说明 本文以一个简单的示例,通过对构建好的bundle.js源码进行分析,说明Webpack懒加载构建原理. 本文使用的 ...

  8. 微信小程序上拉加载:onReachBottom详解+设置触发距离

    前端经常遇到上拉加载更多的需求,一般还涉及到翻页.小程序里已经给了下拉到底的触发方法onReachBottom(),这里记录下怎样使用这个方法实现下拉加载更多,有需要的直接看代码,有详细注释: 1.首 ...

  9. 构建自己的PHP框架之自动加载类中详解spl_autoload_register()函数

    在了解这个函数之前先来看另一个函数:__autoload. 一.__autoload 这是一个自动加载函数,在PHP5中,当我们实例化一个未定义的类时,就会触发此函数.看下面例子: printit.c ...

随机推荐

  1. ucos实时操作系统学习笔记——任务间通信(互斥锁)

    想讲一下ucos任务间通信中的mutex,感觉其设计挺巧妙,同sem一样使用的是event机制实现的,代码不每一行都分析,因为讲的没邵贝贝老师清楚,主要讲一下mutex的内核是如何实现的.可以理解互斥 ...

  2. 玩转Windows服务系列——给Windows服务添加COM接口

    当我们运行一个Windows服务的时候,一般情况下,我们会选择以非窗口或者非控制台的方式运行,这样,它就只是一个后台程序,没有界面供我们进行交互. 那么当我们想与Windows服务进行实时交互的时候, ...

  3. Azure File Storage 基本用法 -- Azure Storage 之 File

    Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在<Azure Blob Storage 基 ...

  4. Entity Framework 6 Recipes 2nd Edition(9-5)译->删除一个断开的实体

    9-5. 删除一个断开的实体 问题 我们要把一个把WCF上取回的对象做上删除的标志. 解决方案 假设我们有如Figure 9-5所示实体的支付与票据的模型. Figure 9-5. 一个支付与票据的模 ...

  5. Enterprise Solution 开源项目资源汇总 Visual Studio Online 源代码托管 企业管理软件开发框架

    Enterprise Solution 是一套管理软件开发框架,在这个框架基础上开发出一套企业资源计划系统Enterprise Edition. 现将Enterprise Solution开发过程中遇 ...

  6. Cesium原理篇:Material

    Shader 首先,在本文开始前,我们先普及一下材质的概念,这里推荐材质,普及材质的内容都是截取自该网站,我觉得他写的已经够好了.在开始普及概念前,推荐一首我此刻想到的歌<光---陈粒>. ...

  7. 使用session页面控制登录入口及购物车效果的实现

          由于 Session 是以文本文件形式存储在服务器端的,所以不怕客户端修改 Session 内容.实际上在服务器端的 Session 文件,PHP 自动修改 Session 文件的权限,只 ...

  8. 微服务和SOA服务

    微服务和SOA都被认为是基于服务的架构,这意味着这两种架构模式都非常强调将“服务”作为其架构中的首要组件,用于实现各种功能(包括业务层面和非业务层面).微服务和SOA是两种差异很大的架构模式,但是他们 ...

  9. angularjs和ajax的结合使用 (一)

    好久没写文了.这是一篇关于easyui配合ajax使用 的文章, 顺带介绍angularjs的使用 以及让你感受到angularjs的威力.网上对于ajax 的文也是多如牛毛 .我就不直接 从那种原生 ...

  10. 成吨提高开发效率:Intellij Shortcuts精简子集与思维模式

    在线精简cheatsheet备查表:intellij.linesh.twGithub项目:intellij-mac-frequent-keymap Intellij的快捷键多而繁杂,从官方推荐的key ...