JSP中数据库编程
一、数据库安装及其驱动程序的安装
二、数据库的连接
1. JDBC
JDBC的作用概括起来有如下3个方面:
(1)建立与数据库的连接
(2)向数据库发起查询请求
(3)处理数据库返回结果
java的jdbc连接数据库⏹ 这些作用是通过一系列API实现的,其中的几个重要类或接口如表所示。
接口 | 作用 |
java.sql.DriverManager java.sql.Connection java.sql.Statement java.sql.ResultSet | 处理驱动程序的加载和建立新数据库连接 处理与特定数据库的连接 在指定连接中处理SQL语句 处理数据库操作结果集 |
Driver接口
每种数据库的驱动程序都应该提供一个实现java.sql.Driver接口的类,简称Driver类,在加载某一驱动程序的Driver类时,它应该创建自己的实例并向java.sql.DriverManager类注册该实例。
通常情况下通过java.lang.Class类的静态方法forName(String className),加载欲连接数据库的Driver类,该方法的入口参数为欲加载Driver类的完整路径。成功加载后,会将Driver类的实例注册到DriverManager类中,如果加载失败,将抛出ClassNotFoundException异常,即未到指定Driver类的异常。
⏹ Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
DriverManager类
java.sql.DriverManager类负责管理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:
⏹ jdbc.microsoft:sqlserver://localhost:1433;DatabaseName=xsgl
⏹ 该数据库URL表示利用Microsoft提供的机制,选择名称为sqlserver的驱动,通过1433端口访问本机上的xsgl数据库。
DriverManager类提供的常用静态方法如下表所示:
方 法 名 称 | 功 能 描 述 |
getConnection(String url, String user, String password) | 用来获得数据库连接,3个入口参数依次为要连接数据库的URL、用户名和密码,返回值的类型为java.sql.Connection |
setLoginTimeout(int seconds) | 用来设置每次等待建立数据库连接的最长时间 |
setLogWriter(java.io.PrintWriter 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语句时创建该实例 |
prepareStatement() | 创建并返回一个PreparedStatement实例,通常在执行包含参数的SQL语句时创建该实例,并对SQL语句进行了预编译处理 |
prepareCall() | 创建并返回一个CallableStatement实例,通常在调用数据库存储过程时创建该实例 |
setAutoCommit() | 设置当前Connection实例的自动提交模式。默认为true,即自动将更改同步到数据库中;如果设为false,需要通过执行commit()或rollback()方法手动将更改同步到数据库中 |
getAutoCommit() | 查看当前的Connection实例是否处于自动提交模式,如果是则返回true,否则返回false |
setSavepoint() | 在当前事务中创建并返回一个Savepoint实例,前提条件是当前的Connection实例不能处于自动提交模式,否则将抛出异常 |
releaseSavepoint() | 从当前事务中移除指定的Savepoint实例 |
setReadOnly() | 设置当前Connection实例的读取模式,默认为非只读模式。不能在事务当中执行该操作,否则将抛出异常。有一个boolean型的入口参数,设为true表示开启只读模式,设为false表示关闭只读模式 |
isReadOnly() | 查看当前的Connection实例是否为只读模式,如果是则返回true,否则返回false |
isClosed() | 查看当前的Connection实例是否被关闭,如果被关闭则返回true,否则返回false |
commit() | 将从上一次提交或回滚以来进行的所有更改同步到数据库,并释放Connection实例当前拥有的所有数据库锁定 |
rollback() | 取消当前事务中的所有更改,并释放当前Connection实例拥有的所有数据库锁定。该方法只能在非自动提交模式下使用,如果在自动提交模式下执行该方法,将抛出异常。有一个参数为Savepoint实例的重载方法,用来取消Savepoint实例之后的所有更改,并释放对应的数据库锁定 |
close() | 立即释放Connection实例占用的数据库和JDBC资源,即关闭数据库连接 |
数据的基本操作
数据的基本操作主要是指对数据的查看、添加、修改、删除、查询等操作,利用Connection对象的createStatement方法建立Statement对象,在利用Statement对象的executeQuery()的方法执行SQL语句进行查询,返回结果集。再利用形如getXXX()的方法从结果集中读取数据。
1. Statement
Java所有SQL语句都是通过陈述(Statement)对象实现的。Statement用于在已经建立的连接的基础上向数据库发送SQL语句的对象。
Statement对象的建立
⏹ 通过Connection对象的createStatement方法建立Statement对象:
Statement ateStatement();
如果要建立可滚动的记录集,需要使用如下格式的方法:
⏹ public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException
resultSetType可取下列常量:
⏹ ResultSet.TYPE_FORWARD_ONL:只能向前,默认值。
⏹ ResultSet.TYPE_SCROLL_INSENSITIVE:可操作数据集的游标,但不反映数据的变化。
⏹ ResultSet.TYPE_SCROLL_SENSITIVE:可操作数据集的游标,反映数据的变化。
⏹ resultSetConcurrency的取值:
⏹ ResultSet.CONCUR_READ_ONLY:不可进行更新操作。
⏹ ResultSet.CONCUR_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 String(2);
⏹ String String("name");
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论