首页 > 代码库 > JSP详细篇——Java Web的数据库操作
JSP详细篇——Java Web的数据库操作
Java Web的数据库操作
JDBC技术
JDBC简介
JDBC是Java程序曹祖数据库的API,也是Java程序与数据库交互的一门技术。JDBC是java操作数据库的规范,由一组用Java语言编写的类和接口组成,他对数据库的操作提供了基本的方法。使用JDBC操作数据库,需要数据库厂商提供数据库的驱动程序。
JDBC在Java程序与数据库之前起到了桥梁的作用,有了JDBC就可以方便的与各种数据库进行交互,不必为某一个特定的数据库指定专门的访问程序。
JDBC连接数据库的过程
JDBC操作数的开发流程:
A.注册数据库驱动
连接数据库之前,需要将数据库厂商提供的数据库驱动类注册到JDBC的驱动管理器中,通常情况下,是通过将数据库驱动类加载到JVM来实现的
范例:
Class.forName(“com.mysql.jdbc.Driver”);
B.构建数据库连接URL
要建立数据库连接,就要构建数据库连接的URL,这个URL是由数据库厂商指定的,不同的数据库,他的URL有所不同,但是都符合一个基本的格式。即:“JDBC协议+IP地址或域名+端口+数据库名称”。如MySQL的数据库连接的URL的字符串为“jdbc:mysql:///localhost:3306/test”
C.获取Connection对象
在注册 数据库驱动及构建数据库URL后,就可以通过驱动管理器获取数据库的连接Connection.Connection对象是JDBC封装的数据库连接对象,只有创建此对象后,才可以对数据库进行相关操作。他的获取方法如下:
DriverManager.getConnection(url,username,password);
Connection对象的获取需要用到DriverManager对象,DriverManager的gerConnection()方法通过数据库连接URL、数据库用户名、数据库连接密码创建Connection对象。
范例:
通过JDBC连接MySQL数据库
创建程序中的主页index.jsp,在该页面中加载数据库驱动并创建数据库连接。关键代码如下:
<
try{
Class.forName(“com..mysql.jdbc.Driver);//加载数据库驱动,注册到驱动管理器
String url = “jdbc:mysql://localhost:3306/test”;//数据库连接字符串
String username = “root”;//数据库用户名
String password = “111”;//数据库密码
Connection conn = DriverManager.getConnection(url,username,password);//创建Connection连接
if(conn != null){ //判断数据库连接是否为空
out.println(“数据库连接成功”); //输出连接信息
conn.close(); /关闭数据库连接
} else {
out.println(“数据库连接失败”);
}
}catch (ClassNotFoundException e){
e.printStackTrace();
} catch(SQLException e){
e.printStackTrace();
}
JDBC API
Connection接口
Connection接口位于java.sql包中,是与特定数据库的连接会话,只有获得特定数据库的连接对象才能访问数据库,操作数据库中的数据表、视图和存储过程等。Connection接口的方法声明及说明如下:
方法声明 | 说明 |
void close() throws SQLException | 立即释放Connection对象的数据库连接占用的JDBC资源,在操作数据库后,立即调用此方法。 |
void commit() throws SQLException | 提交事务,并释放Connectio对象当前持有的所有数据库锁,当事务被设置为手动提交模式时,需要调用该方法提交事务 |
Statement createStatement() throws SQLException | 创建一个Statement对象将SQL语句发送到数据库,该方法返回Statement对象 |
boolean getAutoCommit() throws SQLException | 用于判断Connecction对象是否被设置为自动提交模式,该方法返回布尔值 |
DatabaseMetaData getMetaData() throws SQLException | 获取Connection对象所连接的数据库的元数据DatabaseMetaData对象,元数据包括关于数据库的表、受支持的SQL语法、存储过程、此连接功能等信息 |
int getTransactionIsolation() throws SQLException | 获取Connection对象的当前事务隔离级别 |
boolean isClosed() throws SQLException | 判断Connection对象是否与数据库断开连接,该方法返回布尔值,需要注意的是,如果Connection对象与数据库断开连接,则不能在通过Connection对象操作数据库 |
boolean isReadOnly() throws SQLException | 判断Connection对象hi否哦是只读模式,该方法返回布尔值 |
PreparedStatement preparedStatement(String sql) throws SQLException | 将参数化的SQL语句预编译并存储在PreparedStatement对象中,并返回所创建的这个PreparedStatement对象 |
void releaseSavePoint(SavaPoint savepoint) throws SQLException | 从当前事务中移除指定的Savepoint和后续的SavePoint对象 |
void rollback() throws SQLException | 回滚事务,针对Savepoint对象之后的更改 |
void setAutoCommit(boolean autoCommit) throws SQLException | 设置Connection对象的提交模式,如果参数autoCommit的值设置为true,Connection对象则为自动那个提交模式;如果参数autoCommit对象的值设置为false,则Connection对象为手动提交模式 |
void setReadOnly(boolean readOnly) throws SQLException | 将Connection对象的连接模式设置为只读,该方法用于对数据库进行优化 |
Savepoint setSavepoint() throows SQLException | 在当前事务中创建一个未命名的保留点,并返回这个保留点对象 |
Savepoint setSavepoint(String name) throws SQLException | 在当前事务中创建一个指定名称的保留点,并返回这个保留点对象 |
void setTransactionIsolation(int level) throws SQLException | 设置Connection对象的事务隔离级别 |
DriverManager类
DriverManager类主要用作用户及驱动程序之间,他是JDBC中的管理层,通过DriverManager类可以管理数据库厂商提供的驱动程序,并新建应用程序及数据库之间的连接。其方法声明及说明如下:
方法声明 | 说明 |
public static void deregisterDriver(Driver driver) throws SQLException | 从DriverManager的管理列表中删除一个驱动程序,参数driver是要删除的驱动对象 |
public static Connection getConnection(String url) throws SQLException | 根据指定数据库连接URL,建立与数据库的连接,参数URL为数据库连接URL |
public static Connection getConnection(String url,Properties info) throws SQLException | 根据指定数据库连接URL及数据库连接属性信息建立数据库连接Connection。参数url为数据库连接URL,参数info为数据库连接属性 |
public static Connection getConnection(String url,String user,String password) throws SQLException | 根据指定数据库连接URL、数据库用户名及密码创建数据库连接Connecction. |
public static Enumeration<Driver> getDrivers() | 获取当前DriverManager中已加载的所有驱动程序,他的返回值是Enumeration |
public static void registerDriver(Driver driver) throws SQLException | 向DriverManager注册一个驱动对象,参数driver为要注册的驱动 |
Statement接口
在创建了数据库连接之后,就可以通过程序来调用SQL语句对数据库进行操作,在JDBC中,Statement接口封装了这些操作。Statement接口提供了执行语句和获取查询结果的基本方法,其方法声明及说明如下:
方法声明 | 说明 |
Void addBatch(String sql) throws SQLException | 将SQL语句添加到Statement对象的当前命令列表中,该方法用于SQL命令的批处理 |
Void clearBatch() throws SQLException | 清空Statement对象中的命令列表 |
Void close() throws SQLException | 立即释放Statement对象的数据库和JDBC资源,而不是等待该对象自动关闭时发生此操作 |
Boolean execute(String sql) throws SQLException | 执行指定的SQL语句,如果SQL语句返回结果则该方法返回true,否则返回false |
Int[] executeBatch() throws SQLException | 将一批SQL命令提交给数据库执行,返回更新计数组成的数组 |
ResultSet executeQuery(String sql) theows SQLException | 执行查询类型的SQL语句,该方法返回查询所获取的结果集ResultSet对象 |
executeUpdate int executeUpdate(String sql) throws SQLException | 执行SQL语句中的DML类型(insert、update、delete)的SQL语句,返回更新所影响的行数 |
Connection getConnection() throws SQLException | 获取生成的Statement对象的Connection对象 |
Boolean isClosed() throws SQLException | 判断Statement对象是否已经关闭,如果被关闭,将不能在调用该Statement对象执行SQL语句,该方法返回布尔值 |
PreparedStatement接口
Statement接口封装了JDBC 执行SQL语句的方法,他可以完成Java程序执行 SQL语句的操作,但是在实际开发中,SQL语句往往需要将程序中的变量做查询条件参数等。使用Statement接口进行操作过于繁琐,而且存在安全方面的缺陷。针对这一问题,JDBC API中封装了Statement的扩展接口PreparedStaement.
PreparedStatement接口继承与Statement接口,他拥有Statement接口中的方法,而且PreparedStatement接口针对带有参数的SQL语句的执行操作进行了扩展。应用于PreparedStatement接口中的SQL语句,可以使用占位符“?”来代替SQL语句中的参数,然后再对其进行赋值。PreparedStatement接口的方法声明及说明如下:
方法声明 | 说明 |
void serBinaryStream(int parameterIndex,InputStream x) throws SQLException | 将素如流x作为SQL语句中的参数值,parameterIndex为参数位置的索引 |
void setBoolean(int parameterIndex,boolean x) throws SQLException | 将布尔值x作为SQL语句中的参数,parameterInex为参数位置的索引 |
void setByte(int parameterIndex,byte x) throws SQLException | 将byte值x作为SQL语句中的参数值,parameterIndex为参数位置的索引 |
void setDate(int parameterIndex,Date x) throws SQLException | 将java.sql.Date值作为SQL语句中的参数值,parameterIndex为参数位置的索引 |
void setDouble(int parameterIndex,double x) throws SQLException | 将double值作为SQL语句中的餐食之,parameterIndex为参数位置的索引 |
void setFloat(int parameterIndex,float x) throws SQLException | 将float值x作为SQL语句中的参数值,paramterIndex为参数位置的索引 |
void setInt(int parameterIndex,int x) throws SQLException | 将long 值作为SQL语句中的参数值,parameterIndex为参数位置的索引 |
void setObject(int parameterIndex,Object x) throws SQLException | 将Object对象x作为SQL语句中的参数值,parameterIndex为参数位置的索引 |
void setShort(int parameterIndex ,short x) throws SQLException | 将short值x作为SQL语句中的参数值,parameterIndex为参数位置的索引 |
void serString(int parameterIndex,String x) throws SQLException | 将String值x作为SQL语句中的参数值,parameterIndex为参数位置的索引 |
void setTimestamp(int parameterIndex,Timestamp x) throws SQLException | 将Timestamp值x作为SQL语句中的参数值,parameterIndex为参数位置的索引 |
ResultSet接口
ResultSet接口位于java.sql包中,封装了数据库查询的结果集。ResultSet对象包含了符合SQL语句的所有行,针对Java中的数据类型提供了一套getXXX()方法,通过这些方法可以获取每一行中的数据。除此之外,ResultSet还提供了光标的功能,通过光标可以自由定位到每一行中的数据。其方法的声明和说明如下:
方法声明 | 说明 |
boolean absolute(int row) throws SQLException | 将光标移动到ResultSet对象的给定行编号,参数row为行编号 |
void afterLast() throws SQLException | 将光标移动到ResultSet对象的最后一行之后,如果结果集中不包含任何行,则该方法无效 |
void beforeFirst() throws SQLException | 立即释放ResultSet对象的数据库和JDBC资源 |
void deleteRow() throws SQLException | 从ResultSet和底层数据库中删除当前行 |
boolean first() throws SQLException | 将光标移动到ResultSet对象的第一行 |
InputStream getBinaryStream(String columnLable) throws SQLException | 以byte流的方式获取ResultSet对象当前行中指定的列的值,参数名columnLable为列名称 |
Date getDate(String columnLable) throws SQLException | 以java.sql.Date的方式获取ResultSet对象当前行中指定列的值,参数columnLable为列名称 |
double getDouble(String columnLable) throws SQLException | 以double 的方式获取ResultSet对象当前行中指定列的值,参数columnLable为列名称 |
float getFloat(String columnLable) throws SQLException | 以float方式获取ResultSet对象当前行中指定列的值,参数columnLable为列名称 |
int getInt(String columnLable) throws SQLException | 以int方式获取ResultSet对象当前行中指定列的名称,参数columnLable为列名称 |
String getString(String columnLable) throws SQLException | 以String 的方式获取ResultSet对象当前行中指定列的值,参数colnmnLable为列名称 |
boolean isClosed() throws SQLException | 判断当前ResultSet对象是否已关闭 |
boolean last() throws SQLException | 将光标移动到ResultSet对象的最后一行 |
booolean next() throws SQLException | 将光标向后移动一行 |
boolean previous() throws SQLException | 将光标向前移动一行 |
JSP详细篇——Java Web的数据库操作