jdbc的工作原因

相信大家对JDBC并不陌生,编程人员可以利用JDBC向各种关系数据发送SQL语句。而且也不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL调用。同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序。看来有了jdbc后有很多很多的好处嘛,下面就说下JDBC工作原理、结构以及对数据库的访问,希望对大家有所帮助。

JDBC的工作原理
   JDBC的设计基于X/Open SQL CLI(调用级接口)这一模型。它通过定义出一组 API对象和方法以用于同数据库进行交互。

在Java程序中要操作数据库,一般应该通过如下几步(利用JDBC访问数据库的编程步骤):
(1)加载连接数据库的驱动程序 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
(2)创建与数据源的连接
 String url="jdbc:odbc:DatabaseDSN";  
 Connection con=DriverManager.getConnection(url,"Login","Password");
(3)查询数据库:创建Statement对象并执行SQL语句以返回一个ResultSet对象。
 Statement stmt=con.createStatement();
 ResultSet rs=stmt.executeQuery("select * from DBTableName"); 
(4)获得当前记录集中的某一记录的各个字段的值
    String name=rs.getString("Name");
    int age=rs.getInt("age");
    float wage=rs.getFloat("wage");
(5)关闭查询语句及与数据库的连接(注意关闭的顺序先rs再stmt最后为con)
    rs.close();    
    stmt.close();
    con.close(); 
JDBC的结构
   JDBC主要包含两部分:面向Java程序员的JDBC API及面向数据库厂商的JDBC Drive API。
(1)面向Java程序员的JDBC API:Java程序员通过调用此API从而实现连接数据库、执行SQL语句并返回结果集等编程数据库的能力,它主要是由一系列的接口定义所构成。
java.sql.DriveManager:该接口主要定义了用来处理装载驱动程序并且为创建新的数据库连接提供支持。
java.sql.Connection:该接口主要定义了实现对某一种指定数据库连接的功能。
java.sql.Statement:该接口主要定义了在一个给定的连接中作为SQL语句执行声明的容器以实现对数据库的操作。它主要包含有如下的两种子类型。
    java.sql.PreparedStatement:该接口主要定义了用于执行带或不带 IN 参数的预编译 SQL 语句。
    java.sql.CallableStatement:该接口主要定义了用于执行数据库的存储过程的雕用。
java.sql.ResultSet:该接口主要定义了用于执行对数据库的操作所返回的结果集。
(2)面向数据库厂商的JDBC Drive API:数据库厂商必须提供相应的驱动程序并实现JDBC API所要求的基本接口(每个数据库系统厂商必须提供对DriveManager、Connection、Statement、ResultSet等接口的具体实现),从而最终保证Java程序员通过JDBC实现对不同的数据库操作。

通过JDBC 实现对数据库的访问
(1)引用必要的包
 import java.sql.*;  //它包含有操作数据库的各个类与接口   
(2)加载连接数据库的驱动程序类 
    为实现与特定的数据库相连接,JDBC必须加载相应的驱动程序类。这通常可以采用Class.forName()方法显式地加载一个驱动程序类,由驱动程序负责向DriverManager登记注册并在与数据库相连接时,DriverManager将使用此驱动程序。
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
注意:这条语句直接加载了sun公司提供的JDBC-ODBC Bridge驱动程序类。
(3)创建与数据源的连接
 String url="jdbc:odbc:DatabaseDSN";  
 Connection con=DriverManager.getConnection(url,"Login","Password");
注意:采用DriverManager类中的getConnection()方法实现与url所指定的数据源建立连接并返回一个Connection类的对象,以后对这个数据源的操作都是基于该Connection类对象;但对于Access等小型数据库,可以不用给出用户名与密码。
 String url="jdbc:odbc:DatabaseDSN";  
 Connection con=DriverManager.getConnection(url);
 System.out.println(con.getCatalog()); //取得数据库的完整路径及文件名 
    JDBC借用了url语法来确定全球的数据库(数据库URL类似于通用的URL),对由url所指定的数据源的表示格式为
   jdbc::[ database locator]
jdbc---指出要使用JDBC
subprotocal---定义驱动程序类型
database locator---提供网络数据库的位置和端口号(包括主机名、端口和数据库系统名等)    jdbc:odbc://host.domain.com:port/databasefile    
  主协议jdbc   驱动程序类型为odbc,它指明JDBC管理器如何访问数据库,该例指名为采用JDBC-ODBC桥接方式;其它为数据库的位置表示。   
例如:装载mySQL JDBC驱动程序
Class.forName("org.gjt.mm.mysql.Driver ");
String url 
="jdbc:mysql://localhost/softforum?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1" 
  //testDB为你的数据库名 
  Connection conn= DriverManager.getConnection(url);
例如:装载Oracle JDBC OCI驱动程序(用thin模式)
Class.forName("oracle.jdbc.driver.OracleDriver ");
String url="jdbc:oracle:thin:@localhost:1521:orcl"; 
  //orcl为你的数据库的SID 
  String user="scott"; 
  String password="tiger"; 
  Connection conn= DriverManager.getConnection(url,user,password);
注意:也可以通过con.setCatalog("MyDatabase")来加载数据库。
例如:装载DB2驱动程序
Class.forName("com.ibm.db2.jdbc.app.DB2Driver ")
String url="jdbc:db2://localhost:5000/sample"; 
  //sample为你的数据库名 
  String user="admin"; 
  String password=""; 
  Connection conn= DriverManager.getConnection(url,user,password);

例如:装载MicroSoft SQLServer驱动程序
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver ");
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"; 
  //pubs为你的数据库的 
  String user="sa"; 
  String password="";   
  Connection conn= DriverManager.getConnection(url,user,password);
(4)查询数据库的一些结构信息
     这主要是获得数据库中的各个表,各个列及数据类型和存储过程等各方面的信息。根据这些信息,从而可以访问一个未知结构的数据库。这主要是通过DatabaseMetaData类的对象来实现并调用其中的方法来获得数据库的详细信息(即数据库的基本信息,数据库中的各个表的情况,表中的各个列的信息及索引方面的信息)。
    DatabaseMetaData dbms=con.getMetaData();
    System.out.println("数据库的驱动程序为 "+dbms.getDriverName());
(5)查询数据库中的数据:
   在JDBC中查询数据库中的数据的执行方法可以分为三种类型,分别对应Statement (用于执行不带参数的简单SQL语句字符串),PreparedStatement(预编译SQL语句)和CallableStatement(主要用于执行存储过程)三个接口。

转载请注明出处:IT学习网 http://www.itxuexi.com/

本文来源于:IT学习网 http://www.itxuexi.com/tech/79363.html

JDBC无法驱动可能由以下几种具体原因导致: ### 驱动包问题 - **驱动包缺失**:若未将合适的JDBC驱动包添加到项目的类路径里,Java程序就无法找到并加载驱动类。比如使用MySQL数据库时,没有把mysql - connector - java驱动包添加到项目中,就会出现此类问题。 - **驱动包版本不兼容**:不同版本的数据库和Java环境对JDBC驱动包版本有不同要求。像sqljdbc驱动包不支持Java SE 7及以上版本的特性,在较新的Java环境使用该驱动包实现新的API或特性时可能会受限,进而导致驱动无法正常工作 [^1]。 ### 驱动加载问题 - **手动加载驱动类失败**:在JDBC 4.0之,需要使用`Class.forName("驱动类名")`来手动加载驱动类。若驱动类名写错,或者驱动包中不存在该类,就会引发`ClassNotFoundException`异常。在JDBC 4.0及以上版本,虽然驱动可自动加载,但手动加载时出错仍会导致问题。例如,对于MySQL数据库,若写成`Class.forName("com.mysql.wrong.jdbc.Driver")`,就会加载失败 [^2]。 ### 配置问题 - **连接URL错误**:连接URL包含数据库的地址、端口、数据库名等信息,若格式或参数有误,会使驱动无法正确连接到数据库。不同数据库的连接URL格式不同,若写错,驱动就无法找到目标数据库。 - **用户名和密码错误**:连接数据库时需提供正确的用户名和密码,若信息错误,数据库会拒绝连接,导致驱动无法正常工作。 ### 环境问题 - **Java环境问题**:Java运行环境的配置可能影响驱动的加载和使用。比如Java的类路径配置错误,可能使驱动包无法被正确找到。 - **数据库服务问题**:若数据库服务未启动,或者数据库服务出现故障,JDBC驱动无法与数据库建立连接。 ### 代码示例 以下是一个简单的JDBC连接示例,展示了正确加载驱动和建立连接的代码: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class JdbcExample { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/mydb"; String username = "root"; String password = "password"; try { // 加载驱动类(JDBC 4.0及以上可选) // Class.forName("com.mysql.cj.jdbc.Driver"); // 建立连接 Connection connection = DriverManager.getConnection(url, username, password); System.out.println("连接成功!"); // 关闭连接 connection.close(); } catch (SQLException e) { System.out.println("连接失败:" + e.getMessage()); } } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值