JDBC基础知识java.io包中包含了一系列对输入/输出进行操作的类File类用于访问文件系统,但只能访问文件(或目录)的属性,而不能进行读/写操作流是指一连串流动的数据信号,是以先进先出方式发送信息的通道,从流动方向上区分,流可以分为输入流和输出流,从格式上区分,可以分为字节流和字符流使用FileInputStream类和FileOutputStream类以字节流的方式读写文件回顾1回顾2FileReader类和FileWriter类配合BufferedReader类和BufferedWriter类可以以字符流的方式对文件进行读/写操作要从控制台接受输入,需要将System.in对象进行包装,使用如下语句:InputStreamReaderisr=newInputStreamReader(System.in);BufferedReaderbr=newBufferedReader(isr);DataInputStream类和DataOutputStream类在读/写数据时可以区分数据类型绝大部分的IO操作都有可能抛出IOException本章相关词汇单词说明driver驱动,驱动程序connection连接manager管理器statement语句prepared预备的,预编译的result结果create创建,创造execute执行query查询本章目标了解JDBC的概念和必要性了解JDBC驱动程序类型了解java.sql包理解JDBC程序的结构使用JDBC进行数据库编程数据库访问技术简介当今企业级应用程序采用了客户机/服务器(C/S)模式和(B/S);客户端机器需要与服务器进行通讯,要操作数据库中的数据,执行SQL(StructuredQueryLanguage结构化查询语言)语句以及检索查询结果;在Java中实现这些活动的技术称作JDBC。数据库编程示意图客户机/服务器应用程序数据库编程JDBC数据库执行SQL语句检索查询结果关于DBMSDBMS(DataBaseManagementSystem)是指数据库管理系统;目前DBMS的生产商众多,产品也不尽相同,如:–Oracle公司的Oracle系列;–Microsoft公司的Access系列和SQLServer系列;–Microsoft公司早期的FoxPro;–IBM公司的DB2;–Sybase公司的Sybase;–还有自由开源的MySQL等等。这就意味着编程语言要针对不同的DBMS开发不同版本的应用程序,这将是一项非常枯燥的工作。ODBCODBC(OpenDataBaseConnectivity)指开放式数据库连接,是由Microsoft公司提供的应用程序接口;它负责连接各种不同产商和类型的DBMS,然后为各种不同的编程语言提供查询、插入、修改和删除数据的功能;如同在各种不同的DBMS和各种不同的编程语言之间架设了一座通用的桥梁。JDBCJDBC(JavaDataBaseConnectivity)是由SunMicrosystem公司提供的API(ApplicationProgrammingInterface应用程序编程接口);它为Java应用程序提供了一系列的类,使其能够快速高效地访问数据库;这些功能是由一系列的类和对象来完成的,我们只需使用相关的对象,即可完成对数据库的操作。JDBC工作方式示意图Java程序JDBC驱动程序数据库SQL命令结果JDBC驱动程序类型使用JDBC连接数据库可以通过不同的驱动方式来实现,有4种驱动类型:–JDBC-ODBC桥驱动–纯Java驱动–本地API部分Java驱动–JDBC网络纯Java驱动不论采用哪种驱动方式,在程序中对数据库的操作方式基本相同,只是加载不同的驱动程序即可。java.sql包java.sql包也是Java内置的包,其中包含了一系列用于与数据库进行通信的类和接口;如果要使用到这些类和接口的话,则必须显式地声明如下语句:importjava.sql.*;java.sql包中的一些接口接口名称说明Connection连接对象,用于与数据库取得连接Driver用于创建连接(Connection)对象Statement语句对象,用于执行SQL语句,并将数据检索到结果集(ResultSet)对象中PreparedStatement预编译语句对象,用于执行预编译的SQL语句,执行效率比Statement高CallableStatement存储过程语句对象,用于调用执行存储过程ResultSet结果集对象,包含执行SQL语句后返回的数据的集合java.sql包中的一些类类名称说明SQLException数据库异常类,是其它JDBC异常类的根类,继承于java.lang.Exception,绝大部分对数据库进行操作的方法都有可能抛出该异常DriverManager驱动程序管理类,用于加载和卸载各种驱动程序,并建立与数据库的连接Date该类中包含有将SQL日期格式转换成Java日期格式的方法TimeStamp表示一个时间戳,能精确到纳秒JDBC程序访问数据库步骤开始导入java.sql包加载并注册驱动程序创建Connection对象创建Statement对象执行SQL语句关闭ResultSet对象关闭Statement对象关闭Connection对象使用ResultSet对象建立数据源(ODBC)附加相应产商提供的驱动结束JDBC-ODBC桥方式纯Java驱动方式步骤详解1:建立数据源这里以JDBC-ODBC桥驱动方式为例,逐步详细地讲解在Java程序中如何操作数据库,而对于其它驱动方式,只需更换驱动程序即可,其余不变;首先建立ODBC数据源:【开始】→【设置】→【控制面板】→【管理工具】→【数据源(ODBC)】新建数据源,名称可以任意,这里假设已经建立了一个名为myODBC的数据源,连接到SQLServer2005中的pubs数据库。步骤详解2:加载驱动程序使用Class类的forName方法,将驱动程序类加载到JVM(Java虚拟机)中;对于使用JDBC-ODBC桥的驱动方式,应该加载:sun.jdbc.odbc.JdbcOdbcDriver类如:Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);方法原型说明staticClassforName(StringclassName)throwsClassNotFoundException将由className指定完整名称的类加载到JVM中,如果加载失败,将抛出异常,必须捕捉步骤详解3:获得连接对象成功加载驱动后,必须使用DriverManager类的静态方法getConnection来获得连接对象;对于使用JDBC-ODBC桥的连接方式,连接字符串的一般形式是:“jdbc:odbc:数据源名称”,如:Connectioncon=DriverManager.getConnection(jdbc:odbc:myODBC,sa,);方法原型说明staticConnectiongetConnection(Stringurl,Stringuser,Stringpassword)throwsSQLException参数url是连接字符串,参数user是数据库用户名,参数password是登录口令,成功连接到数据库返回Connection对象,连接失败则抛出SQLException异常,必须捕捉步骤详解释4:创建语句对象一旦成功连接到数据库,获得Connection对象后,必须通过Connection对象的createStatement方法来创建语句对象,才可以执行SQL语句;如:Statementsta=con.createStatement();方法原型说明StatementcreateStatement()throwsSQLException成功创建返回Statement对象,否则抛出SQLException异常,必须捕捉步骤详解5:执行SQL语句使用语句对象来执行SQL语句,有两种情况:一种是执行DELETE、UPDATE和INSERT之类的数据库操作语句(DML),这样的语句没有数据结果返回,使用Statement对象的executeUpdate方法执行;如:sta.executeUpdate(INSERTINTOFriendsVALUES('田七','重庆',456712,'2003-2-25',7500));方法原型说明intexecuteUpdate(Stringsql)throwsSQLException参数sql是要执行的SQL语句,执行成功返回受影响的行数,执行失败则抛出SQLException异常,必须捕捉步骤详解5:执行SQL语句(续)另一种是执行SELECT这样的数据查询语句(DQL),这样的语句将从数据库中获得所需的数据,使用Statement对象的executeQuery方法执行;如:ResultSetrs=sta.executeQuery(SELECT*FROMFriend);方法原型说明ResultSetexecuteQuery(Stringsql)throwsSQLException参数sql是要执行的SQL语句,查询成功返回包含有结果数据的ResultSet对象,否则抛出SQLException异常,必须捕捉步骤详解6:关闭资源当对数据库的操作结束后,应当将所有已经被打开的资源关闭,否则将会造成资源泄漏;Connection对象、Statement对象和ResultSet对象都有执行关闭的close方法;函数原型都是:voidclose()throwsSQLException如:rs.close();//关闭ResultSet对象sta.close();//关闭Statement对象con.close();//关闭Connection对象有可能抛出SQLException异常,必须捕捉;请注意关闭的顺序,最后打开的资源最先关闭,最先打开的资源最后关闭。数据库操作示例importjava.sql.*;//导入java.sql包publicclassJDBCDemo{publicstaticvoidmain(String[]args){StringstrCon=jdbc:odbc:myODBC;//连接字符串StringstrUser=sa;//数据库用户名StringstrPwd=;//口令System.out.println(正在连接数据库...);try{//监控异常Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);//加载驱动程序Connectioncon;//获得连接对象con=DriverManager.getConnection(strCon,strUser,strPwd);System.out.println(成功连接到数据库。);Statementsta=con.createStatement();//创建语句对象//执行SQL语句StringstrSql=DELETEFROMFriendsWHERE[Name]='郑六';intcount=sta.executeUpdate(strSql);System.out.println(成功删除+count+行数据。);sta.close();con.close();//关闭所有已经打开的资源}catch(ClassNotFoundExceptioncnfe){cnfe.printStackTrace();}catch(SQLExceptionsqle){sqle.printStackTrace();}}}操作结果集使用Statement对象的executeQuery方法成功执行SELECT语句后,将返回一个包含有结果数据的ResultSet对象,要从该对象中获取数据,将使用到如下方法:方法原型说明booleannext()throwsSQLException将结果集游标往下移动一行,如果已经到达结果集最后,