Java与数据库的连接JDBC简介数据库的应用目前已经非常普遍,在应用程序的开发过程中,经常会涉及到访问数据库。Java语言为访问数据库提供了方便的技术。Java使用JDBC(JavaDatabaseConnectivity)技术进行数据库的访问。Java应用程序通过JDBCAPI和JDBC驱动程序管理器进行通信。JDBC的诞生从ODBC到JDBCODBC(OpenDataBaseConnectivity),是一种用来在关系数据库以及非关系数据库管理系统中存取数据,用C语言实现的标准应用程序接口。其主要结构:应用程序接口、驱动程序管理器、数据库驱动程序和数据源。JDBC的诞生以前由于没有一个Java语言的数据库API,编程人员不得不在Java程序中加入C语言的ODBC函数调用,从而使Java的很多优秀特性无法充分发挥ODBC具有不易使用,非面向对象等缺点为了充分发挥java语言的特性,迎合数据库开发的需求,sun开发了一套java语言的数据库应用程序开发接口和类,即JDBC。它在Java程序中实现数据库操作功能并简化操作过程。JDBC为数据库及其工具的开发人员提供了一个标准的API,使他们能够用纯JavaAPI编写数据库应用程序JDBC支持基本SQL语句,提供多样化的数据库连接方式,为各种不同的数据库提供统一的操作界面JDBC连接数据库的方法1.通过专用网络协议创建的驱动程序与数据库直接通信。直接使用数据库厂商提供的、用专用网络协议创建的驱动程序各大厂商都为数据库提供了这种JDBC驱动,这种方式最简单实用。应用程序JDBCAPI驱动程序数据源2.通过JDBC-ODBC桥与ODBC数据库通信Sun公司发行了一个用于访问ODBC数据源的驱动程序,称为JDBC-ODBC桥接器。该桥接器用jdbcodbc.class和一个用于访问ODBC驱动程序的本地库来实现的。对于Windows平台,该本地库是一个DLL动态链接库JDBCODBC.DLL其优点是使JDBC目前有能力访问几乎所有的数据库。应用程序数据源JDBCAPIJDBC-ODBCODBCAPIODBC层3.通过部分专用的驱动程序与数据库通信将JDBC数据库调用直接翻译为厂商专用的API,执行更有效,更快捷。应用程序JDBCAPI驱动程序数据源专用APIJDBCAPIJDBCAPI所有的类和接口都集中在java.sql和javax.sql这两个包中驱动管理器连接语句结果集(1)登记并加载JDBC驱动程序(2)建立与SQL数据库的连接(3)传送一个SQL查询(4)获得结果JDBCAPI的使用方法注册数据库的驱动程序隐式加载作为初始化的一部分,DriverManager类会尝试加载在“jdbc.drivers”系统属性中引用的驱动程序类。这允许用户自定义由他们的应用程序使用的JDBCDriver。例如jdbc.drivers=foo.bah.Driver:wombat.sql.Driver:bad.taste.ourDriverpublicstaticvoidregisterDriver(Driverdriver)throwsSQLException向DriverManager注册给定驱动程序一旦DriverManager类被初始化,将不再检查jdbc.drivers属性表需要持久的预设环境publicinterfaceDriver每个驱动程序类必须实现的接口JavaSQL框架允许多个数据库驱动程序每个驱动程序都应该提供一个实现Driver接口的类DriverManager会试着加载尽可能多的它可以找到的驱动程序,然后,对于任何给定连接请求,它会让每个驱动程序依次试着连接到目标URLDriverManager.registerDriver(newcom.microsoft.jdbc.sqlserver.SQLServerDriver());DriverManagerDriverManager类是JDBC的管理层,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。publicstaticDrivergetDriver(Stringurl)throwsSQLException试图查找能理解给定URL的驱动程序。publicstaticEnumerationDrivergetDrivers()检索带有当前调用方可以访问的所有当前已加载JDBC驱动程序的EnumerationpublicstaticvoidregisterDriver(Driverdriver)throwsSQLException向DriverManager注册给定驱动程序。在加载驱动程序时由驱动程序自动调用显式加载publicstaticClass?forName(StringclassName)throwsClassNotFoundExceptionjava.lang.ClassT使用与当前applet或应用程序相同的类加载器显式加载驱动程序Class.forName(“com.mysql.jdbc.Driver”);Class.forName(“acme.db.Driver”);如果将acme.db.Driver编写为加载时创建实例,并调用以该实例为参数的DriverManager.registerDriver,则它在DriverManager的驱动程序列表中,并可用于创建连接将驱动程序添加到Java.lang.System的属性jdbc.drivers中是一个由DriverManager类加载的驱动程序类名的列表,由冒号分隔jdbc.drivers=foo.bah.Driver:wombat.sql.Driver:bad.test.ourDriver;初始化DriverManager类时,它搜索系统属性jdbc.drivers,如果用户已输入了一个或多个驱动程序,则DriverManager类将试图加载它们。一旦DriverManager类被初始化,将不再检查jdbc.drivers属性表建立数据库连接publicstaticConnectiongetConnection(Stringurl)throwsSQLException试图建立到给定数据库URL的连接。DriverManager试图从已注册的驱动程序集中选择一个适当的驱动程序。假定构造数据库连接时不需要用户名、口令或其他数据库属性DriverManager将检查每个驱动程序,轮流在每个驱动程序上调用方法Driver.connect,查看它是否可以建立连接。DriverManager将使用它所找到的第一个可以成功连接到给定URL的驱动程序publicstaticConnectiongetConnection(Stringurl,Propertiesinfo)throwsSQLExceptioninfo包含连接数据库所需的所有属性项;通常至少应该包括user和password属性publicstaticConnectiongetConnection(Stringurl,Stringuser,Stringpassword)throwsSQLException指定了连接的用户名和密码Connectioncon=DriverManager.getConnection(“jdbc:mysql://localhost/UpdateDB”,”root”,””);Connection对象用于连接数据库和Java应用程序打开连接的方法Connectionconnect(Stringurl,Propertiesinfo)throwsSQLExceptionjava.sql.Driver试图创建一个到给定URL的数据库连接。DriverManager.getConnection提供应用程序与数据库的静态连接单一应用程序可以:拥有与单个数据库的一个或多个连接拥有与许多不同数据库的连接publicinterfaceConnectionJDBCURLJDBCURL提供了一种标识数据库的方法,可以使用相应的驱动程序识别该数据库,并与之建立连接。标准语法:jdbc:subprotocol:subnamejdbc协议:JDBCURL中的协议总是jdbc。子协议:驱动程序名或连接机制的名称。如果要用网络命名服务,则命名服务可以作为子协议。Jdbc:dcenaming:accounts驱动程序编程员可保留某个名称以将之用作JDBCURL的子协议名子名称:数据库的唯一标识符。如果数据库是通过Internet来访问的,则遵循命名规定//主机名:端口/数据库名例jdbc:odbc:goodsjdbc:dcenaming:accountsjdbc:dbnet://wombat:356/fredjdbc:mysql://localhost/UpdateDBodbc子协议odbc子协议用于指定ODBC风格的数据资源名称的URL,允许指定任意多的属性值。语法:Jdbc:odbc:数据资源名[;属性名=属性值]例:Jdbc:odbc:students;UID=tech;PWD=123Jdbc:odbc:wombat;CacheSize=20;ExtensionCase=LOWER如何与数据库建立连接?获取和安装JDBC以mysq为例:首先,下载mysql,并安装。打开命令行界面下载mysql-connector-java-5.1.5.tar.zip解压,并进行相应的配置。配置方法:进入…\Java\jre1.6.0_02\lib目录将mysql-connector-java-5.1.5-bin.jar拷贝到该目录下。配置classpath,追加%JAVA_HOME%\jre1.6.0_02\lib\mysql-connector-java-5.1.5-bin.jar;配置的目的是让java应用程序找到连接mysql的驱动如何向数据库递交查询和更新请求并获得返回的结果?Statement对象用于执行SQL语句并获取数据库的返回结果StatementcreateStatement()throwsSQLExceptionjava.sql.Connection常用方法booleanexecute(Stringsql)throwsSQLException执行给定的SQL语句,该语句可能返回多个结果。如果结果是ResultSet对象则返回true;结果是更新计数或执行的语句是DL命令则返回falseResultSetexecuteQuery(Stringsql)throwsSQLException执行给定的SQL语句,该语句返回单个ResultSet对象。publicinterfaceStatementintexecuteUpdate(Stringsql)throwsSQLException执行给定SQL语句,该语句可能为INSERT、UPDATE或DELETE语句,或者不返回任何内容的SQL语句(如SQLDDL语句)。返回INSERT、UPDATE或DELETE语句的行计数;或者0,表示不返回任何内容的SQL语句执行语句的所有方法都将关闭所调用的Statement对象的当前打开结果集(如果存在)。这意味着在重新执行Statement对象之前,需要完成对当前ResultSet对象的处理。使用方法execute()仅在语句能返回多个ResultSet对象、多个更新计数或ResultSet对象与更新计数的组合时使用ResultSetgetResultSet()throwsSQLException以ResultSet对象的形式检索当前结果。每个结果只应调用一次此方法。当SQL语句的结果不是结果集时,将返回null。booleangetMo