第四章 JDBC技术.docx
《第四章 JDBC技术.docx》由会员分享,可在线阅读,更多相关《第四章 JDBC技术.docx(15页珍藏版)》请在冰豆网上搜索。
第四章JDBC技术
第4章JDBC技术
1.建数据库
2.表
3.设置登录名(关系表)
4.用登录名连接数据库
5.在JSP中操作
(1)新建工程后,把sqljdbc4.jar文件放到web-inf中的lib中。
(2)在sqljdbc4.jar点右键,选择add....
(3)按jsp的方法去做网页。
在页面开头写:
<%@pagelanguage="java"import="java.sql.*"contentType="text/html;charset=utf-8"
pageEncoding="utf-8"%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:
//www.w3.org/TR/html4/loose.dtd">
在body的下面加载数据驱动
<%Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
Stringurl="jdbc:
sqlserver:
//127.0.0.1:
1433;DatabaseName=db";//db表示你的数据库名
Stringusername="sa2";
//刚才新建SQL的用户名
Stringpassword="sa2";
//刚才新建SQL的/密码
%>
连接
<%
Connectionconn=DriverManager.getConnection(url,username,password);
Statementstmt=conn.createStatement();
%>
后面就可以写sql语句
如delete,insert,update这些语句用executeUpdate(Stringsql)来执行,这个语句的返回值为int
select语句要用executeQuery(Stringsql)来执行,他的返回值为ResultSet
输出记录要用while,getString(field的列号)
完毕后关闭所有对象executeUpdate();
⏹理解JDBC应用程序编程接口;
⏹掌握使用纯Java驱动程序操作数据库的编程方法;
⏹掌握对数据的增加、删除、修改和查询编程技术;
⏹查询记录的分页面显示;
⏹数据库连接池编程技术。
ToLearn
⏹1JDBC概述
⏹2JDBC应用程序接口简介
⏹3利用JDBC访问数据库
⏹4数据库操作案例
例子:
<%@pagelanguage="java"import="java.sql.*"contentType="text/html;charset=gb2312"
pageEncoding="gb2312"%>
数据库连接<%Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
Stringurl="jdbc:
sqlserver:
//127.0.0.1:
1433;DatabaseName=db";
//stu为你的数据库的
Stringusername="sa2";
//刚才新建MSSQL的用户名
Stringpassword="sa2";
//密码
Connectionconn=DriverManager.getConnection(url,username,password);
Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
Stringsql2="insertintoperson(id,name,age,sex)values(10,'贾礼平',30,'男')";
intrs1=stmt.executeUpdate(sql2);
Stringsql="select*fromperson";
//SC数据库的一个表名
ResultSetrs=stmt.executeQuery(sql);
while(rs.next()){%>
您的第一个字段内容为:
<%=rs.getString
(1)%>
您的第二个字段内容为:
<%=rs.getString
(2)%>
您的第三个字段内容为:
<%=rs.getString(3)%>
您的第四个字段内容为:
<%=rs.getString(4)%>
<%}%>
<%out.println("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
结果
数据库与表
4.1什么是JDBC
JDBC是Java数据库连接(JavaDataBaseConnectivity)技术的简称,指Java同许多数据库之间连接的一种标准。
JDBC为数据库应用开发人员、数据库前台工具开发人员提供了一种标准的JavaAPI,使开发人员可以用纯Java语言编写完整的数据库应用程序。
JDBC最大特点:
独立于具体的关系数据库。
JDBCAPI定义了一些JAVA类接口,分别实现与数据库的连接(connections),发送SQL语句(SQLStatements),获取结果集(resultsets)以及其它数据库对象,从而使java程序能方便与数据库交互并处理所得的结果。
JDBC的API放在java.sql,javax.sql等中。
JAVA程序应用JDBC的步骤如下:
(1)注册加载一个数据库驱动程序;
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
(2)创建数据库连接(connection)
Stringurl="jdbc:
sqlserver:
//127.0.0.1:
1433;DatabaseName=reg1";
//db表示你的数据库名
Stringusername="zyc";
//刚才新建SQL的用户名
Stringpassword="zyc";
//刚才新建SQL的/密码
Connectionconn=DriverManager.getConnection(url,username,password);
(3)创建一个statement(发送)
Statementstmt=conn.createStatement();
(4)数据库执行sql语句
用sqlserver2008中的语句,定义为String
(5)用户程序处理sql语句的结果(包括结果集ResultSet)
Delete,update,insert返回值为int,excuteUpdate(sql)
Select返回值为ResultSet,executequery(sql)
(6)关闭连接(connection)等资源
先后次序,开始是select的对象其次是Statement对象,最后是connection对像。
简单地说,JDBC能够完成下列四件事:
●与一个数据库建立连接(connection)。
●向数据库发送SQL语句(statement)。
●处理数据库返回的结果(resultset)。
●关闭连接(close)
4.2JDBC的构成
1.JDBCAPI:
定义了标准接口,无论编写Mysql还是Oracle等数据库程序,这些接口是一致的。
2.JDBC数据库驱动程序
(1)DrvierManager类
提供管理一组JDBC驱动程序所需要的基本服务,可以跟踪可用的驱动程序,并在数据库和相应的驱动程序之间建立连接。
该类的常用方法有:
getConnection和forName方法。
publicstaticConnectiongetConnection(Stringurl,Stringuser,Stringpassword)
publicstaticClassforName(StringclassName)
对getConnection函数中的参数解释:
•url参数的命名方法:
url由3部分组成,各部分间用冒号分隔,如下所示:
•jdbc:
<子协议>:
<子名称>
•其中:
jdbc——协议名称。
在JDBCURL中的协议总是jdbc。
•<子协议>——驱动程序名或数据库连接机制的名称。
如
“odbc”,它是用于指定ODBC风格的数据库资源名称的URL而保留的。
•<子名称>——一种标识数据库的方法。
子名称可以依不同的子协议而变化。
它还可以有子名称的子名称(含有驱动程序编程人员所选的任何内部语法)。
使用子名称的目的
是为定位数据库提供足够的信息。
DrvierManager类的使用法:
(i)加载驱动
例如:
加载Mysql
Class.forName("com.mysql.jdbc.Driver");
加载sqlserver2008
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
(ii)与数据库建立连接
DriverManager.getConnection(Stringurl,Stringuser,Stringpassword);
Stringurl="jdbc:
sqlserver:
//127.0.0.1:
1433;DatabaseName=jlp1";
•
(2)Connection接口
Connection接口是java.sql包中最重要的接口。
Connection对象代表与数据库的连接。
一个应用程序可与单个数据库有一个或多个连接,或者可与许多数据库有连接。
数据库连接一旦建立,就可用来向它所涉及的数据库发送SQL语句。
Connection的作用是创建向数据库发送SQL语句的三个接口。
这三个接口分别是:
⏹Statement接口
⏹PreparedStatement接口
⏹CallableStatement接口。
Connection接口提供了多个同名但是参数不同的方法创建以上的三个接口。
例如:
publicStatementcreateStatement();
publicStatementcreateStatement(intresultSetType,intresultSetConcurrency);
其中:
参数resultSetType指返回记录集的类型
resultSetConcurrency指发送的SQL语句的权限
常用的一些方法:
booleanisClosed():
用于判断Connection对象是否已经被关闭;
voidcommit():
用于提交SQL语句,确认从上一次提交以来所进行的修改;
voidclose():
断开连接,释放资源;
voidrollback():
取消SQL语句,取消当前事务中进行的修改。
DatabaseMetaDatagetMetaData():
获取一个DatabaseMetaData对象。
(3)Statement接口
Statement接口对象创建完毕后,主要使用以下方法:
publicResultSetexecuteQuery(Stringsql):
用于执行产生单个结果集的语句,如select。
publicintexecuteUpdate(Stringsql):
用于执行insert、update或delete语句以及SQLDLL(数据定义)语句。
当执行insert、update或delete语句时将返回一个整数,用于表示受影响的行数,返回结果为0时表示操作失败;当执行SQLDLL语句,如createtable时,由于它不操作行,返回值将总为0。
publicbooleanexecute(Stringsql):
用于执行返回多个结果集、多个更新计数或二者结合的SQL语句。
publicint[]executeBatch():
用于执行几个SQL语句。
Statement接口使用addBatch(Stringsql)方法将几个SQL语句添加到一个语句块中,然后一同提交给数据库服务器,同时执行。
当执行多个SQLinsert语句时效率将很高,因为一次提交比多次提交要节省很多系统资源
voidclose():
释放Satement对象的数据库和JDBC资源。
PreparedStatement接口对象主要使用以下方法:
publicResultSetexecuteQuery(Stringsql):
使用Select命名对数据库进行查询。
publicintexecuteUpdate(Stringsql):
用于执行insert、update或delete语句对数据库进行新增、删除和修改操作。
voidsetXXX(intparameterIndex,XXXx):
设定XXX数据类型值给PreparedStatement类对象的IN参数。
CallableStatement接口
CallableStatement接口主要用于执行存储过程,其主要方法同Statement。
存储过程有两种参数,IN参数和OUT参数。
CallableStatement接口继承了PerpareedStatement接口的setXXX方法对IN参数赋值。
在CallableStatement接口中使用OUT参数,要做两件事情,一是对OUT参数进行类型注册,二是获取OUT参数的值。
CallableStatement提供了多种方法进行类型注册,下面是常用的两种:
registerOutParameter(StringparameterStringName,intsqlType);
registerOutParameter(Stringpar
(4)数据结果集——ResultSet接口
ResultSet接口用于获取执行SQL语句(或数据库存储过程)返回的结果。
它的实例对象是符合SQL语句条件的所有行。
常用的方法有:
–publicbooleannext():
用于数据库游标移动到结果集的下一行,使之成为当前行。
如果当前行为最后一行,返回值为false;否则,返回true。
–在定位到结果集中的某行后,就可以读取数据。
对于
不同数据类型,要使用不同的读取方法getXXX()。
JDBC提供了两种形式:
publicXXXgetXXX(StringcolumnName):
XXX代表任意的数据类型,参数columnName代表列名。
publicXXXgetXXX(intcolumnIndex):
XXX代表任意的数据类型,参数columnIndex代表列号。
ResultSetMetaDatagetMetaData():
获取结果集的列编号、类型和属性
privateStatementstmt=null;
privateResultSetrs=null;
privatePreparedStatementprpSql=null;
Class.forName("com.mysql.jdbc.Driver");
Connectionconn=
DriverManager.getConnection("jdbc:
mysql:
//localhost:
端口号/数据库名称",
"用户名","密码");
stmt=conn.createStatement();
rs=stmt.executeUpdate("select*fromdatabase");
while(rs.next())
{……
rs.getString
(1);
}
rs.close();
stmt.close();
conn.close();
SeeP81
总结:
使用JDBCAPI访问数据库的步骤
1.加载JDBC驱动程序,例如加载jdbc-odbc
利用System类静态方法setProperty()
System.setProperty(“jdbc.drivers”,”sun.jdbc.obdc.Jdbc0dbcDriver”)
利用class类的方法forName(),例如加载jdbc-odbc
Class.forName(”sun.jdbc.obdc.Jdbc0dbcDriver”);
加载Jdbc
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
2.建立与数据库的连接
Stringurl="jdbc:
sqlserver:
//127.0.0.1:
1433;DatabaseName=db";
//db为你的数据库的
Stringusername="sa2";
//刚才新SQL的用户名密码
Stringpassword="sa2";
Connectionconn=DriverManager.getConnection(url,username,password);
3.进行数据库操作
主要有两个接口:
Statement和PrepareStatement.
Statementrt=conn.createStatement()
执行Sq命令:
Con=DriverManager.getConntection(url);
Statementstmt=con.createStatement();
Stmt.excuteUpdate(sql);
Insert
Update
Delete
Stmt.executeQuery(sql)
Select,返回ResultSet
操作依赖于sql语句。
每执行一条sql语句,都要利用Connection实例的createStatement()方法创建一个statement实例,通过statement实例的excute()方法,excuteQuerry()方法,excuteUpdate()等方法执行sql语句。
Statementstmt=conn.createStatement();
Stringsql2="deletefrompersonwherename='张一'";
intrs1=stmt.executeUpdate(sql2);
Stringsql="select*fromperson";
//SC数据库的一个表名
ResultSetrs=stmt.executeQuery(sql);
4.对操作结果进行分析
执行select语句后,会产生一个Resultset结果集实例,对结果集进行分析是java应用程序的最终目的,要用循环遍历结果集,使用ResultSet的getXXX方法取得指定行指定列的数据。
(见表4-5ofP81).
while(rs.next()){
intid=rs.getint("id");
...
}
5.关闭相关连接
操作数据库完毕后,需要关闭相应连接以释放资源。
//关闭ResultSet实例rs
rs.close();
//关闭Statement实例statement
statement.close();
//关闭Connection实例con
con.close();
关闭数据库操作的顺序与打开数据库操作的顺序相反
先关闭结果集(ResultSet)
再关闭操作(Statement)
最后关闭连接(Connection)