ODBC—Open Database Connectivity
ODBC(开放数据库连接)是微软公司建立的一组规范,并提供了一组对数据库访问的标准API。ODBC提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。
基于 SQL (Structured Query Language-结构化查询语言)的数据库引擎,基于 C 语言提供一个一致的方式与数据库进行通信,用于访问数据库的数据.
它本身是为了使数据库的使用者不必考虑使用的是何种数据库而能完成相同的操作而设计的。使数据库开发人员方便的对各种不同的数据库进行访问和操作。
JDBC
ODBC Java 版本
SUN公司提出的使用Java访问数据库的规范
JDBC-ODBC 桥 是sun公司提供的,是jdk提供的的标准API. 这种类型的驱动实际是把所有JDBC的调用传递给ODBC ,再由ODBC调用本地数据库驱动代码( 由数据库厂商提供的数据库操作二进制代码库,例如在oracle for windows中就是oci dll 文 件)。
ODBC:Opened Database Connection
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:MySchool";
Connection conn = DriverManager.getConnection(url, username, password);
JDBC启动桥接方式的特点:
1)多种ODBC数据源支持:只要本地机装有相关的ODBC驱动,几乎可以访问所有的数据库。
2)执行效率较低:先调用ODBC,再由ODBC调用本地数据库接口来访问数据库。故对于那些大数据量存取的应用程序不太合适。
3)客户端须安装ODBC驱动:要求客户端必须安装ODBC驱动。故对于基于internet或intranet的应用不合适。因为,不可能要求所有客户端都找到ODBC驱动。
JDBC:Java Database Connection;
JDBC(Java Data Base Connectivity,java数据库连接),由一些接口和类构成的API。
J2SE的一部分,由java.sql,javax.sql包组成。
JDBC API主要由两部分组成:
为Java 应用程序开发人员提供的 Java 应用程序开发接口
JDBC驱动开发人员实现的接口
ODBC:Opened Database Connection;
JDBC驱动:
实现了JDBC接口的类的集合
实现了java.sql.Driver 接口的类
任何数据库驱动类都必须实现java.sql.Driver接口
不同数据库,驱动是不一样的
JDBC驱动由数据库厂商实现
使用这些驱动可以连接数据库,访问并操作数据库中的数据。
两种主要类型:
JDBC-ODBC桥+ODBC驱动(即桥连接方式)
本地协议驱动(即纯java驱动,直连接方式)
JDBC驱动的特点:
1)执行效率高:直接把JDBC调用转换为符合相关数据库系统规范的请求,没有中间转换,效率高。
2)跨平台:这种类型的驱动完全由JAVA实现,因此实现了平台独立性。
3)对于不同的数据库,需要下载不同的驱动程序包。
JDBC连接Oracle:
Class.forName("oracle.jdbc.driver.OracleDriver");//oracle数据库驱动类的完全限定类名
String url = "jdbc:oracle:thin:@localhost:1521:orcl";//orcl为数据库实例名
Connection conn = DriverManager.getConnection(url, "test ", " test123456 ");//url,数据库用户名及密码
JDBC开发接口和类:
java.sql—Java 2平台上的JDBC主要功能(J2SE)
javax.sql—Java 2平台上的JDBC扩展功能(J2EE)
Driver接口:数据库驱动接口。
DriverManager类:管理各种驱动的类。
Connection接口:对连接进行管理。
Statement接口:对数据库进行操作。
PreparedStatement接口:对预编译的SQL语句进行处理。
CallableStatement接口:执行数据库存储过程。
ResultSet接口:数据库结果集。
DatabaseMetadata接口:数据库的整体综合信息,由驱动程序供应商实现。
ResultSetMetadata接口:用于获取关于 ResultSet 对象中列的类型和属性信息。
Types类:用于标识SQL 中数据的类型。
DriverManager类管理所有的驱动类。
通过驱动类可以获得多个数据库连接(Connection)。
通过每个Connection对象可以获得多个Statement对象。
通过每个Statement对象可以执行SQL语句,对数据进行查询操作获得ResultSet对象。
通过Statement对象执行SQL语句,也可以对数据进行增加、删除、修改等其他操作。
使用URL标识数据库:
conn = DriverManager.getConnection(url);
url标识数据库以便驱动能正确的识别并建立数据库连接
由提供者确定
允许间接访问
语法:
jdbc:subprotocol:subname
示例:
jdbc:odbc:dbname //odbc连接
jdbc:oracle:thin:@localhost:1521:orcl //连接oracle数据库
jdbc:mysql://localhost:3306/test //mysql连接
jdbc:sqlserver://localhost:1433;databaseName=test //连接SQL Server数据库
JDBC操作步骤
导入包java.sql.*
加载驱动,创建连接对象
创建操作对象,操作数据表数据
获取查询数据对象,操作查询数据(只在查询操作)
关闭数据库各对象
JDBC基本步骤:
1.加载驱动
2.创建连接对象
3.创建SQL语句
4.创建语句对象
5.执行SQL语句获得数据集对象
6.遍历数据集
7.释放资源(数据集/语句/连接)
Java连接数据库的两种方式:
1.JDBC-ODBC桥:无需提供第三方的数据驱动
2.JDBC
Java连接SQLServer数据库:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url="jdbc:odbc:数据库名";
Connection conn=DriverManager.getConnection(url,"数据库用户名","数据库密码");
if(conn!=null)
{
System.out.println("SQL Server连接成功")!
}else{
System.out.println("SQL Server连接失败")!
}
JDBC连接数据库方法步骤:
1.加载驱动
2.获取数据库的连接
3.创建语句对象
4.获得数据集
5.遍历数据集
6.释放资源(1.释放数据集,2.释放语句, 3.释放连接对象)
JDBC连接SQL Server
package java_jdbc;
//JDBC连接SQL Server
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
/*
* JDBC连接数据库的基本步骤
*
* 1.加载驱动
* 2.获取数据库的连接
* 3.创建语句对象
* 4.获得数据集
* 5.遍历数据集
*
* 6.释放资源(
* 1.释放数据集
* 2.释放语句
* 3.释放连接对象。
* )
*
* 使用JDBC去连接SQLServer2008
*
* */
public class JdbcSQLServerTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.加载驱动
Connection conn = null; //连接对象
Statement stmt = null; //语句对象
ResultSet rs = null ; //数据集对象
String url = "jdbc:sqlserver://localhost:1433;databaseName=test";
String username = "sa";
String password = "123456";
try
{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//2.获得数据库连接
conn = DriverManager.getConnection(url, username, password);
/*
//判断数据库连接是否成功
if(conn!=null)
{
System.out.println("数据库连接成功!");
}
else
{
System.out.println("数据库连接失败!");
}*/
//3.创建语句对象
stmt = conn.createStatement();
String sql = "select * from users";
rs = stmt.executeQuery(sql);
while(rs.next())
{
System.out.println(rs.getInt("id")+","+rs.getString("username")+","+rs.getString("password"));
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
finally
{
try
{
if(rs!=null)
{
rs.close();
rs = null;
}
if(stmt!=null)
{
stmt.close();
stmt = null;
}
if(conn!=null)
{
conn.close();
conn = null;
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
}
JDBC连接MySQL
package java_jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcMysqlTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.加载驱动
Connection conn=null; //连接对象
Statement stmt=null; //语句对象
ResultSet rs=null; //数据集对象
/*用于处理中文乱码
* String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8";
* */
String url="jdbc:mysql://localhost:3306/test";
String username="root";
String password="root";
try {
Class.forName("com.mysql.jdbc.Driver");
//2.获得数据库连接
conn=DriverManager.getConnection(url,username,password);
/*
//判断数据库是否连接成功
if(conn!=null)
{
System.out.println("MySql数据库连接成功");
}else{
System.out.println("MySql数据库连接失败");
}
*/
//3.创建语句对象
stmt=conn.createStatement();
String sql="select * from users"; //users是数据表名
rs=stmt.executeQuery(sql);
//遍历获取数据表中的数据
while(rs.next())
{
System.out.println(rs.getInt("id")+","+rs.getString("username")+","+rs.getString("password"));
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//关闭资源
try {
if (rs != null) {
rs.close();
rs = null;
}
if (stmt != null) {
stmt.close();
stmt = null;
}
if (conn != null) {
conn.close();
conn = null;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
JDBC连接Oracle:
package java_jdbc;
//java连接Oracle数据库
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcOracleTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.加载驱动
Connection conn=null; //连接对象
Statement stmt=null; //语句对象
ResultSet rs=null; //数据集对象
String url="jdbc:oracle:thin:@localhost:1521:orcl";
String username="scott"; //Oracle数据库用户名
String password="tiger"; //Oracle数据库密码
try {
Class.forName("oracle.jdbc.OracleDriver");
//2.获得数据库连接
conn=DriverManager.getConnection(url,username,password);
/*
//判断数据库连接是否成功
if(conn!=null)
{
System.out.println("Oracle数据库间接成功");
}else{
System.out.println("Oracle数据库连接失败");
}
*/
//3.创建语句对象
stmt=conn.createStatement();
String sql="select * from students";//students是Oracle数据库中的表名
rs=stmt.executeQuery(sql);
//遍历输出数据库students表中的数据
while(rs.next())
{
System.out.println(rs.getInt("sid")+","+
rs.getString("sname")+","+rs.getString("gender")+","+
rs.getString("birthday")+","+rs.getString("marjor")+","+
rs.getString("address"));
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
if (rs != null) {
rs.close();
rs = null;
}
if (stmt != null) {
stmt.close();
stmt = null;
}
if (conn != null) {
conn.close();
conn = null;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
JDBC报错基本分析思路:
1.如果是连接失败
A.服务器启动
B.是否加载驱动
C.检查URL地址,用户名,密码
D.驱动的版本问题
2.语法错误
A.数据库名字,表名是否拼写正确
B.SQL语句是否拼写正确
热门评论
这个要先把Oracle驱动包引入项目
6666666666