《Java与数据库JDBCPPT课件》由会员分享,可在线阅读,更多相关《Java与数据库JDBCPPT课件(54页珍藏版)》请在金锄头文库上搜索。
1、第第13章章Java与数据库与数据库JDBC姓名姓名性别性别出生日期出生日期职务职务王红王红女女75/03/05工程师工程师张强张强男男70/06/15讲师讲师李刚李刚男男70/07/09工人工人王芳王芳女女65/10/09工程师工程师字段(列)字段(列)记录记录(行)(行)表文件表文件示例:示例:表文件与二维表对应表文件与二维表对应1、创建新表、创建新表student姓名姓名性别性别年龄年龄贾宝玉贾宝玉男男21林黛玉林黛玉女女19猪八戒猪八戒男男22白骨精白骨精女女202 2 2 2、追加新记录、追加新记录、追加新记录、追加新记录命令格式:命令格式:命令格式:命令格式: INSERTINTO
2、INSERTINTO表名表名表名表名(字段名字段名字段名字段名11,字段名,字段名,字段名,字段名2 2.).)VALUES(VALUES(表达式表达式表达式表达式11,表达式,表达式,表达式,表达式2 2)功能:功能:功能:功能: 在表尾追加一个新记录,并直接馈入数据在表尾追加一个新记录,并直接馈入数据在表尾追加一个新记录,并直接馈入数据在表尾追加一个新记录,并直接馈入数据。说明:说明:说明:说明:1.1.表不必是打开的,字段与表达式的类型必表不必是打开的,字段与表达式的类型必表不必是打开的,字段与表达式的类型必表不必是打开的,字段与表达式的类型必须相同。须相同。须相同。须相同。2.2.如果
3、字段名全部缺省,就必须按字段顺序如果字段名全部缺省,就必须按字段顺序如果字段名全部缺省,就必须按字段顺序如果字段名全部缺省,就必须按字段顺序填写填写填写填写 valuesvalues子句的所有表达式。子句的所有表达式。子句的所有表达式。子句的所有表达式。 例:为刚建立学生信息表例:为刚建立学生信息表student(student(姓名姓名, ,性别性别, ,年年龄龄) )填加数据填加数据insertintoinsertintostudentstudentvalues(values( 白雪公主白雪公主白雪公主白雪公主 , , 女女女女 ,16),16)insertintoinsertintost
4、udentstudent( (年龄年龄年龄年龄, ,姓名姓名姓名姓名)values(23,)values(23, 白马王子白马王子白马王子白马王子 ) )INSERTINTOINSERTINTO表名表名表名表名(字段名字段名字段名字段名11,字段名,字段名,字段名,字段名2 2.).)VALUES(VALUES(表达式表达式表达式表达式11,表达式,表达式,表达式,表达式2 2)3、用、用Select-SQL命令直接查询命令直接查询简化简化Select-SQL命令格式:命令格式:SELECTSELECT*/*/,.2.FROMFROM 表名表名表名表名 WHEREWHEREANDAND 例例例
5、例1 1:在学生表:在学生表:在学生表:在学生表studentstudent中,查找所有学生的姓名中,查找所有学生的姓名中,查找所有学生的姓名中,查找所有学生的姓名select select 姓名姓名 from from studentstudent 例:在学生表例:在学生表student(姓名(姓名,性别性别,年龄)中,查年龄)中,查找所有学生的记录找所有学生的记录select * from select * from studentstudent SELECT*/,.FROM表名表名WHEREANDWhereWhere子句指定查询条件:列名、比较运算符、列名于常数子句指定查询条件:列名、比
6、较运算符、列名于常数子句指定查询条件:列名、比较运算符、列名于常数子句指定查询条件:列名、比较运算符、列名于常数 常用的比较运算符:常用的比较运算符:常用的比较运算符:常用的比较运算符: =、=、=、!=!=、betweenandbetweenand、andand、oror、notnot例例例例2 2:在学生表:在学生表:在学生表:在学生表studentstudent中,查询所有年龄大于中,查询所有年龄大于中,查询所有年龄大于中,查询所有年龄大于2020的男的男的男的男同学的正确的同学的正确的同学的正确的同学的正确的SQLSQL语句是语句是语句是语句是Select*fromstudentstu
7、dentwhere年龄年龄20and性别性别=男男SELECTSELECT*/*/,.2.FROMFROM 表名表名表名表名 WHEREWHEREANDAND 例例例例3 3:在学生表:在学生表:在学生表:在学生表studentstudent中,查询年龄在中,查询年龄在中,查询年龄在中,查询年龄在2020至至至至2323岁岁岁岁之间的学生姓名和年龄正确的之间的学生姓名和年龄正确的之间的学生姓名和年龄正确的之间的学生姓名和年龄正确的SQLSQL语句是语句是语句是语句是Select姓名姓名,年龄年龄fromstudentstudentwhere年龄年龄=20and年龄年龄=23Select姓名姓名
8、,年龄年龄fromstudentstudentwhere年龄年龄between20and23SELECTSELECT*/*/,.2.FROMFROM 表名表名表名表名 WHEREWHEREANDAND 4 4 4 4、更新记录、更新记录、更新记录、更新记录命令格式:命令格式:命令格式:命令格式: UpdateUpdate表名表名表名表名 setset字段名字段名字段名字段名1=1=表达式表达式表达式表达式11,字段名,字段名,字段名,字段名2=2=表达式表达式表达式表达式22.)where.)where联结条件联结条件联结条件联结条件 例:例:例:例: updatestudentsetupda
9、testudentset年龄年龄年龄年龄=20where=20where姓名姓名姓名姓名= 贾宝玉贾宝玉贾宝玉贾宝玉 5、删除记录、删除记录命令格式:命令格式:delete*from表名表名where联结条件联结条件n n例:例:例:例:n n deletefromstudentwheredeletefromstudentwhere姓名姓名姓名姓名= 贾宝玉贾宝玉贾宝玉贾宝玉 JDBCn n20192019年夏,年夏,年夏,年夏,SunSun公司推出了公司推出了公司推出了公司推出了JavaJava数据库连接(数据库连接(数据库连接(数据库连接(JavaJavaDatabaseConnectiv
10、ityDatabaseConnectivity,JDBCJDBC)工具包的第一个版本。)工具包的第一个版本。)工具包的第一个版本。)工具包的第一个版本。 n n该工具包使得程序员可以使用结构化查询语言(该工具包使得程序员可以使用结构化查询语言(该工具包使得程序员可以使用结构化查询语言(该工具包使得程序员可以使用结构化查询语言(SQLSQL)连)连)连)连接到一个数据库,对数据库进行查询,或者对数据库进行接到一个数据库,对数据库进行查询,或者对数据库进行接到一个数据库,对数据库进行查询,或者对数据库进行接到一个数据库,对数据库进行查询,或者对数据库进行更新。更新。更新。更新。 n nJDBCJD
11、BC使得使得使得使得JavaJava不仅能够和远程数据通信,也能够在各种不仅能够和远程数据通信,也能够在各种不仅能够和远程数据通信,也能够在各种不仅能够和远程数据通信,也能够在各种不同得数据源之间通信,从而扩大了不同得数据源之间通信,从而扩大了不同得数据源之间通信,从而扩大了不同得数据源之间通信,从而扩大了JavaJava这种跨平台编程这种跨平台编程这种跨平台编程这种跨平台编程语言的应用范围,提高了它的应用价值。语言的应用范围,提高了它的应用价值。语言的应用范围,提高了它的应用价值。语言的应用范围,提高了它的应用价值。 n nJDBCJDBC是是是是JavaJava程序连接和存取数据库的应用程
12、序接口程序连接和存取数据库的应用程序接口程序连接和存取数据库的应用程序接口程序连接和存取数据库的应用程序接口(APIAPI),它是),它是),它是),它是JavaJava核心核心核心核心APIAPI的一部分。的一部分。的一部分。的一部分。 13.1.1JDBC数据库应用模型数据库应用模型n nJDBCJDBC由两层组成,上面一层是由两层组成,上面一层是由两层组成,上面一层是由两层组成,上面一层是JDBCAPIJDBCAPI,下面,下面,下面,下面一层是一层是一层是一层是JDBCJDBC驱动程序驱动程序驱动程序驱动程序APIAPI。JDBC驱动程序驱动程序n nJDBCJDBC驱动程序按照连接方
13、式的不同可以分为四种驱动程序按照连接方式的不同可以分为四种驱动程序按照连接方式的不同可以分为四种驱动程序按照连接方式的不同可以分为四种类型:类型:类型:类型: n nType1Type1:JDBC-ODBCBridgeJDBC-ODBCBridgen nType2Type2:NativeAPIBridgeNativeAPIBridgen nType3Type3:JDBC-MiddlewareJDBC-Middlewaren nType4Type4:PureJDBCDriverPureJDBCDriverJDBCJDBC的用途是什么?的用途是什么? 简单地说,简单地说,JDBCJDBC可做三件事
14、:可做三件事:v与数据库建立连接与数据库建立连接;v发送发送SQLSQL语句语句,v处理结果处理结果。JDBC API在java.sql包中定义,其中包括JDBC API用到的所有类、接口和方法利用利用JDBCJDBC开发数据库应用的一般步骤开发数据库应用的一般步骤 (1 1)建立与数据库的连接建立与数据库的连接(2 2)执行执行SQLSQL语句语句(3 3)处理结果集处理结果集(4)关闭数据库的连接使用使用JDBC连接到数据库步骤连接到数据库步骤(1 1)建立与数据库的连接)建立与数据库的连接A A、加载、加载JDBCJDBC驱动程序驱动程序在使用在使用JDBCJDBC驱动程序之前,先加载并
15、注册此驱动程序,若使驱动程序之前,先加载并注册此驱动程序,若使用用JDBC-ODBCJDBC-ODBC桥,则为:桥,则为:Class.forName(Class.forName(“sun.jdbc.odbc.jdbcodbcDriversun.jdbc.odbc.jdbcodbcDriver”););Class.forName(Class.forName(“oracle.jdbc.driver.OracleDriveroracle.jdbc.driver.OracleDriver”););(1 1)建立与数据库的连接)建立与数据库的连接B B、连接到数据库、连接到数据库使用使用DriverMa
16、nagerDriverManager的的getConnection()getConnection()来连接到指定的数据库,来连接到指定的数据库,由于可能会同时使用不同的由于可能会同时使用不同的JDBCJDBC驱动程序,驱动程序,DriverManagerDriverManager会会从已注册的从已注册的JDBCJDBC驱动程序中搜索合适的驱动程序并连接到数据驱动程序中搜索合适的驱动程序并连接到数据库,若是使用库,若是使用JDBC-ODBCJDBC-ODBC桥,则为:桥,则为:Stringurl=“jdbc:oracle:student”Connectioncon=DriverManager.g
17、etConnection(url,“”,“”)使用使用JDBC连接到数据库步骤连接到数据库步骤数据库数据库URLURL的格式为:的格式为:jdbc:jdbc: 子协议子协议odbcodbc表示对表示对ODBCODBC数据源的访问,其格式为:数据源的访问,其格式为: jdbc:odbc:jdbc:odbc: 例如:例如:Stringurl=jdbc:odbc:people;使用使用JDBC连接到数据库步骤连接到数据库步骤DriverManager类的类的getConnection方法用于建立与某个数据方法用于建立与某个数据源的连接。若与由源的连接。若与由URL指定的数据源建立连接成功,则返回一指
18、定的数据源建立连接成功,则返回一个个Connection类的对象。以后对于这个数据源的操作都是基于类的对象。以后对于这个数据源的操作都是基于这个对象。这个对象。getConnection方法是方法是DriverManager类中的静态类中的静态方法。方法。其中其中,getConnection()的第的第1个参数是数据库个参数是数据库URL,第,第2个为个为用户名字,第用户名字,第3个为密码。个为密码。例如:例如:Connectioncon=DriverManager.getConnection(url,“sa”,“”)使用使用JDBC连接到数据库步骤连接到数据库步骤(2)将将SQL语句送至数据
19、库,执行语句送至数据库,执行SQL语句语句A A、创建、创建StatementStatement对象对象 建立了到特定数据库的连接之后,就可用该连接发送建立了到特定数据库的连接之后,就可用该连接发送SQLSQL语句。语句。StatementStatement对象用对象用ConnectionConnection的方法的方法createStatementcreateStatement创建,如下列代码段中所示创建,如下列代码段中所示:Connectioncon=DriverManager.getConnection(url,sunny,);Statementstmt=con.createStatem
20、ent();使用JDBC连接到数据库步骤(2)将将SQL语句送至数据库,执行语句送至数据库,执行SQL语句语句B B、发送、发送StatementStatement对象对象SQLSQL语句语句 为了执行为了执行StatementStatement对象,被发送到数据库的对象,被发送到数据库的SQLSQL语句将被语句将被作为参数提供给作为参数提供给StatementStatement的方法的方法:ResultSetrs=stmt.executeQuery(“SELECT姓名姓名,性别性别,年龄年龄FROMstudent);使用JDBC连接到数据库步骤(2)将将SQL语句送至数据库,执行语句送至数据
21、库,执行SQL语句语句C、使用使用StatementStatement对象执行语句对象执行语句 StatementStatement接口提供了三种执行接口提供了三种执行SQLSQL语句的方法:语句的方法:executeQueryexecuteQuery、executeUpdateexecuteUpdate和和executeexecute。使用哪一个方法由使用哪一个方法由SQLSQL语句所产生的内容决定。语句所产生的内容决定。u方法方法executeQueryexecuteQuery用于产生单个结果集的语句,用于产生单个结果集的语句,例如例如SELECTSELECT语句。语句。使用JDBC连接到
22、数据库步骤(2)将将SQL语句送至数据库,执行语句送至数据库,执行SQL语句语句C、使用、使用Statement对象执行语句对象执行语句u方法方法executeUpdateexecuteUpdate用于执行用于执行INSERTINSERT、UPDATEUPDATE或或DELETEDELETE语句以及语句以及SQLSQLDDLDDL(数据定义语言)语句(数据定义语言)语句u方法方法executeexecute用于执行返回多个结果集、多个更新计数或二用于执行返回多个结果集、多个更新计数或二者组合的语句。者组合的语句。 JDBC应用 (2)将将SQL语句送至数据库,执行语句送至数据库,执行SQL语句
23、语句C、使用、使用Statement对象执行语句对象执行语句执行语句的所有方法都将执行语句的所有方法都将关闭关闭所调用的所调用的StatementStatement对象的对象的当前打开结果集当前打开结果集(如果存在)。(如果存在)。这意味着在重新执行这意味着在重新执行StatementStatement对象之前,需要完对象之前,需要完成对当前成对当前ResultSetResultSet对象的处理。对象的处理。使用JDBC连接到数据库步骤(2)将将SQL语句送至数据库,执行语句送至数据库,执行SQL语句语句D、使用、使用Statement对象执行语句对象执行语句语句完成语句完成对于返回一个结果集
24、的对于返回一个结果集的executeQueryexecuteQuery方法,在检方法,在检索完索完ResultSetResultSet对象的所有行时该语句完成。对象的所有行时该语句完成。对于方法对于方法executeUpdateexecuteUpdate,当它执行时语句即完成。,当它执行时语句即完成。但在少数调用方法但在少数调用方法executeexecute的情况中,在检索所有的情况中,在检索所有结果集或它生成的更新计数之后语句才完成。结果集或它生成的更新计数之后语句才完成。使用JDBC连接到数据库步骤(3)处理结果集)处理结果集读入数据库返回的结果读入数据库返回的结果结果集一般是一个表,其
25、中有查询所返回的列标题及相应的结果集一般是一个表,其中有查询所返回的列标题及相应的值。值。例如,如果查询为例如,如果查询为SELECTSELECT姓名姓名,性别性别,年龄年龄FROMFROMstudentstudent,则结果,则结果集将具有如下形式:集将具有如下形式:使用JDBC连接到数据库步骤姓名姓名性别性别年龄年龄贾宝玉贾宝玉男男21林黛玉林黛玉女女19猪八戒猪八戒男男22白骨精白骨精女女20(3)处理结果集)处理结果集读入数据库返回的结果读入数据库返回的结果ResultSet:ResultSet包含符合包含符合SQLSQL语句中条件的所有行,并且语句中条件的所有行,并且它通过一套它通过
26、一套getget方法(这些方法(这些getget方法可以访问当前行中的方法可以访问当前行中的不同列)提供了对这些行中数据的访问。不同列)提供了对这些行中数据的访问。ResultSet.next方法用于移动到方法用于移动到ResultSet中的下一行,中的下一行,使下一行成为当前行。使下一行成为当前行。 使用JDBC连接到数据库步骤(3)处理结果集)处理结果集行和光标行和光标lResultSetResultSet维护指向其当前数据行的光标。每调用一次维护指向其当前数据行的光标。每调用一次nextnext方法,光标向下移动一行。方法,光标向下移动一行。l最初它位于第一行之前,因此第一次调用最初它位
27、于第一行之前,因此第一次调用nextnext将把光标置于将把光标置于第一行上,使它成为当前行。第一行上,使它成为当前行。l随着每次调用随着每次调用nextnext导致光标向下移动一行,按照从上至下的导致光标向下移动一行,按照从上至下的次序获取次序获取ResultSetResultSet行。行。l在在ResultSetResultSet对象或其父辈对象或其父辈StatementStatement对象关闭之前,光标一对象关闭之前,光标一直保持有效直保持有效 使用JDBC连接到数据库步骤(3)处理结果集)处理结果集列列 方法方法getXXXgetXXX提供了获取当前行中某列值的途径。在每一行提供了获
28、取当前行中某列值的途径。在每一行内,可按任何次序获取列值。但为了保证可移植性,应该从左内,可按任何次序获取列值。但为了保证可移植性,应该从左至右获取列值,并且一次性地读取列值。列名或列号可用于标至右获取列值,并且一次性地读取列值。列名或列号可用于标识要从中获取数据的列。例如,如果识要从中获取数据的列。例如,如果ResultSetResultSet对象对象rsrs的第二的第二列名为列名为“性别性别”,并将值存储为字符串,则下列任一代码将获,并将值存储为字符串,则下列任一代码将获取存储在该列中的值:取存储在该列中的值:StringStrings s= =rs.getString(rs.getStr
29、ing(“性别性别););StringStrings s= =rs.getString(2); rs.getString(2); 使用JDBC连接到数据库步骤(3)处理结果集)处理结果集列列注意列是从左至右编号的,并且从列注意列是从左至右编号的,并且从列1 1开始。同时,用作开始。同时,用作getXXXgetXXX方法的输入的列名不区分大小写。方法的输入的列名不区分大小写。提供使用列名这个选项的目的是为了让在查询中指定列名的提供使用列名这个选项的目的是为了让在查询中指定列名的用户可使用相同的名字作为用户可使用相同的名字作为getXXXgetXXX方法的参数。方法的参数。使用JDBC连接到数据库
30、步骤(3)处理结果集)处理结果集读入数据库返回的结果读入数据库返回的结果 由于是进行查询的工作,因此会返回一个由于是进行查询的工作,因此会返回一个ResultSetResultSet对象,可使用对象,可使用whilewhile来读出所返回的数来读出所返回的数据据. .例如:例如:ResultSetrs=stmt.executeQuery(“SELECT姓名姓名,性别性别,年龄年龄FROMxs);While(rs.next()使用使用JDBC连接到数据库步骤连接到数据库步骤(4)关闭数据库的连接)关闭数据库的连接关闭关闭StatementStatement对象:对象:StatementState
31、ment对象将由对象将由JavaJava垃圾收集程序自动关闭。垃圾收集程序自动关闭。而作为一种好的编程风格,应在不需要而作为一种好的编程风格,应在不需要StatementStatement对象时对象时显式地关闭它们。显式地关闭它们。这将立即释放这将立即释放DBMSDBMS资源,有助于避免潜在的内存问题资源,有助于避免潜在的内存问题使用JDBC连接到数据库步骤(4)关闭数据库的连接)关闭数据库的连接关闭关闭结果集;结果集;关闭关闭Statement对象;对象;关闭关闭连接;连接;使用JDBC连接到数据库步骤下面的代码段是执行下面的代码段是执行SQLSQL语句的示例。语句的示例。java.sql.
32、Statementjava.sql.Statementstmtstmt= =conn.createStatement();conn.createStatement();ResultSetResultSetr r= =stmtstmt.executeQuery(.executeQuery(“ SELECT SELECT姓名姓名, ,性别性别, ,年龄年龄FROMFROMstudentstudent ”););int i=0int i=0;whilewhile( (r r.next().next()i=i+1i=i+1;/打印当前行的值。打印当前行的值。StringStringnamename=
33、=r.r.getString(getString(姓名姓名););StringStringsexsex= =r r.getString(.getString(性别性别););floatfloatageage= =r r.getInt(.getInt(年龄年龄););System.out.println(ROWSystem.out.println(ROW= = + +i i+ + name + + sex + + age);); 使用JDBC连接到数据库步骤实例:实例:JDBCTest.javaimportjava.sql.*;importjava.sql.*;publicclassJDBCTe
34、stpublicclassJDBCTestpublicstaticvoidmain(Stringargs)publicstaticvoidmain(Stringargs)StringStringurlurl=jdbc:odbc:mydatabase;=jdbc:odbc:mydatabase;StringStringqueryquery=SELECT*FROMstudent;=SELECT*FROMstudent;trytry Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);Class.forName(sun.jdbc.odbc.JdbcOdbcDriv
35、er); catch(java.lang.ClassNotFoundExceptione)catch(java.lang.ClassNotFoundExceptione)System.err.print(ClassNotFoundException:);System.err.print(ClassNotFoundException:);System.err.println(e.getMessage();System.err.println(e.getMessage(); 加载加载JDBC-ODBCbridge驱动程序;使用驱动程序;使用Class.forName方法显式加载驱动程序完成:方法显
36、式加载驱动程序完成:建立操作数据库建立操作数据库的的SQL语句;语句;trytrytrytryConnection con = DriverManager.getConnection (Connection con = DriverManager.getConnection (Connection con = DriverManager.getConnection (Connection con = DriverManager.getConnection (urlurlurlurl); ); ); ); Statement stmt = con.createStatement ();State
37、ment stmt = con.createStatement ();Statement stmt = con.createStatement ();Statement stmt = con.createStatement ();ResultSet r = stmt.executeQuery (query);ResultSet r = stmt.executeQuery (query);ResultSet r = stmt.executeQuery (query);ResultSet r = stmt.executeQuery (query);while(r.next()while(r.nex
38、t()while(r.next()while(r.next() String r1=r.getString( String r1=r.getString( String r1=r.getString( String r1=r.getString(姓名姓名姓名姓名); ); ); ); String r3=r.getString( String r3=r.getString( String r3=r.getString( String r3=r.getString(性别性别性别性别);););); int r2=r.getInt( int r2=r.getInt( int r2=r.getInt
39、( int r2=r.getInt(年龄年龄年龄年龄);););); System.out.println(r1+ +r2+ +r3); System.out.println(r1+ +r2+ +r3); System.out.println(r1+ +r2+ +r3); System.out.println(r1+ +r2+ +r3); r.close();stmt.close();con.close();r.close();stmt.close();con.close();r.close();stmt.close();con.close();r.close();stmt.close();c
40、on.close(); catch (SQLException ex) catch (SQLException ex) catch (SQLException ex) catch (SQLException ex) System.out.println (n* SQLException caught *n); System.out.println (n* SQLException caught *n); System.out.println (n* SQLException caught *n); System.out.println (n* SQLException caught *n);
41、实例:实例:JDBCTest.javaStringurl=jdbc:odbc:mydatabase;创建创建statement对象对象发送发送SQL语句语句关闭关闭通过通过通过通过JDBCJDBC访问数据库的基本流程访问数据库的基本流程访问数据库的基本流程访问数据库的基本流程 n n基本流程基本流程基本流程基本流程n n1 1建立建立建立建立ODBCODBC数据源(可选)数据源(可选)数据源(可选)数据源(可选) n n2 2装入装入装入装入JDBCJDBC驱动程序驱动程序驱动程序驱动程序 n n3 3建立连接建立连接建立连接建立连接n n4 4执行执行执行执行SQLSQL语句语句语句语句n
42、n5 5检索结果检索结果检索结果检索结果n n6 6关闭连接关闭连接关闭连接关闭连接建立建立ODBC数据源(可选)数据源(可选)n n当使用当使用当使用当使用JDBC-ODBCBridgeJDBC-ODBCBridge来建立连接时,必须来建立连接时,必须来建立连接时,必须来建立连接时,必须先建立先建立先建立先建立ODBCODBC数据源。数据源。数据源。数据源。n nODBCODBC数据源的配置步骤:数据源的配置步骤:数据源的配置步骤:数据源的配置步骤: n n打开打开打开打开WindowsWindows的的的的“ “控制面板控制面板控制面板控制面板” ”,在,在,在,在“ “管理工具管理工具管
43、理工具管理工具” ”中找到中找到中找到中找到“ “数据源数据源数据源数据源(ODBC)(ODBC)” ”建立建立ODBC数据源(可选)数据源(可选)n n在在在在“ “用户用户用户用户DNSDNS” ”选项卡的选项卡的选项卡的选项卡的“ “用户数据源用户数据源用户数据源用户数据源” ”列表中,单击列表中,单击列表中,单击列表中,单击“ “添加添加添加添加” ”按钮,弹出按钮,弹出按钮,弹出按钮,弹出“ “创建新数据源创建新数据源创建新数据源创建新数据源” ”对话框对话框对话框对话框 建立建立ODBC数据源(可选)数据源(可选)n n选择创建选择创建选择创建选择创建“ “MicrosoftAcc
44、essDriverMicrosoftAccessDriver” ”类型的数据源,类型的数据源,类型的数据源,类型的数据源,然后单击然后单击然后单击然后单击“ “完成完成完成完成” ”按钮,弹出按钮,弹出按钮,弹出按钮,弹出“ “ODBCMicrosoftODBCMicrosoftAccessAccess安装安装安装安装” ”对话框对话框对话框对话框 建立建立ODBC数据源(可选)数据源(可选)n n在此对话框中,输入数据源名称,并单击在此对话框中,输入数据源名称,并单击在此对话框中,输入数据源名称,并单击在此对话框中,输入数据源名称,并单击“ “创建创建创建创建” ”按按按按钮,弹出钮,弹出钮
45、,弹出钮,弹出“ “新数据库新数据库新数据库新数据库” ”对话框。如果事先已经建立了对话框。如果事先已经建立了对话框。如果事先已经建立了对话框。如果事先已经建立了数据库,可以单击数据库,可以单击数据库,可以单击数据库,可以单击“ “选择选择选择选择” ”按钮,并指明数据库的存按钮,并指明数据库的存按钮,并指明数据库的存按钮,并指明数据库的存放路径。放路径。放路径。放路径。 建立建立ODBC数据源(可选)数据源(可选)n n在在在在“ “新建数据库新建数据库新建数据库新建数据库” ”对话框中,输入需要新建的数据库名称,选择对话框中,输入需要新建的数据库名称,选择对话框中,输入需要新建的数据库名称
46、,选择对话框中,输入需要新建的数据库名称,选择数据库的保存路径,然后单击数据库的保存路径,然后单击数据库的保存路径,然后单击数据库的保存路径,然后单击“ “确定确定确定确定” ”按钮,返回按钮,返回按钮,返回按钮,返回“ “ODBCODBCMicrosoftAccessMicrosoftAccess安装安装安装安装” ”对话框。对话框。对话框。对话框。n n在在在在“ “ODBCMicrosoftAccessODBCMicrosoftAccess安装安装安装安装” ”对话框中单击对话框中单击对话框中单击对话框中单击“ “确定确定确定确定” ”按钮,按钮,按钮,按钮,返回返回返回返回“ “ODB
47、CODBC数据源管理器数据源管理器数据源管理器数据源管理器” ”对话框,新添加的用户数据源将出现对话框,新添加的用户数据源将出现对话框,新添加的用户数据源将出现对话框,新添加的用户数据源将出现在此对话框中。此时,在此对话框中。此时,在此对话框中。此时,在此对话框中。此时,单击单击单击单击“ “确定确定确定确定” ”按钮,新按钮,新按钮,新按钮,新用户数据源创建完成。用户数据源创建完成。用户数据源创建完成。用户数据源创建完成。数据源创建完成之后,数据源创建完成之后,数据源创建完成之后,数据源创建完成之后,便可以对这个数据源便可以对这个数据源便可以对这个数据源便可以对这个数据源进行数据表的创建和进
48、行数据表的创建和进行数据表的创建和进行数据表的创建和修改,记录的添加、修改,记录的添加、修改,记录的添加、修改,记录的添加、修改和删除等数据库修改和删除等数据库修改和删除等数据库修改和删除等数据库操作。操作。操作。操作。添加添加ODBC数据源数据源importjava.sql.*;importjava.sql.*;publicclassJDBCInsertpublicclassJDBCInsertpublicstaticvoidmain(Stringargs)publicstaticvoidmain(Stringargs) Stringurl=jdbc:odbc:mydatabase;Stri
49、ngurl=jdbc:odbc:mydatabase;trytryClass.forName(sun.jdbc.odbc.JdbcOdbcDriver);Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);catch(java.lang.ClassNotFoundExceptione)catch(java.lang.ClassNotFoundExceptione)System.err.print(ClassNotFoundException:);System.err.print(ClassNotFoundException:);System.err.prin
50、tln(e.getMessage();System.err.println(e.getMessage();trytrystmt.executeQuery(insertintostudentvalues(stmt.executeQuery(insertintostudentvalues( 美眉美眉美眉美眉 , , 女女女女 ,18);,18);stmt.close();con.close();stmt.close();con.close();catch(SQLExceptionex)catch(SQLExceptionex) System.out.println(n*SQLExceptionca
51、ught*n);System.out.println(n*SQLExceptioncaught*n); 实例:实例:JDBCInsert.java插入记录,无返回结插入记录,无返回结果果并注意单引号和双引并注意单引号和双引号号思考此程序哪里有问题思考此程序哪里有问题!更新数据更新数据importjava.sql.*;importjava.sql.*;publicclassJDBCUpdatepublicclassJDBCUpdatepublicstaticvoidmain(Stringargs)publicstaticvoidmain(Stringargs)Stringurl=jdbc:odb
52、c:student;Stringurl=jdbc:odbc:student;trytryClass.forName(sun.jdbc.odbc.JdbcOdbcDriver);Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);Connectioncon=DriverManager.getConnection(url);Connectioncon=DriverManager.getConnection(url);Statementstmt=con.createStatement();Statementstmt=con.createStatement();st
53、mt.executeUpdate(updatestudentsetstmt.executeUpdate(updatestudentset年龄年龄年龄年龄=80where=80where姓名姓名姓名姓名=美眉美眉美眉美眉););stmt.close();stmt.close();con.close();con.close();catch(Exceptione)catch(Exceptione)e.printStackTrace();e.printStackTrace(); 删除数据删除数据import java.sql.*;import java.sql.*;import java.sql.*;
54、import java.sql.*;public class JDBCDelete public class JDBCDelete public class JDBCDelete public class JDBCDelete public static void main (String args ) public static void main (String args ) public static void main (String args ) public static void main (String args ) try try try try Class.forName(
55、sun.jdbc.odbc.JdbcOdbcDriver); Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Connection con = DriverManager.getConnection(jdbc:odbc:mydatabase);Connection con = DriverManager.getConnection(jdbc:odbc:mydatabase);
56、Connection con = DriverManager.getConnection(jdbc:odbc:mydatabase);Connection con = DriverManager.getConnection(jdbc:odbc:mydatabase); Statement stmt = con.createStatement ( ); Statement stmt = con.createStatement ( ); Statement stmt = con.createStatement ( ); Statement stmt = con.createStatement (
57、); stmt.executeUpdate( delete * from student where name=stmt.executeUpdate( delete * from student where name=stmt.executeUpdate( delete * from student where name=stmt.executeUpdate( delete * from student where name=美眉美眉美眉美眉 ); ); ); ); con.close( ); con.close( ); con.close( ); con.close( ); catch (E
58、xception e) catch (Exception e) catch (Exception e) catch (Exception e) e.printStackTrace( ); e.printStackTrace( ); e.printStackTrace( ); e.printStackTrace( ); 这个程序的问题又出现在哪里这个程序的问题又出现在哪里?!JDBCAPI用到的类、接口和方法用到的类、接口和方法(1 1)驱动程序管理)驱动程序管理)驱动程序管理)驱动程序管理n njava.sql.Driverjava.sql.Driver 驱动程序接口,是每个数据库驱动程序接口
59、,是每个数据库驱动程序接口,是每个数据库驱动程序接口,是每个数据库驱动器都要实现的接口。负责确认驱动器都要实现的接口。负责确认驱动器都要实现的接口。负责确认驱动器都要实现的接口。负责确认URLURL与驱动程与驱动程与驱动程与驱动程序的匹配、建立到数据库的连接等,其中的方法序的匹配、建立到数据库的连接等,其中的方法序的匹配、建立到数据库的连接等,其中的方法序的匹配、建立到数据库的连接等,其中的方法需要有相应的驱动程序实现。需要有相应的驱动程序实现。需要有相应的驱动程序实现。需要有相应的驱动程序实现。n njava.sql.DriverManagerjava.sql.DriverManager 提
60、供管理一组提供管理一组提供管理一组提供管理一组JDBCJDBC驱动程序所需的基本服务,包括加载所有数据库驱动程序所需的基本服务,包括加载所有数据库驱动程序所需的基本服务,包括加载所有数据库驱动程序所需的基本服务,包括加载所有数据库驱动器,以及根据用户的连接请求驱动相应的数驱动器,以及根据用户的连接请求驱动相应的数驱动器,以及根据用户的连接请求驱动相应的数驱动器,以及根据用户的连接请求驱动相应的数据库驱动器建立连接。据库驱动器建立连接。据库驱动器建立连接。据库驱动器建立连接。(2)数据库连接)数据库连接n njava.sql.Connectionjava.sql.Connection 表示到特定
61、数据库的连表示到特定数据库的连表示到特定数据库的连表示到特定数据库的连接,通过连接执行接,通过连接执行接,通过连接执行接,通过连接执行SQLSQL语句并获取语句并获取语句并获取语句并获取SQLSQL语句执行语句执行语句执行语句执行结果,其中的方法需要有相应的驱动程序实现。结果,其中的方法需要有相应的驱动程序实现。结果,其中的方法需要有相应的驱动程序实现。结果,其中的方法需要有相应的驱动程序实现。 (3)SQL语句语句n njava.sql.Statementjava.sql.Statement 为为为为SQLSQL语句提供一个容器,语句提供一个容器,语句提供一个容器,语句提供一个容器,包括执行
62、包括执行包括执行包括执行SQLSQL语句、取得查询结果等方法。语句、取得查询结果等方法。语句、取得查询结果等方法。语句、取得查询结果等方法。(4)数据)数据n njava.sql.ResultSetjava.sql.ResultSet 表示数据集的一个数据表,表示数据集的一个数据表,表示数据集的一个数据表,表示数据集的一个数据表,一般是在执行一般是在执行一般是在执行一般是在执行SQLSQL查询语句时产生的,提供对结查询语句时产生的,提供对结查询语句时产生的,提供对结查询语句时产生的,提供对结果集进行处理的手段。果集进行处理的手段。果集进行处理的手段。果集进行处理的手段。 13.2.2常用的常用
63、的JDBCAPIn nJDBCAPIJDBCAPI提供的类和接口在提供的类和接口在提供的类和接口在提供的类和接口在java.sqljava.sql包中定义。包中定义。包中定义。包中定义。 类类或接口名称或接口名称说说明明java.sql.CallableStatement用于执行SQL存储过程java.sql.Connection表示与一个特定数据库的会话。在一个 Connection 的上下文中,执行SQL语句并返回结果。java.sql.DataTruncation 截断一个数据的值产生的异常java.sql.Date对日期的处理类java.sql.Driver数据库驱动程序类。java.
64、sql.DriverManager提供管理 JDBC 驱动器设置的基本服务。java.sql.DriverPropertyInfo 程序员与驱动器交互的类,以发现和提供连接特性java.sql.PreparedStatement可用于有效地多次执行预编译的SQL 语句java.sql.ResultSet提供了通过执行一条语句访问所生成的数据表的功能java.sql.SQLException提供了关于数据库访问错误的信息。java.sql.SQLWarning提供了关于数据库访问的警告信息java.sql.Statement用于执行一条静态的 SQL 语句并获取它产生的结果java.sql.Ti
65、me 处理时间java.sql.Types此类定义用于标识 SQL 类型的常量java.sql.Timestamp处理具有毫秒级的时间java.sql.DatabaseMetaData 该类提供了关于数据库的整体信息13.2.2常用的常用的JDBCAPIn n下图是下图是下图是下图是JDBCJDBC接口之间的详细关系,是我们调用接口之间的详细关系,是我们调用接口之间的详细关系,是我们调用接口之间的详细关系,是我们调用JDBCJDBC数据数据数据数据库进行连接、执行和获取数据的更详细的过程。库进行连接、执行和获取数据的更详细的过程。库进行连接、执行和获取数据的更详细的过程。库进行连接、执行和获取
66、数据的更详细的过程。 连接连接sqlservern nClass.Class.forName(com.microsoft.sqlserver.jdforName(com.microsoft.sqlserver.jdbc.SQLServerDriver);bc.SQLServerDriver);n nConnectioncon=Connectioncon=DriverManager.DriverManager.getConnection(jdbc:sqlsergetConnection(jdbc:sqlserver:/localhost:1433;databaseName=persver:/localhost:1433;databaseName=person,sa, sa);on,sa, sa);n n加载加载加载加载JDBCJDBC连连连连sqlserver2019sqlserver2019需要的需要的需要的需要的jarjar包包包包 sqljdbc.jar sqljdbc.jar