`
jimphei
  • 浏览: 40099 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

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

    5. **事务(Transaction)管理**:JDBC支持ACID(原子性、一致性、隔离性和持久性)事务属性,确保数据的完整性和一致性。`Connection`对象提供了开始、提交和回滚事务的方法。 6. **批处理(Batch Processing)**...

    sqljdbc和sqljdbc4 sqlserver最新驱动

    SQLJDBC和SQLJDBC4是Microsoft为Java应用程序提供的用于连接SQL Server数据库的驱动程序。这两个版本都是JDBC(Java Database Connectivity)驱动,允许Java开发者在应用程序中与SQL Server进行交互。下面将详细介绍...

    JDBCDriver3.0.rar_jdbc driver 3.0_sql jdbc 3.0_sql server jdbc_s

    5. **事务处理**:JDBC提供了对ACID(原子性、一致性、隔离性、持久性)事务的支持,确保数据的一致性。 对于SQL Server特定的功能,如T-SQL存储过程,JDBC Driver 3.0也提供了调用接口。开发者可以通过...

    Spring Data JDBC与JDBC的区别

    总结起来,Spring Data JDBC通过提供高级的抽象和自动化,降低了数据库操作的复杂性,提高了开发效率,而JDBC则是底层的数据库访问API,灵活性更高但需要更多的手动配置和代码编写。根据项目需求和团队技能,开发者...

    sqljdbc42 jdbc for java

    此外,JDBC也提供了事务管理功能,可以控制一组数据库操作的原子性,确保数据一致性。 六、最佳实践 1. 连接池:使用连接池(如HikariCP或C3P0)管理数据库连接,以提高性能和资源利用率。 2. 数据库连接关闭:...

    JDBC6和JDBC14

    4. **RowSet接口的增强**:JDBC6支持类型4的JavaBeans Compliant RowSets,允许离线操作数据,增强了数据的移动性和可移植性。 5. **Unicode增强**:对Unicode字符集的支持得到了加强,处理多语言数据更加便捷。 6...

    hive-jdbc hive jdbc驱动

    hive-jdbc

    JDBC 4.3规范文档

    JDBC 4.3规范文档是Java数据库连接(JDBC)API的官方...通过遵循JDBC规范,开发者可以编写出能够在多种数据库系统中移植的代码,同时确保代码的可维护性和扩展性。而对规范文档的深入学习,则是获取这一知识的开始。

    JDBC 解析JDBC中文API

    JDBC 解析JDBC中文API各种数据库之间的链接问题,网络编程

    sqljdbc41、sqljdbc42的官方jar包

    在Java编程语言中,JDBC(Java Database Connectivity)是一个核心的...正确选择和使用JDBC驱动可以确保应用程序的兼容性和最佳性能。在升级Java版本或数据库时,记得检查并更新对应的JDBC驱动,以保持最佳的互操作性。

    jdbc学习手册 jdbc

    ### JDBC学习手册精要 #### 一、JDBC概述 JDBC(Java DataBase Connectivity),即Java数据库连接,是由Sun ...通过理解这些概念和API,开发者可以更好地使用JDBC进行数据库操作,提高应用程序的性能和安全性。

    全面解析JDBC 全面解析JDBC

    1. **标准化**:JDBC提供了一套标准API,使得Java开发人员能够以相同的方式连接到不同的数据库,这极大地提高了代码的可移植性和灵活性。 2. **广泛的数据库支持**:通过JDBC,Java程序可以连接到几乎所有主流的...

    jdbc.zip_java jdbc_java+jdbc_jdbc_jdbc Java_zip

    Java JDBC(Java Database Connectivity)是Java编程语言中用于与各种关系数据库进行交互的一组接口和类。它作为标准API,允许开发人员通过编写Java代码来访问和操作数据库,无需了解数据库特定的SQL语法或者驱动...

    jdbc2000,jdbc2005

    Java Database Connectivity(JDBC)是Java编程语言中用于与各种数据库进行交互的一组接口和类。JDBC2000和JDBC2005分别指的是在2000年和2005年时期的JDBC规范版本。这两个版本都是在Java数据库连接技术的发展历程中...

    sqljdbc4.jar, sqljdbc41.jar, sqljdbc42.jar三个包

    标题中的"sqljdbc4.jar, sqljdbc41.jar, sqljdbc42.jar"是指Microsoft SQL Server为Java应用程序提供的Java Database Connectivity (JDBC)驱动程序。这些JAR文件是数据库连接的关键,允许Java代码与SQL Server进行...

    JDBC 开发指南 JDBC 开发指南 JDBC 开发指南

    为了确保应用程序的可移植性和兼容性,必须遵循 JDBC 规范中关于异步处理、线程安全性和事务管理等方面的规定。 ##### 4.8 提供游标支持 JDBC NetServer 支持游标,允许用户逐行访问查询结果,这对于处理大量数据...

    sqlserver驱动包 jdbc驱动 sqljdbc.jar和sqljdbc4.jar

    sqljdbc.jar和sqljdbc4.jar属于Type 4,即纯Java实现的驱动,无需依赖于数据库供应商的特定接口或中间件,因此具有较好的跨平台性。 要使用这些驱动,开发者首先需要在项目中引入对应的jar文件,然后通过以下步骤...

    mysql jdbc 驱动 适用于5.7及以上版本数据库

    mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上...

Global site tag (gtag.js) - Google Analytics