第5章JDBC连接数据库JDBC(JavaDataBaseConnectivity,Java数据库连接)是一系列与数据库访问有关的Java类和接口组成的、支持在Java程序中执行SQL语句的应用程序设计接口API。目的是实现Java应用程序对不同类型的数据库进行访问。JDBC基本概念JDBC访问数据库层次结构JDBC主要完成下列三项任务:(1)同一个数据库建立连接;(2)向数据库发送SQL语句;(3)处理数据库返回的结果。(1)驱动程序管理器DrvierManager用来加载驱动程序,管理应用程序和已注册的驱动程序的连接。(2)连接Connection封装了应用程序与数据库之间的连接信息。(3)语句Statement用来在数据库中执行一条SQL语句。(4)结果集ResultSet负责保存执行查询后返回的数据。驱动程序管理器DrvierManagerjava.sql.DriverManager处理驱动程序的加载,该工作由Class类的静态方法forName完成,它加载相应的驱动程序类,并创建该类的一个实例连接Connectionjava.sql.Connection建立新数据库连接Class.forName(com.mysql.jdbc.Driver);Connectioncon=DriverManager.getConnection(URL)或者Connectioncon=DriverManager.getConnection(URL,UserName,Password)MySQL:StringDriver=com.mysql.jdbc.Driver;//驱动程序StringURL=jdbc:mysql://localhost:3306/db_name;//连接的URL,db_name为数据库名StringUsername=username;//用户名StringPassword=password;//密码Class.forName(Driver);Connectioncon=DriverManager.getConnection(URL,Username,Password);MicrosoftSQLServer驱动:StringDriver=com.microsoft.jdbc.sqlserver.SQLServerDriver;StringURL=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=db_name;StringUsername=username;StringPassword=password;Class.forName(Driver);Connectioncon=DriverManager.getConnection(URL,UserName,Password);URL地址:就是你的JAVA程序访问数据库时,跟指定的数据库进行连接时用的地址。包括了该数据库的类型,端口以及登入数据库的用户名及密码等。不同数据库的JDBCURL写法MySQL数据库:jdbc:mysql://机器名:端口名/数据库名Oracle数据库:jdbc:oracle:thin@机器名:端口名:数据库名SQLServer数据库:jdbc:microsoft:sqlserver://机器名:端口名;DatabaseName=数据库名%@pagecontentType=text/html;charset=gb2312%%@pageimport=java.sql.*%%try{StringDriver=com.mysql.jdbc.Driver;StringURL=jdbc:mysql://localhost:3306/test;StringUsername=root;StringPassword=123456;Class.forName(Driver);Connectioncon=DriverManager.getConnection(URL,Username,Password);%连接mysql数据库成功!%}catch(java.sql.SQLExceptione){out.println(e.toString());}%Mysql数据库连接测试Statementjava.sql.Statement执行操作数据库的过程是:通过Connection连接对象获取Statement对象,再通过Statement对象执行操作存在三种对象Statement创建Statement对象:通过Connection对象createStatement()方法来创建Class.forName(com.mysql.jdbc.Driver);Connectioncon=DriverManager.getConnection(URL);Statementstmt=con.createStatement();PreparedStatement:继承了Statement接口,预编译SQL语句,然后写入缓存,因此在执行相同的数据库操作时(查询等),不需要对SQL进行再编译,主要为了提高程序效率Class.forName(com.mysql.jdbc.Driver);Connectioncon=DriverManager.getConnection(URL);//Statementstmt=con.createStatement();Stringsql=“select*fromuserwhereid=?”PreparedStatementpstmt=con.preparedStatement(sql);Pstmt.setString(1,“001”);//为id参数赋值Stringsql=“select*fromuserwherename=?andage?”PreparedStatementpstmt=con.preparedStatement(sql);Pstmt.setString(1,“Jack”);Pstmt.setString(2,“20”);只执行一次的SQL语句选择Statement如果SQL语句被多次执行选用PreparedStatementCallableStatement继承了PreparedStatement接口,用于存储过程结果集(ResultSet)是存储查询结果的对象,包含符合SQL语句条件的所有行具有存储的功能,同时还具有操纵数据的功能Statement提供的执行SQL语句的常用方法:方法1:executeQuery():进行数据库查询,返回结果集用于产生单个ResultSet的语句。例如SELECT语句Stringquery=“selectname,pricefromStocks”;ResultSetrest=stmt.executeQuery(query);利用Statement对象操作结果集(ResultSet)Class.forName(com.mysql.jdbc.Driver);Connectioncon=DriverManager.getConnection(URL);Statementstmt=con.createStatement();ResultSetrest=stmt.executeQuery(query);操作ResultSet对象---行/列通过一套get方法提供了对rest结果行中数据的访问,即使用getXXX方法检索数据getInt()用于检索整型值//获取当前行中某一列的值,返回一个整型值getString()用于检索字符串值publicintgetInt(intcolumnIndex)publicintgetInt(StringcolumnName)publicStringgetString(intcolumnIndex)publicStringgetString(StringcolumnName)booleanfirst()//移动游标到ResultSet结果集的第一行booleanlast()booleannext()//将游标移动到结果集的下一行booleanprevious()//将游标移动到结果集的上一行voidclose()//关闭结果集booleanwasNull()//检测结果集是否为空方法getXXX()提供了获取当前行中某列值的途径可按任何次序获取列值,列是从左至右编号的,并且从列1开始可用列名或列号标识要从中获取数据的列假设ResultSet对象rest的第二列名为title,并将值存储为字符串:Strings=rest.getString(“title”);Strings=rest.getString(2);getXXX()方法的输入的列名不区分大小写顺序查询example_1.jsp:%@pagecontentType=text/html;charset=gb2312%%@pageimport=java.sql.*%htmlbody%try{StringDriver=com.mysql.jdbc.Driver;StringURL=jdbc:mysql://localhost:3306/test;StringUsername=root;StringPassword=123456;Class.forName(Driver);Connectioncon=DriverManager.getConnection(URL,Username,Password);StatementsqlStmt=con.createStatement();StringsqlQuery=select学号,姓名,总成绩fromstudent;ResultSetsqlRest=sqlStmt.executeQuery(sqlQuery);%center学生信息表/centertableborder=1width=100%bordercolorlight=#CC99FFcellpadding=2bordercolordark=#FFFFFFcellspacing=0trtdalign=“center”学号/tdtdalign=“center”姓名/tdtdalign=“center”总成绩/td/tr%while(sqlRest.next()){//取得下一条记录%tr!--显示记录--td%=sqlRest.getString(学号)%/tdtd%=sqlRest.getString(姓名)%/tdtd%=sqlRest.getInt(总成绩)%/td/tr%}%/table%//关闭结果集对象sqlRest.close();//关闭语句对象sqlStmt.close();//关闭数据库连接con.close();}catch(java.sql.SQLExceptione){out.println(e.toString());}%/body/html随机查询example_2.jsp:%@pagecontentType=text/html;charset=gb2312%%@pageimport=java.sql.*%htmlbody%try{StringDriver=com.mysql.jdbc.Driver;StringURL=jdbc:mysql://localhost:3306/test;StringUsername=root;StringPassword=123456;Class.forName(Driver);Connectioncon=DriverManager.getConnection(URL,Usern