Java数据库连接(JDBC)【整理】

来源:互联网 发布:sql select into 编辑:程序博客网 时间:2024/05/18 03:31


Java 数据库连接 (Java Database Connectivity,简称JDBC) 是一个标准 SQL(Structured Query Language,结构化查询语言)数据库访问接口,可以为多种关系
数据库提供统一访问(JDBC是面向关系型数据库的)。JDBC 也提供一种基准,据此可以构建更高级的工具和接口。 JDK(Java Development Kit,Java 开发工具包)
软件捆绑包括 JDBC 和 JDBC-ODBC桥(Open DataBase Connection,开放式数据库连接)。

JDBC驱动程序共分四种类型:
⑴JDBC-ODBC桥加ODBC驱动程序
JavaSoft桥产品利用ODBC驱动程序提供JDBC访问。注意,必须将ODBC二进制代码(许多情况下还包括数据库客户机代码)加载到使用该驱动程序的每个客户机上。因
此,这种类型的驱动程序最适合于企业网(这种网络上客户机的安装不是主要问题),或者是用Java编写的三层结构的应用程序服务器代码。

⑵本地API
这种类型的驱动程序把客户机API上的JDBC调用转换为Oracle、Sybase、Informix、DB2或其它DBMS的调用。注意,象桥驱动程序一样,这种类型的驱动程序要求将某些二进制代码加载到每台客户机上。

⑶JDBC网络纯Java驱动程序
这种驱动程序将JDBC转换为与DBMS无关的网络协议,之后这种协议又被某个服务器转换为一种DBMS协议。这种网络服务器中间件能够将它的纯Java客户机连接到多种
不同的数据库上。所用的具体协议取决于提供者。通常,这是最为灵活的JDBC驱动程序。有可能所有这种解决方案的提供者都提供适合于Intranet用的产品。为b所提
出的安全性、通过防火墙的访问等方面的额外要求。几家提供者正将JDBC驱动程序加到他们现有的数据库中间件产品中。

⑷本地协议纯Java驱动程序
这种类型的驱动程序将JDBC调用直接转换为DBMS所使用的网络协议。这将允许从客户机机器上直接调用DBMS服务器,是Intranet访问的一个很实用的解决方法。由于
许多这样的协议都是专用的,因此数据库提供者自己将是主要来源,有几家提供者已在着手做这件事了。

建议链接的五大步骤:
1加载(注册)数据库
2 建立链接
3 执行SQL语句
4 处理结果集
5 关闭数据库

1.加载(注册)数据库  装载驱动程序
驱动加载就是把各个数据库提供的访问数据库的API加载到我们程序进来,加载JDBC驱动,并将其注册到DriverManager中,每一种数据库提供的数据库驱动不一样,
加载驱动时要把jar包添加到lib文件夹下

String Dirver="com.mysql.jdbc.Driver";//驱动程序 JDBC驱动包的名字
String Driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";  //驱动程序
String Driver="com.sybase.jdbc.sybDriver";  //驱动程序
String Driver="oracle.jdbc.driver.OracleDriver";  //驱动程序
String Driver="sun.jdbc.odbc.JdbcodbcDriver";  //驱动程序

Class.forName(Driver);

你不需要创建一个驱动程序类的实例并且用 DriverManager 登记它,因为调用 Class.forName 将自动将加载驱动程序类。如果你曾自己创建实例,你将创建一个不
必要的副本,但它不会带来什么坏处。
加载 Driver 类后,它们即可用来与数据库建立连接。
Class.forName()方法将给定的类加载到JVM,如果系统中不存在给定的类,则会引发异常.
JDBC URL的标准语法如下所示。它由三部分组成,各部分间用冒号分隔:

jdbc:<;协议:子协议:子名称>
String url="jdbc:oracle:thin:@localhost:1521:orcl";
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
String url="jdbc:db2://localhost:5000/sample";
String url="jdbc:mysql://localhost:3306/testDB?
String url="jdbc:odbc:dbsource"; //连接的URL,dbsource为数据源名  JDBC-ODBC桥连接

2.建立连接
Connection con = DriverManager.getConnection(url,"myLogin","myPassword");
如果你装载的驱动程序识别了提供给 DriverManager.getConnection 的 JDBC URL ,那个驱动程序将根据 JDBC URL 建立一个到指定 DBMS 的连接。DriverManager.getConnection 方法返回一个打开的连接,你可以使用此连接创建 JDBC statements 并发送 SQL 语句到数据库。
DriverManager类存有已注册的Driver类的清单。当调用方法getConnection时,它将检查清单中的每个驱动程序,直到找到可与URL中指定的数据库进行连接的驱动程序为止。

3.发送SQL语句
JDBC提供了三个类,用于向数据库发送SQL语句。Connection接口中的三个方法可用于创建这些类的实例。下面列出这些类及其创建方法:
⑴ Statement:由方法createStatement所创建。Statement对象用于发送简单的SQL语句。
Statement stmt=conn.createStatement();
stmt.executeQuery(sql); // 执行数据查询语句(select)
stmt.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)

⑵PreparedStatement:由方法prepareStatement所创建。PreparedStatement对象用于发送带有一个或多个输入参数(IN参数)的SQL语句。PreparedStatement拥有一组方法,用于设置IN参数的值。执行语句时,这些IN参数将被送到数据库中。PreparedStatement的实例扩展了Statement,因此它们都包括了Statement的方法。PreparedStatement对象有可能比Statement对象的效率更高,因为它已被预编译过并存放在那以供将来使用。

//建立PreparedStatement对象
  String sql="select * from user where userName=? and password=?";
  PreparedStatement pstmt=Conn.prepareStatement(sql);
  pstmt.setString(1,"admin");
  pstmt.setString(2,"liubin");
ResultSet rs = pstmt.executeQuery(); // 查询
int c = pstmt.executeUpdate(); // 更新

⑶CallableStatement:由方法prepareCall所创建。CallableStatement对象用于执行SQL储存程序─一组可通过名称来调用(就象函数的调用那样)的SQL语句。CallableStatement对象从PreparedStatement中继承了用于处理IN参数的方法,而且还增加了用于处理OUT参数和INOUT参数的方法。

CallableStatement call = connection.prepareCall("{call member_rank(?, ?, ?, ?)}");
   call.setDate(1, sqlDateBegin);
   call.setDate(2, sqlDateEnd);
   call.setLong(3, memberId);
   call.registerOutParameter(4, Types.NUMERIC);

4 处理结果集

访问结果记录集ResultSet对象。例如:
  while(rs.next)
  { 
  out.println("你的第一个字段内容为:"+rs.getString("Name"));
  out.println("你的第二个字段内容为:"+rs.getString(2));
  }

 或者
while(rs.next())//只要后面有记录
{
//对当前行的所有字段遍历
for(int i=1;i<=rs.getMetaData().getColumnCount();i++)
{
System.out.print(rs.getMetaData().getColumnName(i)+": ");//显示字段名
System.out.println(rs.getString(i));//显示字段当前值
}
System.out.println();
}

5 关闭数据库各个链接
依次将ResultSet、Statement、PreparedStatement、Connection对象关闭,释放所占用的资源.例如:
  rs.close();
  stmt.clost();
  pstmt.close();
  con.close();

0 0
原创粉丝点击