收藏 分享(赏)

jdbc连接数据库.ppt

上传人:hskm5268 文档编号:7356692 上传时间:2019-05-16 格式:PPT 页数:24 大小:5.70MB
下载 相关 举报
jdbc连接数据库.ppt_第1页
第1页 / 共24页
jdbc连接数据库.ppt_第2页
第2页 / 共24页
jdbc连接数据库.ppt_第3页
第3页 / 共24页
jdbc连接数据库.ppt_第4页
第4页 / 共24页
jdbc连接数据库.ppt_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、,访问数据库,掌握JDBC的工作原理 掌握如何获取数据库连接 掌握如何对数据进行增、删、改、查,本章目标,为什么需要JDBC,JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力,Java应用程序,JDBC,JDBC,JSP/Servlet,客户端,数据库服务器,应用服务器,数据库服务器,客户端,JDBC程序的工作原理,JDBC API 提供者:sun公司 内容:供程序员调用的接口与类,集成在java.sql和javax.sql包中,如: DriverManager类 Connection接口 Statement接口 ResultSet接口 DriverManager 提供者:

2、sun公司 作用:载入各种不同的JDBC驱动 JDBC 驱动 提供者:数据库厂商 作用:负责连接各种不同的数据库,Sql Server,Oracle,JDBC API,JDBC Driver Manager,JDBC 驱动,JDBC 驱动,Java 应用程序,JDBC API,JDBC API可做三件事:与数据库建立连接、执行SQL 语句、处理结果,Connection,DriverManager,Statement,ResultSet,DriverManager :依据数据库的不同,管理JDBC驱动Connection :负责连接数据库并担任传送数据的任务 Statement :由 Conn

3、ection 产生、负责执行SQL语句ResultSet:负责保存Statement执行后所产生的查询结果,客户端,数据库服务器,1,2,3,4,JDBC程序的工作模板,try Class.forName(JDBC驱动类); catch (ClassNotFoundException e) System.out.println(“无法找到驱动类“); try Connection con=DriverManager.getConnection(JDBC URL,数据库用户名,密码);Statement stmt = con.createStatement();ResultSet rs = st

4、mt.executeQuery(“SELECT a, b, c FROM Table1“);while (rs.next() int x = rs.getInt(“a“);String s = rs.getString(“b“);float f = rs.getFloat(“c“);con.close(); catch (SQLException e) e.printStackTrace(); ,获得数据库连接,发送Sql语句,处理结果,注册JDBC驱动,JDBC URL用来标识数据库,必须处理的异常,释放资源,必须处理的异常,JDBC驱动 5-1,JDBC驱动由数据库厂商提供 在个人开发与测

5、试中,可以使用JDBC-ODBC桥连方式 在生产型开发中,推荐使用纯Java驱动方式,DB Server,DB Server,JDBC API,JDBC Driver Manager,纯Java 驱动,JDBCODBC桥,Java 应用程序,ODBC,JDBC驱动 5-2,桥连 将对JDBC API的调用,转换为对另一组数据库连接API的调用 优点:可以访问所有ODBC可以访问的数据库 缺点:执行效率低、功能不够强大,JDBC-ODBC桥,Java 应用程序,JDBC API,ODBC API,ODBC层,DB Server,JDBC驱动 5-3,使用JDBC-ODBC进行桥连 1、在控制面板

6、ODBC数据源系统DSN中配置数据源 2、编程,通过桥连方式与数据库建立连接,-语法-Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); Connection con =DriverManager.getConnection(“jdbc:odbc:news“,“sa“,“sa“);,JDBC-ODBC桥驱动类的完全限定类名,数据源名称,演示:配置ODBC数据源,JDBC驱动 5-4,纯Java驱动 由JDBC驱动直接访问数据库 优点:100% Java,快又可跨平台 缺点:访问不同的数据库需要下载专用的JDBC驱动,JDBC 驱动,Java 应用程序,

7、JDBC API,DB Server,JDBC驱动 5-5,使用纯Java驱动方式进行直连 1、下载数据库厂商提供的驱动程序包 2、将驱动程序包引入工程中 3、编程,通过纯Java驱动方式与数据库建立连接,-语法-String URL=“jdbc:microsoft:sqlserver:/localhost:1433; DatabaseName=news“;Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver“); Connection con = DriverManager.getConnection(URL,“sa“,“sa

8、“);,sql server数据库驱动类的完全限定类名,演示:在工程中引入JDBC驱动程序包,数据库名称,小结 1,JDBC桥连与纯Java驱动两种方式的优缺点分别是什么?JDBC URL的作用是什么?,创建数据表:FirstLevelTitle,JDBC应用,要求对新闻标题进行管理: 1、新闻标题存储在Sql Server 2000中 2、通过JDBC对新闻标题进行增、删、改、查操作,操作步骤,使用Statement插入数据,使用PreparedStatement增、删、改、查数据,1,2,使用Statement插入数据 2-1,使用桥连方式向FirstLevelTitle表中插入一条记录,

9、代码片断 public static void main(String args) Connection con = null; Statement statement = null; try String strSql = “insert into FirstLevelTitle values(1,军事,网管,getdate()“; try Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); catch (ClassNotFoundException e) System.out.println(“无法找到驱动类“); con = DriverMana

10、ger.getConnection(“jdbc:odbc:news“,“sa“,“sa“); statement = con.createStatement(); statement.executeUpdate(strSql); catch (SQLException sqlE) sqlE.printStackTrace(); finally closeStatement(statement); closeConnection(con); ,建立连接,执行sql语句,数据库连接使用完毕,及时释放,载入JDBC-ODBC桥驱动类,异常处理,异常处理,完整代码实现,使用Statement插入数据

11、2-2,使用纯Java驱动方式向FirstLevelTitle表中 插入一条记录,代码片断 public static void main(String args) Connection con = null; Statement statement = null; try String strSql = “insert into FirstLevelTitle values(1,军事,网管,getdate()“; try Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver“); catch (ClassNotFoundExc

12、eption e) System.out.println(“无法找到驱动类“); con = DriverManager.getConnection(“jdbc:microsoft:sqlserver:/localhost:1433;“+“DatabaseName=news“,“sa“,“sa“); statement = con.createStatement(); statement.executeUpdate(strSql); catch (SQLException sqlE) sqlE.printStackTrace(); finally /释放连接 ,载入sql server数据库驱

13、动类,建立连接,执行sql语句,完整代码实现,小结 2,在使用纯Java驱动方式进行数据库连接时,如果程序在运行时抛出异常: java.sql.SQLException: No suitable driver found for jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=news 那么出错的原因是什么?如何解决?请单独建立一个类ConnectionManager,专门负责建立数据库连接、以及关闭连接,并思考这样做带来的好处是什么,找不到合适的驱动类,原因:没有把数据库驱动包引入工程,好处在于:既便于管理、又可以提高代码的复用性,

14、完整代码实现,PreparedStatement,PreparedStatement接口 (预编译的 SQL 语句),Statement 接口,当 SQL 语句将运行多次时,尽量使用PreparedStatement,以便提高运行效率,PreparedStatement 接口继承 Statement接口 PreparedStatement比普通的Statement对象使用起来更加灵活,更有效率,使用PreparedStatement插入数据,public class NewsFirstTitleDB2 public static void main(String args) Connectio

15、n con = null; PreparedStatement pStatement = null; try SimpleDateFormat hmFromat = new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss“); con = ConnectionManager.getConnection(); String strSql = “insert into FirstLevelTitle values(?,?,?,?)“; pStatement = con.prepareStatement(strSql); pStatement.setInt(1, 1);

16、pStatement.setString(2, “军事“); pStatement.setString(3, “管理员“); pStatement.setString(4, hmFromat.format(new Date(); pStatement.executeUpdate(); catch (SQLException sqlE) sqlE.printStackTrace(); finally ConnectionManager.closeStatement(pStatement); ConnectionManager.closeConnection(con); ,参数化的查询语句,设置每

17、个 ? 参数的值,列号从1开始,执行sql语句,使用PreparedStatement删除数据,public class NewsFirstTitleDB3 public static void main(String args) Connection con = null;PreparedStatement pStatement = null;try con = ConnectionManager.getConnection(); String strSql = “delete from FirstLevelTitle where TitleName = ?“; pStatement = c

18、on.prepareStatement(strSql); pStatement.setString(1, “军事“); int row = pStatement.executeUpdate(); System.out.println(“成功删除了“+row+“行数据!“); catch (SQLException sqlE) sqlE.printStackTrace(); finally ConnectionManager.closeStatement(pStatement); ConnectionManager.closeConnection(con); ,返回删除记录的行数,使用Prepa

19、redStatement更新数据,public class NewsFirstTitleDB4 public static void main(String args) Connection con = null; PreparedStatement pStatement = null; try con = ConnectionManager.getConnection(); String strSql = “update FirstLevelTitle set Creator = ? where Id = ?“; pStatement = con.prepareStatement(strSq

20、l); pStatement.setString(1, “编辑“); pStatement.setInt(2, 1); int row = pStatement.executeUpdate(); System.out.println(“成功更新了“+row+“行数据!“); catch (SQLException sqlE) sqlE.printStackTrace(); finally ConnectionManager.closeStatement(pStatement); ConnectionManager.closeConnection(con); ,返回更新记录的行数,小结 3,使用

21、PreparedStatement语句执行如下操作: 删除表FirstLevelTitle中所有Id小于10的记录,并在控制台输出删除记录的行数,完整代码实现,使用PreparedStatement查询数据 2-1,public class NewsFirstTitleDB5 public static void main(String args) int id = 0; Connection con = null; PreparedStatement pstmt = null; ResultSet resSet = null; try con = ConnectionManager.getC

22、onnection(); String sqlStr = “select max(id) from FirstLevelTitle “; pstmt = con.prepareStatement(sqlStr); resSet = pstmt.executeQuery(); if (resSet.next() id = resSet.getInt(1); catch (Exception e) e.printStackTrace(); finally ConnectionManager.closeResultSet(resSet); ConnectionManager.closeStateme

23、nt(pstmt); ConnectionManager.closeConnection(con); System.out.println(“新的一级新闻标题的Id为:“ + (id + 1); ,查询新闻一级标题的Id的最大值,关闭结果集、语句、以及连接,对新闻一级标题Id的最大值加一,作为新的一级标题的Id,获取数据,列号从1开始,返回结果集,从数据库中取出所有的新闻一级标题,代码片断 public static List getAllFirstLevelTitleList() /省略部分变量声明语句 ArrayList list = new ArrayList(); try dbConn

24、ection = ConnectionManager.getConnection(); String strSql = “select * from FirstLevelTitle order by CreateTime desc“; pStatement = dbConnection.prepareStatement(strSql); res = pStatement.executeQuery(); while (res.next() int id = res.getInt(“id“); String title = res.getString(“TitleName“); String cr

25、eator = res.getString(“Creator“); Date time = res.getDate (“CreateTime”); FirstLevelTitle fTitle = new FirstLevelTitle(id, title,creator, time); list.add(fTitle); /省略catch、finally子句 return list; ,使用PreparedStatement查询数据 2-2,查询新闻一级标题,创建标题对象,并添加入ArrayList中,返回结果集,完整代码实现,总结,使用PreparedStatement语句执行如下操作: 取出表FirstLevelTitle中Id的最大值 向表FirstLevelTitle中插入一行新记录,其中Id值为原Id最大值加一,完整代码实现,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报