第12章 JAVA数据库编程_第1页
第12章 JAVA数据库编程_第2页
第12章 JAVA数据库编程_第3页
第12章 JAVA数据库编程_第4页
第12章 JAVA数据库编程_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2023/1/151第12章JAVA数据库操作了解JDBC的概念及必要性理解JDBC程序的结构运用JDBC进行数据库编程2023/1/152JDBCJDBC(Java数据库连接)(sun公司提供)Java应用程序编程接口Java应用程序数据库插入修改删除查询2023/1/153JDBC体系结构

应用程序DBDBDB应用程序应用程序JDBCAPIJDBCDriverManager数据库驱动JDBC2023/1/154JDBC体系结构2

应用层DriverStatementResultSetConnection各接口驱动层2023/1/155JDBCAPI-DriverManagerJDBC的管理层,用于把Java应用程序连接到正确的JDBC驱动程序上,然后即退出。加载驱动程序时自动调用其registerDriver方法Class.forName("com.mysql.jdbc.Driver");System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");建立连接:通过DriverManager.getConnection(URL)方法提供的URL检查已注册的驱动程序,建立与数据库的连接。2023/1/156JDBCAPI-ConnectionConnection对象代表与数据库的连接获取连接的方法:DriverManager.getConnection(URL,user,pwd)JDBCURL的标准语法如下所示:jdbc:<子协议>:<子名称>。例如:Stringurl="jdbc:mysql://localhost:3306/testdb“Stringurl=“jdbc:odbc:testDS”2023/1/157JDBCAPI-ConnectionDriverManager类存有已注册的Driver类的清单。当调用方法getConnection时,它将检查清单中的每个驱动程序,直到找到可与URL中指定的数据库进行连接的驱动程序为止。Driver的方法connect使用这个URL来建立实际的连接。2023/1/158JDBCAPI-Statement(1)Statement用于发送简单的SQL语句通过CONNECTION对象的createStatement方法创建PreparedStatement用于发送一个或多个输入参数的SQL语句通过CONNECTION对象的prepareStatement方法创建继承于Statement,并提供一组方法设置输入参数CallableStatement用于处理SQL存储过程通过CONNECTION对象的prepareCall方法创建继承于PreparedStatement,并提供一组方法处理输入、输出参数2023/1/159JDBCAPI-Statement(2)执行语句方法举例:StatementPreparedStatementCallableStatementexecuteQuery()executeUpdate()execute()Connectioncon= DriverManager.getConnection(url,"sunny","");Statementstmt=con.createStatement(“select*…");ResultSetrs= stmt.executeQuery("SELECTa,b,cFROMTable2");2023/1/1510JDBCAPI-ResultSet(1)ResultSet包含符合SQL语句中条件的所有行集它通过一套get<type>方法访问当前行中不同列next方法用于移动到ResultSet中的下一行,使下一行成为当前行。2023/1/1511JDBCAPI-ResultSet(2)结果集一般是一个表,其中有查询所返回的列标题及相应的值如果查询语句为SELECTstuNo,stuName,stuDeptfromStudent,则结果集如下:stuNostuNamestuDept__________________06001张一材料06002张二计算机06003张三外国语………2023/1/1512JDBCAPI-SqlExceptionSQLException…try{

此处为相关数据库操作;}catch(SQLExceptionex){System.out.println(“已捕获一个SQLException异常!”);System.out.println(“消息:“+ex.getMessage());System.out.println(“错误代码:“+ex.getErrorCode());} …2023/1/1513JDBC程序访问数据库的步骤开始导入java.sql包加载并注册驱动程序创建一个Connection对象创建一个Statement对象执行语句关闭ResultSet对象关闭Statement对象关闭连接结束使用ResultSet对象2023/1/1514JDBC程序访问数据库的步骤

2-1importjava.sql.SQLException;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;importjava.sql.ResultSet;导入java.sql包2023/1/1515JDBC程序访问数据库的步骤

2-2假设当前应用系统使用MYSQL数据库,首先将该数据库驱动程序(mysql-connector-java-5.1.5-bin.jar)放在当前系统路径下;加载驱动方法:方法一System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver");方法二try{Class.forName("com.mysql.jdbc.Driver");

}catch(ClassNotFoundExceptionce){System.out.println(ce);}加载并注册驱动程序2023/1/1516JDBC程序访问数据库的步骤

2-2装载JDBC-ODBC驱动程序(不需要注册)Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);装载并注册SqlServer驱动程序Class.forName(“com.microsoft.jdbc.sqlserver.SqlServerDriver”);DriverManager.registerDriver(newcom.microsoft.jdbc.sqlserver.SqlServerDriver());装载并注册Oracle驱动程序Class.forName(“Oracle.jdbc.driver.OracleDriver”);DriverManager.registerDriver(newOracle.jdbc.driver.OracleDriver());加载并注册驱动程序2023/1/1517JDBC程序访问数据库的步骤

2-3程序操作数据库之前必须先建立与数据库的连接连接数据库必须提供的信息有:数据库服务器在网络中的IP及端口号该数据库服务器上某一数据库名称数据库用户名与口令等信息参考代码(以MYSQL数据库为例)Stringurl="jdbc:mysql://localhost:3306/testdb"DriverManager.getConnection(url,"root","root");创建一个Connection对象2023/1/1518JDBC程序访问数据库的步骤

2-3常用数据库的JDBCURL形式:JDBC-ODBCDriverStringurl=“jdbc:odbc:dsName”DriverManager.getConnection(url)Oracle数据库Stringurl=“jdbc:oracle:thin@localhost:1512:sid”DriverManager.getConnection(url,”user”,”pwd”)SQLServer数据库Stringurl=“jdbc:microsoft:sqlserver://localhost:1433: DatabaseName=pubs”DriverManager.getConnection(url,”user”,”pwd”)创建一个Connection对象2023/1/1519JDBC程序访问数据库的步骤

2-4,5Statementstmt=conn.createStatement();Stringsql=“selectid,name,title,pricefrombooks wherename=“Tom”andprice=40”;ResultSetrs=stmt.executeQuery(sql);创建一个Statement对象执行SQL语句2023/1/1520JDBC程序访问数据库的步骤

2-6访问ResultSet中的记录集While(rs.next()){ Stringcol1=rs.getString(1); Stringcol2=rs.getString(“name”); Stringcol3=rs.getString(“3”); floatcol4=rs.getFloat(“price”); System.out.println(“id=“+col1+” name=“+col2+“title=“+col3+”price=“+col4);}使用ResultSet对象2023/1/1521JDBC程序访问数据库的步骤

2-7依次关闭ResultSet、Statement和Connection对象

rs.close(); stmt.close(); con.close();释放资源2023/1/1522应用实例-1已知MYSQL数据库服务器IP地址为:192.168.1.10,数据库名testdb,用户名为root,口令为root,其中books表结构如下:

打印出该表中所有的记录,然后添加一条记录,信息如下(‘999’,’Tom’,’jdbcBible’,49.8),再将新增的记录删除。columnidnametitlepricetypevarcharvarcharvarcharfloat2023/1/1523publicstaticvoidmain(String[]args){try{Class.forName("com.mysql.jdbc.Driver

");}catch(ClassNotFoundExceptionce){System.out.println(ce);}try{Stringurl="jdbc:mysql://192.168.1.10:3306/testdb

";Connectioncon=DriverManager.getConnection(url,”root”,”root”);Statementstmt=con.createStatement();Stringsql=

"selectid,name,title,pricefrombooks"

;ResultSetrs=s.executeQuery(sql)while(rs.next()){

Stringcol1=rs.getString(1); Stringcol2=rs.getString(“name”); Stringcol3=rs.getString(“3”); floatcol4=rs.getFloat(“price”); System.out.println(“id=“+col1+”name=“+col2+ “title=“+col3+”price=“+col4);

}

2023/1/1524sql="insertintobooks(id,name,title,price)VALUES(‘999’,’Tom’,’jdbc Bible’,49.8)frombooks"

stmt.executeUpdate(sql);stmt.executeUpdate(“deletefrombookswhereid=‘999’”);rs.close;stmt.close();con.close();}catch(SQLExceptionce){System.out.println(ce);}//endtry}//endmain2023/1/1525JDBC查询2-1SQL查询字符串executeQuery()方法作为参数传递ResultSet返回查询数据SELECTname,email,phoneFROMcolleagues;使用SQL语句,查询可编写为:Stringstr="SELECTemp_id,lname,fnameFROMcolleagues";Statementstmt=con.createStatement();ResultSetrset=stmt.executeQuery(str);使用JDBC编写此查询,则代码为:Statement接口2023/1/1526JDBC查询2-2演示SQL中sum()方法的用法/***Jdbctest2*/importjava.sql.SQLException;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;importjava.sql.ResultSet;/**这个类演示SQL中sum()方法的用法**/classJdbctest2{/**构造方法*/protectedJdbctest2(){}2023/1/1527JDBC查询2-2演示SQL中sum()方法的用法/**这是main方法*/publicstaticvoidmain(String[]args){try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundExceptionce){System.out.println(ce);}try{Stringurl="jdbc:odbc:test";Connectioncon=DriverManager.getConnection(url);Statements=con.createStatement();ResultSetrs=s.executeQuery("selecthiredate,sum(salary)fromfriendsgroupbyhiredate");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(SQLExceptionce){System.out.println(ce);}

}}2023/1/1528演示:示例3它演示SQL中INSERT语句的用法/***Jdbctest3*/importjava.sql.SQLException;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;importjava.sql.ResultSet;/**这个类演示INSERT语句的用法.*@version1.0,2005年8月26日*@authorBen*/classJdbctest3{/**构造方法*/protectedJdbctest3(){}JDBC插入数据实现/**这是main方法*/publicstaticvoidmain(String[]args){try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundExceptionce){System.out.println(ce);}try{Stringurl="jdbc:odbc:test";Stringstr="INSERTINTO“+friends(name,address,salary)“

+"VALUES(‘朱八‘,’深圳‘,25690)";Connectioncon=DriverManager.getConnection(url);Statements=con.createStatement();introwcount=s.executeUpdate(str);Stringstr1="selectname,sum(salary)“+fromfriends"+"groupbyname";

ResultSetrs=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(SQLExceptionce){System.out.println(ce);}}}2023/1/1529JDBC删除和修改实现它演示SQL中各种命令的用法演示:示例4/***Jdbc2*/importjava.sql.SQLException;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;/**这这个类演示

SQL

中命令的用法.*@version1.0,2005年8月26日

*@authorBen*/classJdbc2{/**构造方法.*/protectedJdbc2(){}publicstaticvoidmain(String[]args){Connectioncon;Statementstmt;Stringurl;Stringsql;try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundExceptionce){System.out.println(ce);}try{url="jdbc:odbc:test";con=DriverManager.getConnection(url);sql="Deletefromfriendswherertrim(name)like\'张三\';";System.out.println("");stmt=con.createStatement();

stmt.executeUpdate(sql);System.out.println("张三的记录已删除“);stmt.close();con.close();con=DriverManager.getConnection(url);sql="Updatefriendssetaddress=\'青岛\'where“+"rtrim(name)like\'李四\';";System.out.println("");stmt=con.createStatement();stmt.executeUpdate(sql);stmt.close();con.close();System.out.println("李四的记录已更新");

}catch(SQLExceptionce){System.out.println(ce);}}}2023/1/1530PreparedStatement接口

3-1

PreparedStatement接口(预编译的SQL语句)PreparedStatement

用于提高运行时效率执行PreparedStatement对象比执行Statement对象快Statement接口2023/1/1531PreparedStatement接口

3-2

它演示了PreparedStatement的用法演示:示例5/**©*CourseAppl*/importjava.sql.SQLException;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;importjava.sql.ResultSet;importjava.sql.PreparedStatement;/**这个类演示SQL中PreparedStatement的用法*/classCourseAppl{privateConnectioncon;privateStringurl;privateStringserverName;privateStringportNumber;privateStringdatabaseName;privateStringuserName;privateStringpassword;privateStringsql;CourseAppl(){url="jdbc:microsoft:sqlserver://";serverName=“localhost";portNumber="1433";databaseName=“test";userName=“sa";password=“sa";}privateStringgetConnectionUrl(){returnurl+serverName+":"+portNumber+";databaseName="+databaseName+";";}privatejava.sql.ConnectiongetConnection(){try{Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");con=DriverManager.getConnection(getConnectionUrl(),userName,password);if(con!=null){System.out.println("连接成功!");}}catch(Exceptione){e.printStackTrace();System.out.println("getConnection()内的错误跟踪:"+e.getMessage());}returncon;}publicvoiddisplay(){try{con=getConnection();PreparedStatementpstmt=con.prepareStatement("UPDATEfriendsSETsalary=?WHEREnamelike?");pstmt.setInt(1,10000);pstmt.setString(2,"李四");pstmt.executeUpdate();System.out.println(“记录已更新!");Statements=con.createStatement();Stringsql="SELECT*FROMfriends";ResultSetrs=s.executeQuery(sql);while(rs.next()){System.out.println("");System.out.print(rs.getInt(1)+"");

System.out.println(rs.getInt(5));}}catch(SQLExceptionce){System.out.println(ce);}}publicstaticvoidmain(String[]args){CourseApplretObj=newCourseAppl();retObj.display();}}2023/1/1532使用结果集

3-1

ResultSet对象完全依赖于Statement对象和Connection对象每次执行SQL语句时,都会用新的结果重写结果集当相关的Statement关闭时,Resu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论