`
dearwolf
  • 浏览: 346468 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

学习JDBC的心得

阅读更多

一、主要类与接口

首先,要想在mySQL中显示中文,就要在my.ini[mysqld]字段中加入

default-character-set=gb2312

Jdbc注册mySQL驱动的时候,在JBuilder中,新建一个项目,项目属性中有一个Required Library,把驱动程序mysql_comp.jar导入进来就可以了。

java.sql包中有几个比较重要的类和接口,下面一一介绍:

DriverManager

它是驱动程序管理器,作用于用户和驱动程序之间,并在数据库和相应的驱动程序之间建立连接。对于简单的应用程序,一般在此类中需要使用的唯一方法就是DriverManager.getConnection(String url);该方法将建立与数据库的连接。

在使用上面的方法之前,需要先在DriverManager类中注册JDBC数据库驱动程序,一般使用的方法为Class.forname(“Driver name”)。在注册之前,需要先把数据库驱动程序的路径添加到classpath中,对于Jbuilder来说,就是在projectproperty中,添加required library,并指定驱动程序所在的位置,包含进来。

Connection接口

Connection对象代表与数据库的连接,连接一旦建立,就可以用来向它所涉及的数据库传送SQL语句。

功能一

Connection可以创建向数据库发送SQL语句的三个接口:

Statement——createStatement(),执行静态的SQL语句;

PreparedStatement——createPreparedStatement(String sql),发送预编译的带有一个或者多个输入参数的SQL语句;

CallableStatement——createCallableStatement(String sql),该接口对象用于执行数据库的SQL存储过程。

上面三个方法还各带有一个重载方法,都是参数列表中多了两项,仅以第一个方法为例:

createStatement(int resultSetType,int resultSetConcurrency)。其中的resultSetType表示返回记录集的类型——是只能向前滚动,还是可以前后滚动,后面一个resultSetConcurrency表示发送的SQL语句的权限——是属于不能修改的SELECT语句,还是允许修改资料的UPDATEINSERT等语句(具体参见ResultSet的成员变量)。

功能二

执行事务处理。

事务由一个或者多个语句组成,这些语句被一起执行、完成并被提交或者还原。当调用Connection接口的commit方法或者是rollback方法的时候,当前事务即告结束,另一个事务开始。

在默认情况下,新的数据库连接处于自动提交模式,也即是说,当执行完一个语句之后,会自动对那个语句调用commit方法,这种情况下,每个语句都是单独提交,所以一个事物只由一条语句构成。

但是,如果使用Connection接口的public void setAutoCommit(boolean autoCommit)方法,将autoCommit的值设为false,那么就会禁用自动提交模式,事务将会等到commit方法或者是rollback方法调用之后才会结束,它会包括上一次调用这两个方法以来执行的所有语句。

Connection的这个功能可以用来保证数据的完整性,比如在一个更新操作生效之前不让另外一个更新生效,就可以把这两个语句放到一个事务中,如果两个操作都成功,那么就调用commit方法,如果其中一个或者两个都失败了,就调用rollback方法,将值恢复。

<o:p> </o:p>

一定要注意的是,在程序结束的时候,要调用close方法将连接关闭,有助于避免潜在的内存问题。<o:p></o:p>

Statement接口

它用于将普通的SQL语句发送到数据库中,并提供了执行SQL语句和获取结果的基本方法。

功能一

执行SQL语句。

public int[] executeBatch();

public ResultSet executeQuery(String sql);

public int executeUpdate(String sql);

executeUpdate用于执行INSERTDELETE或者UPDATE以及操作TABLE的语句,返回值是int,表示受到影响的行数,对于操作TABLE的语句而言,返回值为0

executeBatch方法用于执行几个SQL语句。Statement接口使用addBatch(String url)方法将几个SQL语句添加到一个语句块中,然后一同提交到数据库服务器。这对于需要执行很多INSERT语句的程序来说,可以节省很多系统资源。

注意,在执行上面三个方法以及下面要讲到的execute方法的时候,都会关闭所调用的Statement对象的当前打开的ResultSet(文档首页对此进行了介绍)。

功能二

获取多个记录集或者数据库记录更新计数——execute方法。

该方法应该仅在语句能够返回多个ResultSet对象、多个更新计数或者ResultSet对象与更新计数的组合的时候使用。

若一个某过程返回两个记录集,则调用方法顺序如下:

execute();

getResultSet();

getXXX();

getMoreResults();

getResultSet();

……

若某过程返回两个更新计数,则调用方法顺序如下:

execute();

getUpdateCount();

getMoreResults();

getUpdateCount();

<o:p> </o:p>

execute方法返回类型为boolean,若过程结果为ResultSet,则返回值为true,若为更新计数(int),则为false

在程序结束的时候,一定要调用close方法将Statement关闭,避免潜在的内存问题。<o:p></o:p>

PreparedStatement接口

该接口对象包含已编译的SQL语句,而且被包含的语句可具有一个或者多个IN参数,IN参数的值在创建SQL语句的时候没有指定,而且都保留一个问号(?)作为占位符,每一个问号的值,都必须在执行之前通过setXXX()方法来提供。

该接口继承了Statement接口的所有功能,而且添加了一整套方法,用于设置发送给数据库以取代IN参数占位符的值,同时executeUpdateexecuteQueryexecute三种方法被进行了重载,不再需要参数。这些方法的接受Statement语句参数的形式不能被用于PreparedStatement,否则会抛出SQLWarning

创建过程如下:

1.          创建一个实例,PreparedStatement pstmt = conn.getPreparedStatement(“UPDATE table SET m = ? WHERE x=?”);

2.        传递IN参数,使用setXXX方法来完成,其中的XXX是参数的对应类型。该方法的第一个参数表示要设置的参数的位置(行数),第二个参数表示要设置给参数的值。如下例:

pstmt.setString(1,”HI”);

for(int i=0;i<10;i++){

       pstmt.setInt(2,i);

       int rowCount = pstmt.executeUpdate();

}

<o:p> </o:p>

PreparedStatement对象中,还可以将输入流作为IN参数的值传递,当语句执行的时候,JDBC驱动程序将会重复调用输入流,读取其内容并将它们作为实际参数数据传输。方法定义如下:

public void setAsciiStream(int parameterIndex, InputStream x, int length)

public void setBinaryStream(int parameterIndex, InputStream x, int length)

示例如下:

File file = new File(“XXX”);

int fileLength = file.length();

InputStream in = FileStream(file);

PreparedStatement pstmt = conn.getPreparedStatement(“UPDATE table SET m = ? WHERE x=?”);

pstmt.setBinaryStream(1,fin,fileLength);

pstmt.executeUpdate();

CallableStatement接口(空)

DatabaseMetaData接口

用于获取数据库的结构。

通过ConnectiongetMetaData方法,可以获取DatabaseMetaData接口的实例对象。

getTables方法,可以获取数据库中现存的各个表、视图的列表。

getColumns方法可以获取特定表的信息,包括有哪些字段、字段名字、数据类型、字段长度等等。

它们都返回了一个ResultSet接口对象。

参看API

ResultSet接口

本接口用于获取执行SQL语句/数据库存储过程返回的结果,它的实例包括符合SQL语句中条件的所有行,并且可以通过getXXX方法(访问当前行中的不同列)提供了对数据的访问,next方法用于移动数据库游标到记录集中的下一行。

二、注意事项

1.          一个Statement对象只能在同一时刻打开一个ResultSet对象,也就是说,如果一个ResultSet对象和另外一个是交叉存取的,那么每一个都必须要被不同的Statement打开。

2.        ResultSet对象永远不会返回null,如果想判断ResultSet是否返回了结果的话,可以使用rs.first()来判断。

3.        SQL语句要针对用户输入来进行操作的话,必须要考虑到用户的输入中可能会包含有特殊字符的情况,所以要对用户的输入进行遍历,然后对特殊字符都使用\来进行转义。

三、通过JDBC数据源执行SQL指令的通用过程

    1、建立一个SQL字符串

    2、得到一个连接

    3、得到一个预处理语句(prepared statement

    4、将值组合到预处理语句中

    5、执行语句

6、遍历结果集并且形成结果对象

同时,还要考虑那些不断出现的SQLExceptions,并使用try/catch块。

分享到:
评论

相关推荐

    数据库概论实验范文实验八:通过JDBC方式访问数据库

    实验报告“实验报告8 JDBC.pdf”可能包含了以下内容:实验目的、实验环境、实验步骤、遇到的问题及解决方案、实验结果分析以及实验心得。学生通常会在报告中详细记录如何设置数据库连接、编写SQL语句,以及如何处理...

    java学习心得,笔记,思想

    学习JDBC包括理解连接池的概念、编写SQL语句、执行查询和更新操作、处理结果集等。了解事务管理和异常处理也是至关重要的,这确保了数据的完整性和一致性。 在描述中提到了"userManager",这可能是实现用户管理功能...

    Java入门1·2·3:一个老鸟的Java学习心得.rar 超清

    《Java入门1·2·3:一个老鸟的Java学习心得》是一本与众不同的Java入门好书。作者以独特的视角,向Java初学者讲述了如何才能真正理解和掌握Java语言。《Java入门1·2·3:一个老鸟的Java学习心得》充分考虑了初学Java...

    自学JDBC数据编程(PDF)

    ### JDBC数据编程基础 在Java开发领域中,与数据库交互是一项基本且重要的技能。Java Database Connectivity(JDBC)是Java中...而对于有一定经验的开发者而言,则可以深入学习其高级特性,以应对更加复杂的业务需求。

    Java web开发学习心得

    Java Web 开发学习心得 Java web 开发学习心得是指通过学习 Java web 开发课程获得的经验和体会。本文将从 Java web 开发的基本概念开始,逐步讲解 Java web 开发的知识点,并总结出学习 Java web 开发的要点和心得...

    java学习心得java学习心得

    ### Java学习心得 在深入探讨Java的学习过程中,我们首先需要明确Java作为一种广泛使用的编程语言,在软件开发、Web应用、移动应用(尤其是Android平台)等领域都有着举足轻重的地位。接下来,我们将围绕“Java学习...

    java学习心得.docx

    Java 学习心得 Java 是一种面向对象的编程语言,它的学习需要转变编程思想,从面向过程到面向对象。要学好 Java,必须知道类和对象的概念,类是对生活中事物的抽象描述,对象是对类的具体实例化。 Java 基础入门...

    2022学习java心得体会(精选5篇)_java心得体会.docx

    本文总结了java学习心得体会,分为五篇。第一篇 java7 学习心得体会,总结了java7 的主要学问点,包括基本语法、类和对象、内部类、匿名类、抽象类、接口、包、输入输出、SWT 各中界面、事务监听和处理、异样处理和...

    swing学习心得资料

    数据库操作则通常涉及到JDBC(Java Database Connectivity),这是Java连接数据库的标准API。在Swing应用中,我们先要加载数据库驱动,然后创建Connection对象,通过Statement或PreparedStatement对象执行SQL语句...

    课程设计jsp学习心得

    JSP学习心得 JSP(Java Server Pages)是一种基于Java的服务器端脚本语言,用于生成动态网页。JSP技术可以将Java代码嵌入到HTML网页中,以生成动态网页内容。JSP程序设计课程的学习体会涵盖了从基础知识到实践应用...

    java资料,学习心得

    ### Java资料与学习心得 #### 一、Java基础概述 Java是一种广泛使用的高级编程语言,由Sun Microsystems在1995年首次发布。它被设计为面向对象的语言,并且具有可移植性、健壮性和安全性等特点。Java适用于开发...

    JDBC.rar_jdbc PostgreSQL_oracle_postgresql

    标题中的“JDBC.rar_jdbc PostgreSQL_oracle_postgresql”表明这个压缩包文件包含了关于Java数据库连接(JDBC)...学习这些内容,开发者可以更好地理解和使用JDBC连接不同的数据库系统,提升数据库操作的效率和灵活性。

    hibernate学习心得

    对于初学者来说,学习 Hibernate 可以简化数据库操作,提高开发效率。以下是对 Hibernate 学习过程的详细说明: 一、配置 Hibernate 与 MyEclipse 连接 在开始使用 Hibernate 之前,你需要先配置 Hibernate 与...

    Spring学习心得(一)

    在数据访问方面,Spring提供了强大的JDBC抽象层,使得开发者可以避免直接编写繁琐的JDBC代码,减少错误并提高可读性。此外,Spring还支持ORM(Object-Relational Mapping)框架,如Hibernate和MyBatis,通过这些框架...

    spring学习心得

    Spring JDBC提供了一组模板类,减少了编写JDBC代码的工作量,而Spring Data则提供了与多种ORM框架(如Hibernate)的集成,使得对象关系映射变得更加便捷。 在实际项目中,Spring的事务管理功能也至关重要。Spring...

    cas sso学习心得

    【CAS SSO学习心得】 CAS(Central Authentication Service)是一种广泛使用的单点登录(Single Sign-On,简称SSO)框架,主要由Java编写。在本文中,我们将深入探讨如何配置CAS服务器以及客户端,以便实现单点登录...

Global site tag (gtag.js) - Google Analytics