admin 管理员组文章数量: 1086019
2024年3月7日发(作者:html document)
JSP中数据库编程
一、数据库安装及其驱动程序的安装
二、数据库的连接
1. JDBC
JDBC的作用概括起来有如下3个方面:
(1)建立与数据库的连接
(2)向数据库发起查询请求
(3)处理数据库返回结果
这些作用是通过一系列API实现的,其中的几个重要类或接口如表所示。
接口
Manager
tion
ent
Set
作用
处理驱动程序的加载和建立新数据库连接
处理与特定数据库的连接
在指定连接中处理SQL语句
处理数据库操作结果集
Driver接口
每种数据库的驱动程序都应该提供一个实现接口的类,简称Driver类,在加载某一驱动程序的Driver类时,它应该创建自己的实例并向Manager类注册该实例。
通常情况下通过类的静态方法forName(String className),加载欲连接数据库的Driver类,该方法的入口参数为欲加载Driver类的完整路径。成功加载后,会将Driver类的实例注册到DriverManager类中,如果加载失败,将抛出ClassNotFoundException异常,即未找到指定Driver类的异常。
e("verDriver");
DriverManager类
Manager类负责管理JDBC驱动程序的基本服务,是JDBC的管理层,作用于用户和驱动程序之间,负责跟踪可用的驱动程序,并在数据库和驱动程序之间建立连接;另外,DriverManager类也处理诸如驱动程序登录时间限制及登录和跟踪消息的显示等工作。成功加载Driver类并在DriverManager类中注册后,DriverManager类即可用来建立数据库连接。
当调用DriverManager类的getConnection()方法请求建立数据库连接时,
DriverManager类将试图定位一个适当的Driver类,并检查定位到的Driver类是否可以建立连接,如果可以则建立连接并返回,如果不可以则抛出SQLException异常。
static Connection getConnection(String url, String username, String password):通过指定的数据的URL及用户
名、密码创建数据库连接。
(2) 创建指定数据库的URL
要建立与数据库的连接,首先要创建指定数据库的URL。数据库的URL对象类似网络资源的统一定位。其构成格 式如下:
jdbc:subProtocol:subName://hostname:port;DatabaseName=XXX
其中:jdbc表示当前通过Java的数据库连接进行数据库访问。
subProtocal表示通过某种驱动程序支持的数据库连接机制。
subName表示在当前连接机制下的具体名称。
hostName表示主机名。port表示相应的连接端口。
DatabaseName是要连接的数据库的名称。
按照上述构造规则,可以构造如下类型的数据库URL:
oft:sqlserver://localhost:1433;DatabaseName=xsgl
该数据库URL表示利用Microsoft提供的机制,选择名称为sqlserver的驱动,通过1433端口访问本机上的xsgl数据库。
DriverManager类提供的常用静态方法如下表所示:
方 法 名 称 功 能 描 述
用来获得数据库连接,3个入口参数依次为要getConnection(String url, String user,
连接数据库的URL、用户名和密码,返回值的String password)
类型为tion
setLoginTimeout(int seconds)
用来设置每次等待建立数据库连接的最长时间
setLogWriter(riter out) 用来设置日志的输出对象
println(String message) 用来输出指定消息到当前的JDBC日志流
Connection对象
Connection是用来表示数据库连接的对象,对数据库的一切操作都是在这个连接基础上进行的。Connection类的主 要方法有:
void clearWarning( ):清除连接的所有警告信息。
Statement createStatement( ):创建一个Statement对象。
Statement CreateStatement(int resultSetType, int resultSetConcurrency):创建一个Statement对象,它将生成具有特定类型和并发性的结果集。
void commit( ):提交对数据库的改动并释放当前持有的数据库的锁。
void rollback( ):回滚当前事务中的所有改动并释放当前连接持有的数据库的锁。
String getCatalog( ):获取连接对象的当前目录。
boolean isClose( ):判断连接是否已关闭。
boolean isReadOnly():判断连接是否为只读模式。
void setReadOnly():设置连接的只读模式。
void close():立即释放连接对象的数据库和JDBC资源
方 法 名 称
createStatement()
功 能 描 述
创建并返回一个Statement实例,通常在执行无参的SQL语句时创建该实例
创建并返回一个PreparedStatement实例,通常在执行包含参数的SQL语句时prepareStatement()
创建该实例,并对SQL语句进行了预编译处理
创建并返回一个CallableStatement实例,通常在调用数据库存储过程时创建该prepareCall()
实例
设置当前Connection实例的自动提交模式。默认为true,即自动将更改同步到setAutoCommit() 数据库中;如果设为false,需要通过执行commit()或rollback()方法手动将更改同步到数据库中
查看当前的Connection实例是否处于自动提交模式,如果是则返回true,否则getAutoCommit()
返回false
在当前事务中创建并返回一个Savepoint实例,前提条件是当前的ConnectionsetSavepoint()
实例不能处于自动提交模式,否则将抛出异常
releaseSavepoint()
从当前事务中移除指定的Savepoint实例
设置当前Connection实例的读取模式,默认为非只读模式。不能在事务当中执setReadOnly()
行该操作,否则将抛出异常。有一个boolean型的入口参数,设为true表示开启只读模式,设为false表示关闭只读模式
isReadOnly()
查看当前的Connection实例是否为只读模式,如果是则返回true,否则返回false
isClosed()
查看当前的Connection实例是否被关闭,如果被关闭则返回true,否则返回false
将从上一次提交或回滚以来进行的所有更改同步到数据库,并释放Connectioncommit()
实例当前拥有的所有数据库锁定
取消当前事务中的所有更改,并释放当前Connection实例拥有的所有数据库锁定。该方法只能在非自动提交模式下使用,如果在自动提交模式下执行该方法,rollback()
将抛出异常。有一个参数为Savepoint实例的重载方法,用来取消Savepoint实例之后的所有更改,并释放对应的数据库锁定
close() 立即释放Connection实例占用的数据库和JDBC资源,即关闭数据库连接
数据的基本操作
数据的基本操作主要是指对数据的查看、添加、修改、删除、查询等操作,利用Connection对象的createStatement方法建立Statement对象,在利用Statement对象的executeQuery()的方法执行SQL语句进行查询,返回结果集。再利用形如getXXX()的方法从结果集中读取数据。
1. Statement
Java所有SQL语句都是通过陈述(Statement)对象实现的。Statement用于在已经建立的连接的基础上向数据库发送SQL语句的对象。
Statement对象的建立
通过Connection对象的createStatement方法建立Statement对象:
Statement stmt=Statement();
如果要建立可滚动的记录集,需要使用如下格式的方法:
public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException
resultSetType可取下列常量:
_FORWARD_ONL:只能向前,默认值。
_SCROLL_INSENSITIVE:可操作数据集的游标,但不反映数据的变化。
_SCROLL_SENSITIVE:可操作数据集的游标,反映数据的变化。
resultSetConcurrency的取值:
_READ_ONLY:不可进行更新操作。
_UPDATABLE:可以进行更新操作,默认值。
Statement对象的方法
Statement对象提供了三种执行SQL语句的方法:
ResultSet executeQuery(String sql):执行SELECT语句,返回一个结果集。
int executeUpdate(String sql):执行update、insert、delete 等不需要返回结果集的SQL语句。它返回一个整数,表示执行SQL语句影响的数据行数。
boolean execute(String sql):用于执行多个结果集、多个更新结果(或者两者都有)的SQL语句。它返回一个boolean值。如果第一个结果是ResultSet对象,返回true;如果是整数,就返回false。取结果集时可以与getMoreResultSet、getResultSet和getUpdateCount结合来对结果进行处理。
2.ResultSet ResultSet对象实际上是一个由查询结果数据构成的表。在ResultSet中隐含着一个指针,利用这个指针移动数据行,可以取得所要的数据,或对数据进行简单的操作。其主要的方法有:
boolean absolute(int row):将指针移动到结果集对象的某一行。
void afterLast():将指针移动到结果集对象的末尾。
void beforeFrist():将指针移动到结果集对象的头部。
boolean first():将指针移动到结果集对象的第一行。
boolean next():将指针移动到当前行的下一行。
boolean previous():将指针移动到当前行的前一行。
boolean last():将指针移动到当前行的最后一行。
此外还可以使用一组getXXX()方法,读取指定列的数据。XXX是JDBC中Java语言的数据类型。这些方法的参数有两种格式,一是用int指定列的索引,二是用列的字段名(可能是别名)来指定列。如:
String strName=ing(2);
String strName=ing("name");
1.数据表记录增加操作
(1)数据表记录增加的SQL语法insert into 表名(字段名1,字段名2…) values(字段值1,字段值2,…) 例如: insert into
xsda(classID,name,sex,birthDate,isMember,address,resume) values(12,'张磊','男',' 1988-9-8',1, '北京', ' ')
(2)使用Statement对象增加数据表记录 首先创建一个SQL语句。然后调用Statement对象的executeUpdate()方法。
eUpdate(sql); 上述方法可以返回一个整数,表明成功插入的记录数。
(3)使用moveToInsertRow 和insertRow方法增加数据表记录 String sql="select * from xsda";
ResultSet rs=eQuery(sql); //获取数据表的全部结果集
InsertRow(); //将数据表指针移到插入记录位置
Int(2, 13); //向classID字段输入数据
String(3, '黄红'); //向name字段输入数据
String(4, '女'); //向sex字段输入数据
String(5, '1997-9-12'); //向birthDate字段输入数据
String(6, '大连'); //向address字段输入数据
Int(7, 1); //向isMember字段输入数据
String(8, ' 无'); //向resume字段输入数据
try
{
Row();
}catch(Exception e){}
(4)使用PrepareStatement对象增加数据表记录 与使用Statement类似,只是创建SQL语句时,可以带参数(以“?”表示)。插入时通过更改参数实现记录的更新。
String sql= "insert into xsda(classID,name,sex,birthDate,isMember,addre ss,resume) values(?,?,?,?,?, ?, ' ')";
PrepareStatment pstmt= eStatement(sql);
(1, 14);
ing(2, '黄少军');
ing(3, '男');
ing(4, '1987-4-10');
ing(5, '上海');
(6, 0);
int rowCount=eUpdate();
if(rowCount>0)n("成功插入记录");
2.数据表记录修改操作
(1)数据表记录修改的SQL语法 update 表名 set 字段1=字段值1,字段2=字段值2… where 特定条件 例如: update
xsda name='黄小华' where name='黄少华'
(2)使用Statement对象修改数据表记录 首先创建一个SQL语句。然后调用Statement对象的executeUpdate()方法。
eUpdate(sql); 上述方法可以返回一个整数,表明成功修改的记录数。
(3)使用ResultSet对象修改数据表记录
String sql="select * from xsda where name='黄少华'";
ResultSet rs=eQuery(sql); //获取数据表的结果集
if(()){ String(3, '黄小华'); //修改name字段的数据
try{
Row();
}catch(Exception e){} }
(4)使用PrepareStatement对象修改数据表记录 与使用Statement类似,只是创建SQL语句时,可以带参数(以“?”表示)。修改时通过更改参数实现记录的更新。
String sql= "update xsda set name=? where name='黄少华'";
PrepareStatment pstmt= eStatement(sql);
ing(1, '黄小华');
int rowCount=eUpdate();
if(rowCount>0)n("成功修改记录");
3.数据表记录删除操作
(1)数据表记录删除的SQL语法 delete form 表名 where 特定条件 例如: delete from xsda where name='黄小华'
(2)使用Statement对象删除数据表记录 首先创建一个SQL语句。然后调用Statement对象的executeUpdate()方法。
eUpdate(sql); 上述方法可以返回一个整数,表明成功删除的记录数。
(3)使用ResultSet对象删除数据表记录
String sql="select * from xsda where name='黄少华'";
ResultSet rs=eQuery(sql); //获取数据表的结果集
if(()){ Row(); //删除该行
版权声明:本文标题:JSP数据库连接JDBC 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1709762221a545611.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论