使用JDBC驱动程序访问数据库
一,JDBC的主要接口:
java.sql.Driver:任何驱动程序类都应该实现这个接口。读取数据库驱动器的信息、提供connect方法用于建立访问数据库所用的Connection对象
java.sql.DriverManager:用于管理JDBC驱动程序一个接口(使用此接口能够获得与相应数据库的连接)
java.sql.Connection:表示驱动程序与数据库之间的连接。(使用此连接可以创建一个Statement对象)
java.sql.Statement:能对数据库执行SQL语句,并得到返回的结果
java.sql.ResultSet:表示从数据库服务器返回的结果集。
二,使用JDBC驱动程序访问数据库
获取相应数据库的jdbc驱动程序,并将它们保存在指定的位置, 然后重新启动tomcat服务。
例如sql server:
import java.sql.*
…
Try{
Class.forName(” com.microsoft.jdbc.sqlserver.SQLServerDriver “);
String oraURL= “jdbc:sqlserver://localhost:1433;databasename=doctor”;
Connection con=DriverManager.getConnection(oraURL, username,password);
Statement statement =con.createStatement();
String query = “SELECT name, pwd FROM sometable”;
ResultSet resultSet= statement.executeQuery(query);
while(resultSet.next()){
name =resultSet.getString(1);
phone =resultSet.getString(2);
System.out.println(name+”,”+phone);
}
resultSet.close();
statement.close();
con.close();
}catch(SQLException e){…}
编写程序的具体步骤:
1,首先应该导入java.sql包。语句为:
<%@ page import=”java.sql.*” %>
2,装载驱动程序
利用Class.forName()方法加载某一个数据库的驱动程序。
语法:Class.forName(“JDBC驱动程序类”);
方法:
(1):使用JDBC/ODBC桥驱动程序:Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
(2):使用SQLServer的驱动程序:
Class.forName
(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);
3,定义所要连接数据库的地址
通过此步骤,定义要连接的数据库资源
String ODBCURL= ” jdbc:odbc:dbName”;
String sqlserverURL= ” jdbc:microsoft:sqlserver://host:1433;DatabaseName=dbName “;
String mysqlURL= “jdbc:mysql://host:port/dbName “;
String oracleURL= “jdbc:oracle:thin:@host:port:dbName “;
不同数据库连接的地址不同,这点需要特别注意。
URL由3部分组成,各个部分用冒号间隔,格式如下:jdbc:<子协议>:<子名称>
JDBC URL的3部分可分解如下:
jdbc:JDBC中的协议就是jdbc。
<子协议>:数据库驱动程序名或数据库连接机制的名称。子协议的典型示例为oracle,它用于连接oracle数据库。
<子名称>:一种标记数据库的方法。子名称根据子协议的不同而不同,使用子名称的目的是为定位数据库
例如 jdbc:oracle:thin:@[ip]:[port]:[sid]
子协议是 oracle
子名称现在由四部分构成:包括驱动程序类型thin、数据库服务器的IP地址、提供服务的端口号、数据库的名字
4,建立与数据库的连接
语法:Connection con=DriverManager.getConnection(url,”登录数据库用户名”,”登录密码”);
例:以SQLServer连接数据库book为例,用户名为sa,密码为123
Class.forName(” com.microsoft.jdbc.sqlserver.SQLServerDriver “);
String connStr=” jdbc:microsoft:sqlserver://host:1433;DatabaseName=book”;
Connection conn = DriverManager.getConnection(connStr, ” sa”, ” 123”);
5,建立语句对象
利用 Connection接口 createStatement() 方法创建语句对象。
例:Statement stmt=conn.createStatement();
语句对象用于执行SQL语句。该对象负责将SQL语句传递给数据库管理系统执行;
6,声明并执行SQL语句
声明SQL语句,并将该语句通过Statement对象提交给服务器进行执行。
String sql= ” SELECT * FROM book “;
//上面的语句用于从book表中查询所有记录。
ResultSet resultSet=stmt.executeQuery(sql);
//该语句将sql命令提交给数据库服务器进行执行,并将执行结果存储在ResultSet对象中进行执行。
Statement接口主要有如下三个方法:
(1). ResultSet executeQuery(String sql)
以sql语句为参数,执行sql查询语句;返回
ResultSet结果集(一个二维表)
例如:
Statement stmt=con.createStatement();
String sql= ” SELECT * FROM book “;
ResultSet rs=stmt.executeQuery(sql);
(2) int executeUpdate(String sql)
以sql语句为参数,执行sql更新语句及DDL语句,如添加、删除或修改操作,返回被受影响记录的条数。
例如:
Statement stmt=con.createStatement();
String sql= ” delete FROM book where bookid= ” + ” ‘12335’ “;
int i=stmt.executeUpdate(sql);
System.out.println(i);
(3)boolean execute(String sql)
用于执行实现不知道类型的SQL语句,既可以执行查询语句,也可以执行更新语句。
常用于动态的处理未知的SQL语句,事先无法知道该SQL语句的具体类型及执行的返回值。
执行参数部分的SQL语句:
当SQL语句的执行结果是一个ResultSet结果集时,本方法返回true;并可以通过StatementgetResultSet()方法得到返回的结果集
当SQL语句执行后没有返回的结果集时,该方法返回false
7,对结果集进行处理
Statement对象负责将SQL语句传递给数据库管理系统执行,返回的是一个ResultSet的对象。 ResultSet对象,称为结果集,是符合条件的所有行的集合。
可以通过(first(), last(), previous(), next(), absolute(int), …) 方法浏览可滚动结果集中的内容
ResultSet 有如下几个方法:
1. boolean next()
用于将 ResultSet定位到下一行。
ResultSet最初是定位在第0行上的,此时应该先调用 next()方法将其定位到第1行上,然后才可输出。
当 ResultSet已经到了最后一行时,再调用next()方法,则返回 false。
2. getXXX()
当 ResultSet已经定位在某一行上时,使用 getXxx ()方法得到这一行上单个字段的值。
针对不同的字段类型,调用不同的getXxx ()方法(getString(col), getDate(col), getInt(col),…)
例:
如果表中的第一个字段,字段名为“name”,是文本型的; 则可以使用getString(1)或 getString(“name”)来得到它的值。
如果表中的第三个字段,字段名为“score”,是数值型的; 则可以使用getFloat(3)或 getFloat(“score”)来得到它的值。
显示结果集中所有记录的前两列:
while(rs.next()){
name =rs.getString(1);
phone =rs.getString(2);
System.out.println(name+”,”+phone);
}
8,关闭对象
rs.close();
//关闭结果集
stmt.close();
//关闭语句对象
con.close();
//关闭连接
将打开的资源关闭。
注意:资源关闭的顺序和打开的顺序恰恰相反。
9,异常处理
try
{
…
}
catch(SQLException ex)
{
…
}
数据库访问中可能会发生异常(如无法连接),需要做异常处理
编写Servlet时,需要将访问数据库代码放在try-catch结构中,try { …}
catch(SQLExceptionex){ …}
在编写JSP页面时,数据库操作可以不写try-catch, 服务器将JSP编译成Servlet时会自动加上try-catch

浙公网安备 33010602011771号