第12章-JAVA数据库编程课件

上传人:无*** 文档编号:241639217 上传时间:2024-07-12 格式:PPT 页数:38 大小:554.50KB
返回 下载 相关 举报
第12章-JAVA数据库编程课件_第1页
第1页 / 共38页
第12章-JAVA数据库编程课件_第2页
第2页 / 共38页
第12章-JAVA数据库编程课件_第3页
第3页 / 共38页
点击查看更多>>
资源描述
第12章 JAVA数据库操作了解JDBC的概念及必要性理解JDBC 程序的结构运用JDBC进行数据库编程2024/7/121JDBC JDBC(Java 数据库连接)(sun公司提供)Java 应用程序编程接口Java应用程序数据库数据库 插 入修 改删 除查询 2024/7/122JDBC 体系结构 应用程序 DBDBDB应用程序 应用程序 JDBC APIJDBC DriverManager数据库驱动数据库驱动JDBCJDBC2024/7/123JDBC 体系结构2 应用层应用层 Driver StatementResultSet Connection 各接口驱动层驱动层 2024/7/124JDBC API-DriverManagerJDBCJDBC的管理层,用于把的管理层,用于把Java Java 应用程序连接到正确的应用程序连接到正确的JDBC JDBC 驱动程序上,然后即退出。驱动程序上,然后即退出。加载驱动程序时自动调用其加载驱动程序时自动调用其registerDriverregisterDriver方法方法Class.forName(Class.forName(com.mysql.jdbc.Drivercom.mysql.jdbc.Driver););System.setProperty(jdbc.drivers,System.setProperty(jdbc.drivers,com.mysql.jdbc.Driver);com.mysql.jdbc.Driver);建立连接建立连接:通过通过DriverManager.getConnection(URL)DriverManager.getConnection(URL)方法提供方法提供的的URLURL检查已注册的驱动程序,建立与数据库的连接。检查已注册的驱动程序,建立与数据库的连接。2024/7/125JDBC API-ConnectionConnection Connection 对象代表与数据库的连接对象代表与数据库的连接获取连接的方法:获取连接的方法:DriverManager.getConnection(DriverManager.getConnection(URLURL,user,pwd),user,pwd)JDBC URL JDBC URL 的标准语法如下所示的标准语法如下所示:jdbc:jdbc:。例如:。例如:String String url=jdbc:mysql:/localhost:3306/testdb“url=jdbc:mysql:/localhost:3306/testdb“String url=“jdbc:odbc:testDS”String url=“jdbc:odbc:testDS”2024/7/126JDBC API-ConnectionDriverManager DriverManager 类存有已注册的类存有已注册的 Driver Driver 类的类的清单。当调用方法清单。当调用方法getConnection getConnection 时,它将检时,它将检查清单中的每个驱动程序,直到找到可与查清单中的每个驱动程序,直到找到可与URLURL中指定的数据库进行连接的驱动程序为止。中指定的数据库进行连接的驱动程序为止。Driver Driver 的方法的方法connect connect 使用这个使用这个 URL URL 来建立来建立实际的连接。实际的连接。2024/7/127JDBC API-Statement(1)StatementStatement用于发送简单的用于发送简单的SQLSQL语句语句通过通过CONNECTIONCONNECTION对象的对象的createStatementcreateStatement方法创建方法创建PreparedStatement PreparedStatement 用于发送一个或多个输入参数的用于发送一个或多个输入参数的SQLSQL语句语句通过通过CONNECTIONCONNECTION对象的对象的prepareStatementprepareStatement方法创建方法创建继承于继承于StatementStatement,并提供一组方法设置输入参数,并提供一组方法设置输入参数CallableStatementCallableStatement用于处理用于处理SQLSQL存储过程存储过程通过通过CONNECTIONCONNECTION对象的对象的prepareCallprepareCall方法创建方法创建继承于继承于PreparedStatementPreparedStatement,并提供一组方法处理输入、输,并提供一组方法处理输入、输出参数出参数2024/7/128JDBC API-Statement(2)n执行语句方法n举例:StatementPreparedStatementCallableStatementexecuteQuery()executeUpdate()execute()Connection con=DriverManager.getConnection(url,sunny,);Statement stmt=con.createStatement(“select*);ResultSet rs=stmt.executeQuery(SELECT a,b,c FROM Table2);2024/7/129JDBC API-ResultSet(1)ResultSet包含符合SQL语句中条件的所有行集它通过一套 get 方法访问当前行中不同列next 方法用于移动到ResultSet 中的下一行,使下一行成为当前行。2024/7/1210JDBC API-ResultSet(2)结果集一般是一个表,其中有查询所返回的列结果集一般是一个表,其中有查询所返回的列标题及相应的值标题及相应的值如果查询语句为如果查询语句为 SELECT SELECT stuNo,stuName,stuDept from StudentstuNo,stuName,stuDept from Student,则结,则结果集如下:果集如下:stuNo stuName stuDept _ _ _06001 张一张一 材料材料 06002 张二张二 计算机计算机06003 张三张三 外国语外国语 2024/7/1211JDBC API-SqlExceptionSQLExceptiontry 此处为相关数据库操作;catch(SQLException ex)System.out.println(“已捕获一个 SQLException 异常!”);System.out.println(“消息:“+ex.getMessage();System.out.println(“错误代码:“+ex.getErrorCode();2024/7/1212JDBC 程序访问数据库的步骤开 始导入 java.sql包 加载并注册驱动程序创建一个 Connection 对象创建一个 Statement 对象执行语句关闭ResultSet 对象关闭Statement对象关闭连接结 束使用ResultSet对象2024/7/1213JDBC 程序访问数据库的步骤 2-1import java.sql.SQLException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;import java.sql.ResultSet;导入 java.sql包 2024/7/1214JDBC 程序访问数据库的步骤 2-2假设当前应用系统使用假设当前应用系统使用MYSQLMYSQL数据库,首先将该数据库驱动程数据库,首先将该数据库驱动程序(序(mysql-connector-java-5.1.5-bin.jarmysql-connector-java-5.1.5-bin.jar)放在当前系统路)放在当前系统路径下径下;加载驱动方法:加载驱动方法:方法一方法一System.setProperty(jdbc.drivers,com.mysql.jdbc.Driver);System.setProperty(jdbc.drivers,com.mysql.jdbc.Driver);方法二方法二try try Class.forName(Class.forName(com.mysql.jdbc.Drivercom.mysql.jdbc.Driver););catch(ClassNotFoundException ce)catch(ClassNotFoundException ce)System.out.println(ce);System.out.println(ce);加载并注册驱动程序2024/7/1215JDBC 程序访问数据库的步骤 2-2装载装载JDBC-ODBCJDBC-ODBC驱动程序(不需要注册)驱动程序(不需要注册)Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);装载并注册装载并注册SqlServerSqlServer驱动程序驱动程序Class.forName(“com.microsoft.jdbc.sqlserver.SqlServerDriver”);Class.forName(“com.microsoft.jdbc.sqlserver.SqlServerDriver”);DriverManager.registerDriver(new DriverManager.registerDriver(new com.microsoft.jdbc.sqlserver.SqlServerDriver();com.microsoft.jdbc.sqlserver.SqlServerDriver();装载并注册装载并注册OracleOracle驱动程序驱动程序Class.forName(“Oracle.jdbc.driver.OracleDriver”);Class.forName(“Oracle.jdbc.driver.OracleDriver”);DriverManager.registerDriver(new Oracle.jdbc.driver.OracleDriver();DriverManager.registerDriver(new Oracle.jdbc.driver.OracleDriver();加载并注册驱动程序2024/7/1216JDBC 程序访问数据库的步骤 2-3程序操作数据库之前必须先建立与数据库的连接程序操作数据库之前必须先建立与数据库的连接连接数据库必须提供的信息有:连接数据库必须提供的信息有:数据库服务器在网络中的数据库服务器在网络中的IPIP及端口号及端口号该数据库服务器上某一数据库名称该数据库服务器上某一数据库名称数据库用户名与口令等信息数据库用户名与口令等信息参考代码参考代码(以以MYSQLMYSQL数据库为例数据库为例)String url=jdbc:mysql:/localhost:3306/testdbString url=jdbc:mysql:/localhost:3306/testdbDriverManager.getConnection(url,root,root);DriverManager.getConnection(url,root,root);创建一个 Connection 对象2024/7/1217JDBC 程序访问数据库的步骤 2-3常用数据库的JDBC URL形式:JDBC-ODBC DriverJDBC-ODBC DriverString url=“jdbc:odbc:dsName”DriverManager.getConnection(url)OracleOracle数据库数据库String url=“jdbc:oracle:thinlocalhost:1512:sid”DriverManager.getConnection(url,”user”,”pwd”)SQLServerSQLServer数据库数据库String url=“jdbc:microsoft:sqlserver:/localhost:1433:DatabaseName=pubs”DriverManager.getConnection(url,”user”,”pwd”)创建一个 Connection 对象2024/7/1218JDBC 程序访问数据库的步骤 2-4,5Statement stmt=conn.createStatement();Statement stmt=conn.createStatement();String sql=“select id,name,title,price from books String sql=“select id,name,title,price from books where name=“Tom”and price=40”;where name=“Tom”and price=40”;ResultSet rs=stmt.executeQuery(sql);ResultSet rs=stmt.executeQuery(sql);创建一个 Statement 对象执行SQL语句2024/7/1219JDBC 程序访问数据库的步骤 2-6访问访问ResultSetResultSet中的记录集中的记录集While(rs.next()While(rs.next()String col1=rs.getString(1);String col1=rs.getString(1);String col2=rs.getString(“name”);String col2=rs.getString(“name”);String col3=rs.getString(“3”);String col3=rs.getString(“3”);float col4=rs.getFloat(“price”);float col4=rs.getFloat(“price”);System.out.println(“id=“+col1+”System.out.println(“id=“+col1+”name=“+col2+“name=“+col2+“title=“+col3+”price=“+col4);title=“+col3+”price=“+col4);使用ResultSet对象2024/7/1220JDBC 程序访问数据库的步骤 2-7依次关闭依次关闭ResultSetResultSet、StatementStatement和和ConnectionConnection对象对象rs.close();rs.close();stmt.close();stmt.close();con.close();con.close();释放资源2024/7/1221应用实例-1已知已知MYSQLMYSQL数据库服务器数据库服务器IPIP地址为:地址为:192.168.1.10192.168.1.10,数据库名数据库名 testdbtestdb,用户名为,用户名为rootroot,口令为,口令为rootroot,其,其中中booksbooks表结构如下:表结构如下:打印出该表中所有的记录,然后添加一条记录,信息打印出该表中所有的记录,然后添加一条记录,信息如下如下(999,Tom,jdbc Bible,49.8)(999,Tom,jdbc Bible,49.8),再,再将新增的记录删除。将新增的记录删除。columnidnametitlepricetypevarcharvarcharvarcharfloat2024/7/1222public static void main(String args)try Class.forName(com.mysql.jdbc.Driver);catch(ClassNotFoundException ce)System.out.println(ce);try String url=jdbc:mysql:/192.168.1.10:3306/testdb;Connection con=DriverManager.getConnection(url,”root”,”root”);Statement stmt=con.createStatement();String sql=select id,name,title,price from books ;ResultSet rs=s.executeQuery(sql)while(rs.next()String col1=rs.getString(1);String col2=rs.getString(“name”);String col3=rs.getString(“3”);float col4=rs.getFloat(“price”);System.out.println(“id=“+col1+”name=“+col2+“title=“+col3+”price=“+col4);2024/7/1223sql=insert into books(id,name,title,price)VALUES(999,Tom,jdbc Bible,49.8)from books stmt.executeUpdate(sql);stmt.executeUpdate(“delete from books where id=999”);rs.close;stmt.close();con.close();catch(SQLException ce)System.out.println(ce);/end try/end main2024/7/1224JDBC 查询2-1SQL 查询字符串 executeQuery()方法 作为参数传递ResultSet 返回查询数据SELECT name,email,phone FROM colleagues;使用 SQL 语句,查询可编写为:String str=SELECT emp_id,lname,fname FROM colleagues;Statement stmt=con.createStatement();ResultSet rset=stmt.executeQuery(str);使用 JDBC 编写此查询,则代码为:Statement接口接口2024/7/1225JDBC 查询2-2演示 SQL 中 sum()方法的用法/*Jdbctest2 */import java.sql.SQLException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;import java.sql.ResultSet;/*这个类演示 SQL 中 sum()方法的用法 */class Jdbctest2/*构造方法*/protected Jdbctest2()2024/7/1226JDBC 查询2-2演示 SQL 中 sum()方法的用法/*这是 main 方法*/public static void main(String args)try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);catch(ClassNotFoundException ce)System.out.println(ce);try String url=jdbc:odbc:test;Connection con=DriverManager.getConnection(url);Statement s=con.createStatement();ResultSet rs=s.executeQuery(select hiredate,sum(salary)from friends group by hiredate);while(rs.next()System.out.print(rs.getDate(1)+t);System.out.print(rs.getInt(2)+t);System.out.println();rs.close;s.close();con.close();catch(SQLException ce)System.out.println(ce);2024/7/1227演示:示例 3n它演示 SQL 中 INSERT 语句的用法/*Jdbctest3 */import java.sql.SQLException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;import java.sql.ResultSet;/*这个类演示 INSERT 语句的用法.*version 1.0,2005 年 8 月 26 日 *author Ben */class Jdbctest3/*构造方法*/protected Jdbctest3()JDBC 插入数据实现/*这是 main 方法*/public static void main(String args)try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);catch(ClassNotFoundException ce)System.out.println(ce);try String url=jdbc:odbc:test;String str=INSERT INTO“+friends(name,address,salary)“+VALUES(朱八,深圳,25690);Connection con=DriverManager.getConnection(url);Statement s=con.createStatement();int rowcount=s.executeUpdate(str);String str1=select name,sum(salary)“+from friends +group by name;ResultSet rs=s.executeQuery(str1);while(rs.next()System.out.print(rs.getString(1)+t);System.out.print(rs.getInt(2)+t);System.out.println();rs.close();s.close();con.close();catch(SQLException ce)System.out.println(ce);2024/7/1228JDBC 删除和修改实现n它演示 SQL 中各种命令的用法演示:示例 4/*Jdbc2 */import java.sql.SQLException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;/*这这个类演示 SQL 中命令的用法.*version 1.0,2005 年 8 月 26 日 *author Ben */class Jdbc2/*构造方法.*/protected Jdbc2()public static void main(String args)Connection con;Statement stmt;String url;String sql;try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);catch(ClassNotFoundException ce)System.out.println(ce);try url=jdbc:odbc:test;con=DriverManager.getConnection(url);sql=Delete from friends where rtrim(name)like张三;System.out.println();stmt=con.createStatement();stmt.executeUpdate(sql);System.out.println(张三 的记录已删除“);stmt.close();con.close();con=DriverManager.getConnection(url);sql=Update friends set address=青岛 where“+rtrim(name)like 李四;System.out.println();stmt=con.createStatement();stmt.executeUpdate(sql);stmt.close();con.close();System.out.println(李四的记录已更新);catch(SQLException ce)System.out.println(ce);2024/7/1229PreparedStatement接口 3-1 PreparedStatement接口(预编译的 SQL 语句)PreparedStatement 用于提高运行时效率执行 PreparedStatement 对象比执行 Statement 对象快Statement 接口接口2024/7/1230PreparedStatement接口 3-2 n它演示了PreparedStatement 的用法演示:示例 5/*CourseAppl */import java.sql.SQLException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;import java.sql.ResultSet;import java.sql.PreparedStatement;/*这个类演示 SQL 中 PreparedStatement 的用法*/class CourseAppl private Connection con;private String url;private String serverName;private String portNumber;private String databaseName;private String userName;private String password;private String sql;CourseAppl()url=jdbc:microsoft:sqlserver:/;serverName=“localhost;portNumber=1433;databaseName=“test;userName=“sa;password=“sa;private String getConnectionUrl()return url+serverName+:+portNumber +;databaseName=+databaseName+;private java.sql.Connection getConnection()try Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);con=DriverManager.getConnection(getConnectionUrl(),userName,password);if(con!=null)System.out.println(连接成功!);catch(Exception e)e.printStackTrace();System.out.println(getConnection()内的错误跟踪:+e.getMessage();return con;public void display()try con=getConnection();PreparedStatement pstmt=con.prepareStatement(UPDATE friends SET salary=?WHERE name like?);pstmt.setInt(1,10000);pstmt.setString(2,李四);pstmt.executeUpdate();System.out.println(“记录已更新!);Statement s=con.createStatement();String sql=SELECT*FROM friends;ResultSet rs=s.executeQuery(sql);while(rs.next()System.out.println();System.out.print(rs.getInt(1)+);System.out.println(rs.getInt(5);catch(SQLException ce)System.out.println(ce);public static void main(String args)CourseAppl retObj=new CourseAppl();retObj.display();2024/7/1231使用结果集 3-1 ResultSet ResultSet 对象完全依赖于对象完全依赖于 Statement Statement 对象和对象和 Connection Connection 对象对象每次执行每次执行 SQL SQL 语句时,都会用新的结果重写结果集语句时,都会用新的结果重写结果集当相关的当相关的 Statement Statement 关闭时,关闭时,ResultSet ResultSet 对象会自动对象会自动关闭关闭Next()Next()get()get()此方法将光标从当前位置下移一行 从 ResultSet 对象返回数据 2024/7/1232使用结果集 3-2 演示对当前行的处理演示对当前行的处理使用使用 next()next()方法时,记录是按顺序处理的方法时,记录是按顺序处理的必须按照数据返回的顺序处理每行中的数据必须按照数据返回的顺序处理每行中的数据ResultSet rset=stmt.getResultSet();while(rset.next()String dept_name=rset.getString(1);2024/7/1233使用结果集 3-3 演示对当前列的处理演示对当前列的处理使用使用 get()get()方法可以直接访问列方法可以直接访问列Statement stmt=con.createStatement();Stmt.executeQuery(Select emp_id,fname from Employee);ResultSet rset=stmt.getResultSet();while(rset.next()String ename=rset.getString(fname);System.out.println(ename);Statement stmt=con.createStatement();stmt.executeQuery(Select emp_id,fname from Employee);ResultSet rset=stmt.getResultSet();while(rset.next()String employeeid=rset.getString(1);以下代码显示值以下代码显示值 1 1 被作为参数传递给被作为参数传递给 getString()getString()方法,这实际上指列方法,这实际上指列 emp_id emp_id 的索引的索引2024/7/1234结果集的类型可滚动不可滚动光标仅向前移动光标可前后移动,也可移动至与当前位置相对的某一行如果对数据库做了更改,则新值是可见的结果集结果集 TYPE_SCROLL_INSENSITIVE TYPE_SCROLL_SENSITIVE TYPE_FORWARD_ONLY 2024/7/1235总结JDBCJDBC概念的理解概念的理解使用使用 Class.forName()Class.forName()方法可以将驱动程序加载到方法可以将驱动程序加载到 Java Java 解释器中解释器中;使用使用 DriverManager DriverManager 类的类的 getConnection()getConnection()方法和方法和 Connection Connection 对象的对象的 createStatement()createStatement()方法可建立方法可建立连接连接;最后,使用最后,使用 executeQuery()executeQuery()或或 executeUpdate()executeUpdate()方方法通过法通过 Statement Statement 实例构建并执行实例构建并执行 SQL SQL 语句语句;PreparedStatement PreparedStatement 接口允许创建预编译的接口允许创建预编译的 SQL SQL 语句,语句,并使得在后续阶段可以指定语句的参数并使得在后续阶段可以指定语句的参数;结果集可以是可滚动的,也可以是不可滚动的结果集可以是可滚动的,也可以是不可滚动的.2024/7/1236p经常不断地学习,你就什么都知道。你知道得越多,你就越有力量pStudyConstantly,AndYouWillKnowEverything.TheMoreYouKnow,TheMorePowerfulYouWillBe写在最后谢谢你的到来学习并没有结束,希望大家继续努力Learning Is Not Over.I Hope You Will Continue To Work Hard演讲人:XXXXXX 时 间:XX年XX月XX日
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!