`
lhx1026
  • 浏览: 308158 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

jdbc知识

    博客分类:
  • jdbc
阅读更多

1、建立数据库连接

      首先要建立一个到想要使用的DBMS的连接。这包括两个步骤:(1) 加载驱动程序;(2) 创建连接。


   (1) 加载驱动程序
         Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //字符串为他驱动程序的类名

  (2) 创建连接

      创建连接的第二步是使用合适的驱动程序连接到DBMS。如下代码行示范了一般的用法:

            //url字符串为使用的子协议,也就是在JDBC URL中放在jdbc:之后的东西
          Connection con = DriverManager.getConnection(url,"myLogin", "myPassword");

2、创建和执行JDBC语句

   Statement对象可将SQL语句发送到DBMS。这只要创建一个Statement对象,将想要执行的SQL语句传递给适当的执行方法,

然后执行该Statement对象。

      Statement stmt = con.createStatement();

 

   对于SELECT语句,使用的方法是executeQuery。对于创建或修改表的语句,使用的方法是executeUpdate。

   //strSQL字符串是一条DDL(数据描述语言)语句

   stmt.executeUpdate(strSQL);

 

3、处理结果

   JDBC将结果集返回给ResultSet对象

   //strSQL字符串是一条查询语句  

   ResultSet rs = stmt.executeQuery(strSQL);

   1)next方法

   变量rs(ResultSet的一个实例)包含了结果集中显示的表。为访问名称和单价要移动到每一行,根据它们的类型检索数值。

next方法将光标移到下一行,使那行(称为当前行)成为可在其上操作的行。由于光标初始定位于ResultSet对象第一行的上面,

所以第一次调用next方法将光标移到第一行,使它成为当前行。接下来调用next方法将使光标从上至下每次移动一行。

   2)getXXX方法

   适当类型的getXXX方法可用于检索列中的数值。检索VARCHAR SQL类型数值的方法是getString。检索该类型数值的方法是getFloat。

每次调用next方法,下一行就成为当前行,循环一直持续到rs中再也没有可向前移动的行为止。

while (rs.next())

{

    String s = rs.getString(strColumnName1 );//strColumnName1为strSQL字符串中的列名

    float n = rs.getFloat(strColumnName2)//strColumnName2为strSQL字符串中的列名

    System.out.println(s + " " + n);

}

JDBC使用两种方法标识getXXX方法检索数值的列。一种是指定列名,这也是前面例子所做的。

另一种是指定列索引(列的序号),1表示第一列,2表示第二列,以此类推。

   String s = rs.getString(1); float n = rs.getFloat(2);

   3)getString方法

   尽管推荐使用getString方法检索CHAR和VARCHAR SQL类型的数据,但也可能用它检索其他基本SQL类型的数据

(但不可用它检索新的SQL3数据类型。本教程后面将讨论SQL3类型)。用getString检索所有数值有很多优点但也有局限。

如果用它检索numeric类型的数据,getString将把numeric值转换成Java的String对象,这样一来,在数据要作为数字前就必须转换回numeric类型。

在数值一直当成字符串的场合,这是无可非议的。如果想让程序检索除了SQL3类型之外的任何标准SQL类型,就可用getString方法。

 

4、关闭连接

   connection.close();

 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

下面是个完整的例子:

1)下载并安装Microsoft JDBC (http://download.microsoft.com/download/SQLSVR2000/Install/2.2.0022/NT5XP/EN-US/setup.exe)

2) 安装完成Microsoft JDBC后,将安装目录中的lib目录下三个jar文件msbase.jar, mssqlserver.jar, msutil.jar引入项目中

3)建立数据库tempdb,建立表COFFEES,SQL语句为:

   CREATE TABLE COFFEES (COF_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, SALES INTEGER, TOTAL INTEGER)

4)给表COFFEES添加一些数据,如:

   INSERT INTO COFFEES VALUES ('Colombian', 101, 7.99, 0, 0);

5)输入以下源文件,并执行

import java.sql.*;

/**
 * @author liujun TODO To change the template for this generated type comment go
 *         to Window - Preferences - Java - Code Style - Code Templates
 */
public class JDBC_01
{

    public static void main(String[] args)
    {
        showTable();
    }

    public static void showTable()
    {

        //String strDriver="sun.jdbc.odbc.JdbcOdbcDriver";
        String strDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
        //String strConnUrl="jdbc:odbc:TempDataSources";
        String strConnUrl = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=tempdb";
        String strSQL = "select * from COFFEES";

        try
        {
            //加载驱动程序
            Class.forName(strDriver);
            //创建连接
            Connection objConn = DriverManager.getConnection(strConnUrl, "sa",
                    "");
            //创建Statement对象
            Statement objStatement = objConn.createStatement();
            //JDBC将结果集返回给ResultSet对象
            ResultSet objSet = objStatement.executeQuery(strSQL);
            //获得查询结果的列数
            int lCloumnCount = objSet.getMetaData().getColumnCount();
            System.out.println("查询结果如下所示");
            //显示列名
            for (int i = 1; i <= lCloumnCount; i++)
            {
                System.out.print(objSet.getMetaData().getColumnName(i)
                        + "       ");
            }
            System.out.println();
            //显示结果
            while (objSet.next())
            {
                //显示COF_NAME
                System.out.print("" + objSet.getString(1));
                //显示SUP_ID PRICE SALES TOTAL
                System.out.print("        " + objSet.getInt(2));
                //显示 PRICE
                System.out.print("         " + objSet.getFloat(3));
                //显示SALES
                System.out.print("         " + objSet.getInt(4));
                //显示 TOTAL
                System.out.print("        " + objSet.getInt(5));

            }

       objConn.close();

        }
        catch (Exception e)
        {
            System.out.print(e.getMessage());
        }
    }

}

5、使用预备语句

   PreparedStatement对象是包含一条预编译过的SQL语句。DBMS不必编译就可直接运行PreparedStatement的SQL语句。所以代替Statement对象一般会缩短执行时间。尽管paredStatement对象可用于不带参数的SQL语句,但在多数场合是用于带参数的SQL语句。其用法如下:

   String strUpdateSales="UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ?";

   PreparedStatement updateSales = con.prepareStatement(strUpdateSales);

   updateSales.setInt(1, 75);//给上面的SQL语句的第一个问号付值

   updateSales.setString(2, "Colombian");//给上面的SQL语句的第二个问号付值

   updateSales.executeUpdate();//执行UPDATE COFFEES SET SALES = 75 WHERE COF_NAME LIKE ‘Colombian’

因此,可用该对象制作成模板实现一次构造多条带参数的SQL语句,简化编码。

 

6、executeUpdate方法的返回值

   executeQuery返回一个ResultSet对象,但executeUpdate返回的是一个整数值,指出了表中已更新的行数

如果executeUpdate的返回值为0表明如下两种情况:(1) 执行的语句是一不影响任何行的更新语句;(2) 执行的是一DLL语句。

 

 7、使用事务

   一个事务是作为一个单元执行的一组语句(一条或多条语句),因此它们要么全部执行,要么全部不执行。要让两条或更多条语句组成

一个事务就要禁用自动提交模式,具体用方法con.setAutoCommit(false);一旦禁用了自动提交模式,就没有SQL语句会提交了,

除非您显式调用con.commit()方法,实现提交事务。

   使用事务可以保持数据完整性。调用rollback方法可取消一个事务,将修改的任何数据返还到以前的值。如果在执行一个事务

中的一条或多条语句时得到了SQLException。就应该调用rollback方法取消事务,从头开始整个事务。一般要在catch块中调用

rollback,以避免可能使用不正确的数据。

 

8、检索警告

   SQLWarning对象是SQLException的子类,用于处理数据库访问警告。就像异常一样,警告并不终止程序的执行;它们只是提醒

用户——发生了一些未预料的事情。Connection对象、Statement对象(包括PreparedStatement和CallableStatement对象)

或ResultSet对象都会报告警告。这些类都有getWarnings方法,为查看调用对象报告的第一个警告,就必须调用该方法。如果

getWarnings返回一个警告,就可在其上调用SQLWarning方法getNextWarning取得其他警告。自动执行一条语句会清除前一条语句

的警告,因此警告不会迭加。但这也表明提取一条语句报告的警告必须在执行下一语句之前进行。

 

9、存储过程

   存储过程是一组SQL语句组成的逻辑单元,用于执行特定的任务。存储过程用于封装数据库服务器上执行的一组操作或查询。

存储过程可以编译,然后使用不同的参数和结果执行,这些参数和结果可以是输入、输出和输入/输出参数的任意组合。

   1)用SQL语句创建存储过程

   如下所示,其方法同其他的DDL语句相同:

   String createProcedure = "create procedure SHOW_SUPPLIERS " +

       "as " +"select SUPPLIERS.SUP_NAME, COFFEES.COF_NAME " +

       "from SUPPLIERS, COFFEES " +"where SUPPLIERS.SUP_ID = COFFEES.SUP_ID " +

       "order by SUP_NAME";

   Statement stmt = con.createStatement();

   stmt.executeUpdate(createProcedure);

   2)从JDBC调用存储过程

   第一步是创建一个CallableStatement对象。CallableStatement对象包含了存储过程的一个调用;但它不包含存储过程

本身。接着使用连接con创建了存储过程的一个调用。花括号内的那部分就是存储过程的转义语法。当驱动程序碰到

“{call SHOW_SUPPLIERS}”时,它将把这个转义语法转换成数据库使用的本地SQL,以调用call 后面的的存储过程。

如下所示:

   CallableStatement cs = con.prepareCall("{call SHOW_SUPPLIERS}");

   ResultSet rs = cs.executeQuery();

   注意,用于执行cs的方法是executeQuery,因为cs调用的存储过程包含一个查询,执行后产生一个结果集。如果存储过程

包含一条更新或一条DLL语句,那就要使用executeUpdate方法。但有时一个存储过程包含多条SQL语句,因而它产生的不只是

一个结果集、不只是一个更新计数或产生一些结果集和更新计数的组合。这样就有多个结果集,这时就应该使用execute方法

来执行CallableStatement。 CallableStatement类是PreparedStatement的子类,因此CallableStatement对象可与

PreparedStatement对象一样带有输入参数。此外,CallableStatement对象还可带输出参数或输入/输出参数。

分享到:
评论

相关推荐

    JDBC知识点总结

    ### JDBC知识点总结 #### 一、JDBC概述 **简介** JDBC (Java Database Connectivity) 是由 SUN 公司提供的一套标准规范,用于在 Java 应用程序中访问关系型数据库。它允许 Java 程序通过统一的 API 与不同的...

    jdbc知识带注释

    **JDBC知识详解** Java Database Connectivity (JDBC) 是Java平台中用于与各种数据库进行交互的标准API。它允许Java程序通过编写SQL语句来访问和处理数据库数据。本篇文章将深入探讨JDBC的基础知识,包括连接数据库...

    jdbc 知识点详解

    【JDBC知识点详解】 JDBC(Java Database Connectivity)是Java编程语言中用于规范客户端程序如何访问数据库的应用程序接口,它是由Sun Microsystems公司定义的一套标准API,使得Java开发者能够使用相同的代码来与...

    JDBC知识点学习分享

    ### JDBC知识点学习分享 #### 一、JDBC简介及基本使用 ##### 1. JDBC定义与背景 **定义**:JDBC(Java Database Connectivity)是一组由Sun Microsystems(现为Oracle公司的一部分)定义的标准Java API(应用程序...

    JDBC知识.doc

    **JDBC知识详解** JDBC(Java Database Connectivity)是Java编程语言中用来规范客户端程序如何访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC是Java平台的标准,使得开发者能够编写与...

    比较全面的 Java JDBC 知识总结 Xmind

    JDBC 知识全面总结 脑图 结构性好 方便记忆

    JDBC知识总结(针对基础知识)

    JDBC(Java Database Connectivity)是Java编程语言中用于与各种数据库进行交互的一套标准API,由Sun Microsystems(现已被Oracle收购)定义。JDBC提供了一种标准的接口,使得Java开发者能够以统一的方式访问不同...

    内置java算法知识+jdbc知识+基础知识的所有代码,多线程,泛型等等都有

    二、JDBC知识 JDBC是Java访问数据库的标准API,允许开发者执行SQL语句、处理结果集等。关键知识点包括: 1. 数据库连接:使用DriverManager.getConnection()方法建立与数据库的连接。 2. 预编译SQL语句:...

    JDBC知识点.xmid

    JDBC知识点

    JDBC知识点总结(java基础知识)

    JDBC,全称为Java Database Connectivity,是Java编程语言中用于规范客户端程序如何访问数据库的应用程序接口,它提供了诸如查询和更新数据库中数据的...尽管如此,理解JDBC的基础知识仍然是每个Java开发者必备的技能。

    jdbc相关知识点的MindMap

    ### JDBC相关知识点详解 #### 一、JDBC简介 JDBC(Java Database Connectivity)是Java中用来对关系型数据库进行统一访问的标准API,它提供了一组接口与规范,允许Java程序连接多种数据库,并执行SQL语句,从而...

    JDBC重要知识点及重要案例

    JDBC可以连接数据库,非常重要,后面可以弄JDBC工具类,十分方便,希望给大家带来方便

    JDBC笔记.pdf

    本篇JDBC笔记详细介绍了JDBC编程的相关知识点,包括数据库连接、SQL语句执行、事务处理等,同时也涉及到了对MySQL数据库的增删改查操作和事务的ACID属性等重要概念。 首先,笔记中提到了JDBC驱动的概念。JDBC驱动是...

    Cassandra JDBC Driver

    2. **遵循JDBC规范**:Cassandra JDBC Driver严格遵循Java Database Connectivity (JDBC) API规范,使得熟悉JDBC的开发者能够轻松地将Cassandra集成到他们的Java应用中,利用已有的JDBC知识进行数据存取操作。...

    AccessJdbc驱动JAR包

    AccessJdbc驱动JAR包是用于Java程序与Microsoft Access数据库进行交互的重要组件。在Java编程环境中,如果需要操作Access数据库,...只要掌握了基本的JDBC知识和适当的驱动管理,就可以高效地与Access数据库进行交互。

    java jdbc练习代码

    Java JDBC(Java Database Connectivity)是Java编程语言中用于与数据库交互的一组接口和...在实际开发中,JDBC常与ORM框架(如Hibernate、MyBatis)结合使用,简化数据库操作,但掌握基础的JDBC知识仍然是必不可少的。

    java,JDBC例子

    以下是一些关键的JDBC知识点: 1. **JDBC驱动**:JDBC驱动是Java程序与数据库之间通信的桥梁。有四种类型的JDBC驱动:JDBC-ODBC桥驱动、网络纯Java驱动、部分Java驱动和完全Java驱动(也称为类型4驱动)。其中,...

    非常好的JDBC学习文档

    总的来说,这个"非常好的JDBC学习文档"将涵盖从基础到进阶的JDBC知识,包括驱动管理、连接创建、SQL执行、事务处理、异常控制、批处理以及连接池的使用。通过学习,你不仅可以掌握数据库操作,还能理解如何在实际...

Global site tag (gtag.js) - Google Analytics