上篇博客初步介绍了JDBC,并简单提到了连接数据库的4种不同驱动方式:
(1)JDBC-ODBC桥驱动
(2)纯Java驱动
(3)本地API部分Java驱动
(4)JDBC网络纯Java驱动
本篇博客通过两个小实例,来介绍JDBC-ODBC桥驱动方式和纯Java驱动方式,从而进一步了解JDBC的工作步骤和机制。
JDBC工作步骤:
(1)建立数据源
(2)加载驱动程序
(3)获得连接对象
(4)创建语句对象
(5)执行Sql语句
(6)关闭资源
首先建立ODBC数据源:
【开始】→ 【设置】→ 【控制面板】→【管理工具】→【数据源(ODBC)】
新建数据源,名称可以任意,这里假设已经建立了一个名为myODBC的数据源,连接到oracle中的orcl数据库。
(2)加载驱动程序
方 法 原 型 |
说 明 |
static Class forName(String className) throws ClassNotFoundException |
将由className指定完整名称的类加载到JVM中,如果加载失败,将抛出异常,必须捕捉 |
sun.jdbc.odbc.JdbcOdbcDriver类
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
(3)获得连接对象
方 法 原 型 |
说 明 |
static Connection getConnection (String url, String user, String password) throws SQLException |
参数url是连接字符串,参数user是数据库用户名,参数password是登录口令,成功连接到数据库返回Connection对象,连接失败则抛出SQLException异常,必须捕捉 |
Connection con = DriverManager.getConnection("jdbc:odbc:myODBC", “scott", “tiger");
(4)创建语句对象
方 法 原 型 |
说 明 |
Statement createStatement() throws SQLException |
成功创建返回Statement对象,否则抛出SQLException异常,必须捕捉 |
Statement sta = con.createStatement();
(5)执行sql语句
方 法 原 型 |
说 明 |
int executeUpdate(String sql) throws SQLException |
参数sql是要执行的SQL语句,执行成功返回受影响的行数,执行失败则抛出SQLException异常,必须捕捉 |
sta.executeUpdate("INSERT INTOFriends VALUES('田七', '重庆', 456712, '2003-2-25',7500)");
方 法 原 型 |
说 明 |
ResultSet executeQuery(String sql) throws SQLException |
参数sql是要执行的SQL语句,查询成功返回包含有结果数据的ResultSet对象,否则抛出SQLException异常,必须捕捉 |
ResultSet rs = sta.executeQuery("SELECT * FROM Friend");
(6)关闭资源
rs.close(); //关闭ResultSet对象 sta.close(); //关闭Statement对象 con.close(); //关闭Connection对象
完整例子:
import java.sql.*; //导入java.sql包 public class JDBCDemo { public static void main(String[] args){ String strCon = "jdbc:odbc:myODBC"; //连接字符串 String strUser = “scott"; //数据库用户名 String strPwd = “tiger"; //口令 System.out.println("正在连接数据库..."); try{ //监控异常 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //加载驱动程序 Connection con; //获得连接对象 con = DriverManager.getConnection(strCon, strUser, strPwd); System.out.println("成功连接到数据库。"); Statement sta = con.createStatement(); //创建语句对象 //执行SQL语句 String strSql = "DELETE FROM Friends WHERE [Name] = '郑六'"; intcount = sta.executeUpdate(strSql); System.out.println("成功删除" + count + "行数据。"); sta.close(); con.close(); //关闭所有已经打开的资源 } catch (ClassNotFoundException cnfe) {cnfe.printStackTrace(); } catch(SQLException sqle) { sqle.printStackTrace(); } }
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con =DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORA", "scott", "tiger");
Class.forName("com.microsoft. Sqlserver.jdbc.SQLServerDriver");
Connection con = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=pubs", "sa", "");
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bbs", "root" , "root");