好学IT学院:IT信息技术分享交流平台
标签:Java  来源:互联网  作者:本站整理  发布时间:2010-01-24  ★★★加入收藏〗〖手机版
详解Java开发的数据库连接编程(JDBC)技术
摘要:本文主要讲述JDBC、JDBC的工作原理,访问数据库的方法、Statement、PreparedStatement、CallableStatement,ResultSet等对象的编程使用…

(4)查询数据库的一些结构信息

这主要是获得数据库中的各个表,各个列及数据类型和存储过程等各方面的信息。根据这些信息,从而可以访问一个未知结构的数据库。这主要是通过DatabaseMetaData类的对象来实现并调用其中的方法来获得数据库的详细信息(即数据库的基本信息,数据库中的各个表的情况,表中的各个列的信息及索引方面的信息)。

DatabaseMetaData dbms=con.getMetaData();
  System.out.println("数据库的驱动程序为 "+dbms.getDriverName());

(5)查询数据库中的数据:

在JDBC中查询数据库中的数据的执行方法可以分为三种类型,分别对应Statement (用于执行不带参数的简单SQL语句字符串),PreparedStatement(预编译SQL语句)和CallableStatement(主要用于执行存储过程)三个接口。

9.5.1、实现对数据库的一般查询Statement

1、创建Statement对象(要想执行一个SQL查询语句,必须首先创建出Statement对象,它封装代表要执行的SQL语句)并执行SQL语句以返回一个ResultSet对象,这可以通过Connection类中的createStatement()方法来实现。

Statement stmt=con.createStatement();

2、执行一个SQL查询语句,以查询数据库中的数据。Statement接口提供了三种执行SQL语句的方法:executeQuery()、executeUpdate() 和execute()。具体使用哪一个方法由SQL语句本身来决定。

方法 executeQuery 用于产生单个结果集的语句,例如 SELECT 语句等。
  方法 executeUpdate 用于执行INSERT、UPDATE或DELETE 语句以及SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。
  方法 execute 用于执行返回多个结果集、多个更新计数或二者组合的语句。一般不会需要该高级功能。

下面给出通过Statement类中的executeQuery()方法来实现的代码段。executeQuery()方法的输入参数是一个标准的SQL查询语句,其返回值是一个ResultSet类的对象。

ResultSet rs=stmt. executeQuery ("select * from DBTableName");  

要点:①JDBC在编译时并不对将要执行的SQL查询语句作任何检查,只是将其作为一个String类对象,直到驱动程序执行SQL查询语句时才知道其是否正确。对于错误的SQL查询语句,在执行时将会产生 SQLException。

②一个Statement对象在同一时间只能打开一个结果集,对第二个结果集的打开隐含着对第一个结果集的关闭。

③如果想对多个结果集同时操作,必须创建出多个Statement对象,在每个Statement对象上执行SQL查询语句以获得相应的结果集。

④如果不需要同时处理多个结果集,则可以在一个Statement对象上顺序执行多个SQL查询语句,对获得的结果集进行顺序操作。

import java.sql.*;
  public class ResultSetTest
  {
   public static void main(String args[])
  {
   try
    {  
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    Connection con=DriverManager.getConnection("jdbc:odbc:studlist");
    Statement stmt=con.createStatement();
    ResultSet rs1=stmt.executeQuery("select name from  student");
    ResultSet rs2=stmt.executeQuery("select age from student");

//此时rs1已经被关闭          
    while(rs2.next())
    {  
       System.out.println(rs2.getObject(1));
    }
    rs2.close();
    stmt.close();
     con.close();
    }
   catch(Exception e)
    {
    System.out.println(e);
    }  
   }
  }

注意:

此时显示出的将是姓名还是年龄?(将显示的是rs2的结果集的内容,即学生的年龄,因为采用JDBC-ODBC方式的驱动程序时,并且是采用同一个Statement对象,它只会保留最新的结果集,rs1中的内容将会被新的结果集所取代)。

3、关闭Statement对象:每一个Statement对象在使用完毕后,都应该关闭。

stmt.close();

在Java中使用Oracle blob
  Oracle中的lob(LargeObject)可以存储非常大的数据(可能是4GB),这样就可以通过将文件或其它任何对象序列化成字…
  • 好学触屏公众号虎力全开、杨帆起航!
  • 好学考试H5触屏版开放内测