`
dearwolf
  • 浏览: 339325 次
  • 性别: 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心得体会

    jdbc概念,基本方法,应用体会,实例编程和测试等。

    数据库JDBC驱动试用心得.doc

    数据库JDBC驱动试用心得 \数据库JDBC驱动试用心得.doc\数据库JDBC驱动试用心得.doc

    java学习心得,笔记,思想

    java个人学习笔记,心得以及总结,还包括oracle,连接数据库的JDBC方法

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

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

    java学习心得

    2. javaSE的应用部分:java的面向对象、java类集、java IO、JDBC会完整编写 3. 使用public class声明时,类名必须与文件名完全一致;但是用class声明时,类名与文件名可以不一致,但是执行(java 类名)的时候必须...

    Java入门1·2·3——一个老鸟的Java学习心得 高清pdf

    第3篇为Java语言编程进阶,包括Java编程常用知识、Java文件编程、Java文件I/O编程、Java TCP编程、Java UDP编程、Java Swing编程、JDBC编程,最后还给出了一个聊天程序实例和一个数据表操作窗口实例,将Swing、UDP、...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,手把手教会读者学习Java 配16小时多媒体教学视频,高效、直观 一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让...

    Java学习笔记7.0

    《Java JDK6学习笔记》是作者良葛格本人近几年来学习Java的心得笔记,结构按照作者的学习脉络依次展开,从什么是Java、如何配置Java开发环境、基本的Java语法到程序流程控制、管理类文件、异常处理、枚举类型、泛型...

    J2EE Development Without EJB 学习心得

    如何针对自己的应用程序找到最简单、最易维护的架构;...J2EE应用中最有效的数据访问技术,包括JDBC、Hibernate和JDO;如何利用开源产品提升生产率、减少编码量;如何从设计层面上改善性能和可伸缩性

    一份超级详细的Java面试题【大厂面试真题+Java学习指南+工作总结】.zip

    学习笔记和心得:记录了学习过程中的重点难点和心得体会,有助于学习者更好地理解和掌握知识。 二、适用人群 本资源适用于即将毕业或已经毕业,希望通过学习Java找到一份理想工作的同学。无论你是初学者还是有一定...

    【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。.zip

    学习笔记和心得:记录了学习过程中的重点难点和心得体会,有助于学习者更好地理解和掌握知识。 二、适用人群 本资源适用于即将毕业或已经毕业,希望通过学习Java找到一份理想工作的同学。无论你是初学者还是有一定...

    Java开源项目之「自学编程之路」:学习指南+面试指南+资源分享+技术文章.zip

    学习笔记和心得:记录了学习过程中的重点难点和心得体会,有助于学习者更好地理解和掌握知识。 二、适用人群 本资源适用于即将毕业或已经毕业,希望通过学习Java找到一份理想工作的同学。无论你是初学者还是有一定...

    『Java八股文』Java面试套路,Java进阶学习,打破内卷拿大厂Offer,升职加薪!.zip

    学习笔记和心得:记录了学习过程中的重点难点和心得体会,有助于学习者更好地理解和掌握知识。 二、适用人群 本资源适用于即将毕业或已经毕业,希望通过学习Java找到一份理想工作的同学。无论你是初学者还是有一定...

    使用JDBC连接SQL SERVER 2008的方法

    使用JDBC连接SQL SERVER 2008,很多人都在问,我自己也测试几次,发现按照以前的方法连接会出现一点小问题。原因在于,SQL SERVER 2008采用了动态端口的机制,按照以前的方法连接会报告连接不了,其实端口写对了完全...

    设备维修管理系统,JavaWeb 项目,使用原生servlet 和 JDBC。.zip

    文档与笔记:整理了开发过程中的关键决策、技术难题以及学习心得,有助于深入理解项目背后的思考过程。 二、适用人群 这个项目资源包适用于即将毕业或已经毕业,希望通过实际项目经验增强自己JavaWeb开发能力的同学...

    教学在线留言答疑系统,JavaWeb基础,servlet jsp filter,原生jdbc.zip

    文档与笔记:整理了开发过程中的关键决策、技术难题以及学习心得,有助于深入理解项目背后的思考过程。 二、适用人群 这个项目资源包适用于即将毕业或已经毕业,希望通过实际项目经验增强自己JavaWeb开发能力的同学...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,手把手教会读者学习Java 配16小时多媒体教学视频,高效、直观 一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让...

    Java数据库学习笔记一份

    java数据库学习过程的精力总结,适合初学者!对其帮助应该会很大

    Java开发者或者大数据开发者面试知识点整理.zip

    学习笔记和心得:记录了学习过程中的重点难点和心得体会,有助于学习者更好地理解和掌握知识。 二、适用人群 本资源适用于即将毕业或已经毕业,希望通过学习Java找到一份理想工作的同学。无论你是初学者还是有一定...

    509 道 Java 面试题汇总与解析.zip

    学习笔记和心得:记录了学习过程中的重点难点和心得体会,有助于学习者更好地理解和掌握知识。 二、适用人群 本资源适用于即将毕业或已经毕业,希望通过学习Java找到一份理想工作的同学。无论你是初学者还是有一定...

Global site tag (gtag.js) - Google Analytics