JDBC概述

JDBC概述

  • 博客分类:
  • JDBC
定义
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序。

有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。换言之,有了JDBC API,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL调用。同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势。

Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法。JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。作为API,JDBC为程序开发提供标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。JDBC使用已有的SQL标准并支持与其它数据库连接标准,如ODBC之间的桥接。JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。


JDBC 的用途

简单地说,JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果。下列代码段给出了以上三步的基本示例:   
Connection con = DriverManager.getConnection("jdbc:odbc:wombat","login",   "password");   
Statement stmt = con.createStatement();   ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");   
while (rs.next()) {   
int x = rs.getInt("a");   
String s = rs.getString("b");   
float f = rs.getFloat("c");   
}


JDBC API

JDBC 是个"低级"接口,也就是说,它用于直接调用 SQL 命令。在这方面它的功能极佳,并比其它的数据库连接 API 易于使用,但它同时也被设计为一种基础接口,在它之上可以建立高级接口和工具。高级接口是"对用户友好的"接口,它使用的是一种更易理解和更为方便的 API,这种API在幕后被转换为诸如 JDBC 这样的低级接口。   
在关系数据库的"对象/关系"映射中,表中的每行对应于类的一个实例,而每列的值对应于该实例的一个属性。于是,程序员可直接对 Java 对象进行操作;存取数据所需的 SQL 调用将在"掩盖下"自动生成。此外还可提供更复杂的映射,例如将多个表中的行结合进一个 Java 类中。

JDBC 入门

 装载驱动程序   装载驱动程序只需要非常简单的一行代码。例如,你想要使用 JDBC-ODBC 桥驱动程序, 可以用下列代码装载它:   
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //注册该类
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();//注册该类并实例化一个对象。

   建立连接   
第二步就是用适当的驱动程序类与 DBMS 建立一个连接。下列代码是一般的做法:   Connection con = DriverManager.getConnection(url, "myLogin", "myPassword");   这个步骤也非常简单,最难的是怎么提供 url。如果你正在使用 JDBC-ODBC 桥, JDBC URL 将以 jdbc:odbc 开始:余下 URL 通常是你的数据源名字或数据库系统。因此,假设你正在使用 ODBC 存取一个叫 "Fred" 的 ODBC 数据源,你的 JDBC URL 是 jdbc:odbc:Fred 。把 "myLogin" 及 "myPassword" 替换为你登陆 DBMS 的用户名及口令。如果你登陆数据库系统的用户名为 "Fernanda" 口令为 "J8",只需下面的 2 行代码就可以建立一个连接:   
String url = "jdbc:odbc:Fred";   
Connection con = DriverManager.getConnection(url,"Fernanda", "J8");

创建 JDBC Statements 对象
Statement stmt = con.createStatement();//直接处理

PreparedStatement pst=conn.prepareStatement("delete from VenueTime where Company_Id=? AND Time_Id=?");//预处理,防止注入攻击

pst.addBatch();//加上这与用于批处理

执行语句
stmt.executeUpdate(sql);//直接处理

pst.executeUpdate();//预处理

pst.executeBatch();//批处理

resultset rs=stmt.executequery(sql) //查询语句


jdbc编程的陷阱
1、conn一定要在finally语句块进行关闭。
2、statement、resultset尽可能缩小其变量作用域。
3、statement可以使用多次,定义多个。一个statement对象只和一个resultset对象关联,并且是最后一次查询。
4、resultset在connection、resultset关闭后自动关闭。
5.PreparedStatement防止注入式攻击

jdbc提供四种隔离级:

TRANSACTION_READ_UNCOMMITTED。

在提交前一个事务可以看到另一个事务的变化,脏读,不可重复读和虚度都可能发生。

TRANSACTION_READ_COMMITTED。

读取未提交的数据是不允许的,不可重复的读和虚读可能发生。

TRANSACTION_REPEATABLE_READ。

可以保证一个事务内读取的数据不会被改变,虚读仍然会出现。

TRANSACTION_SERIALIZABLE。

最高的事务级别,防止脏读、不可重复的读和虚读。


JDBC的不足
尽管JDBC在JAVA语言层面实现了统一,但不同数据库仍旧有许多差异。为了更好地实现跨数据库操作,于是诞生了Hibernate项目,Hibernate是对JDBC的再封装,实现了对数据库操作更宽泛的统一和更好的可移植性。

连接各种数据库

1、Oracle8/8i/9i数据库(thin模式)

Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();


String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl为数据库的SID
String user="test";
String password="test";
Connection conn= DriverManager.getConnection(url,user,password); 


2、DB2数据库

Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample"; //sample为你的数据库名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password); 

 3、Sql Server7.0/2000数据库

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb";
//mydb为数据库
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password); 


4、MySQL数据库

Class.forName("org.gjt.mm.mysql.Driver").newInstance(); //或者Class.forName("com.mysql.jdbc.Driver");
String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"
//myDB为数据库名
Connection conn= DriverManager.getConnection(url); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值