一、主要类与接口
首先,要想在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来说,就是在project的property中,添加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语句,还是允许修改资料的UPDATE、INSERT等语句(具体参见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用于执行INSERT、DELETE或者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参数占位符的值,同时executeUpdate,executeQuery,execute三种方法被进行了重载,不再需要参数。这些方法的接受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接口
用于获取数据库的结构。
通过Connection的getMetaData方法,可以获取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驱动试用心得.doc
java个人学习笔记,心得以及总结,还包括oracle,连接数据库的JDBC方法
《Java入门1·2·3:一个老鸟的Java学习心得》是一本与众不同的Java入门好书。作者以独特的视角,向Java初学者讲述了如何才能真正理解和掌握Java语言。《Java入门1·2·3:一个老鸟的Java学习心得》充分考虑了初学Java...
2. javaSE的应用部分:java的面向对象、java类集、java IO、JDBC会完整编写 3. 使用public class声明时,类名必须与文件名完全一致;但是用class声明时,类名与文件名可以不一致,但是执行(java 类名)的时候必须...
第3篇为Java语言编程进阶,包括Java编程常用知识、Java文件编程、Java文件I/O编程、Java TCP编程、Java UDP编程、Java Swing编程、JDBC编程,最后还给出了一个聊天程序实例和一个数据表操作窗口实例,将Swing、UDP、...
Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,手把手教会读者学习Java 配16小时多媒体教学视频,高效、直观 一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让...
《Java JDK6学习笔记》是作者良葛格本人近几年来学习Java的心得笔记,结构按照作者的学习脉络依次展开,从什么是Java、如何配置Java开发环境、基本的Java语法到程序流程控制、管理类文件、异常处理、枚举类型、泛型...
如何针对自己的应用程序找到最简单、最易维护的架构;...J2EE应用中最有效的数据访问技术,包括JDBC、Hibernate和JDO;如何利用开源产品提升生产率、减少编码量;如何从设计层面上改善性能和可伸缩性
学习笔记和心得:记录了学习过程中的重点难点和心得体会,有助于学习者更好地理解和掌握知识。 二、适用人群 本资源适用于即将毕业或已经毕业,希望通过学习Java找到一份理想工作的同学。无论你是初学者还是有一定...
学习笔记和心得:记录了学习过程中的重点难点和心得体会,有助于学习者更好地理解和掌握知识。 二、适用人群 本资源适用于即将毕业或已经毕业,希望通过学习Java找到一份理想工作的同学。无论你是初学者还是有一定...
学习笔记和心得:记录了学习过程中的重点难点和心得体会,有助于学习者更好地理解和掌握知识。 二、适用人群 本资源适用于即将毕业或已经毕业,希望通过学习Java找到一份理想工作的同学。无论你是初学者还是有一定...
学习笔记和心得:记录了学习过程中的重点难点和心得体会,有助于学习者更好地理解和掌握知识。 二、适用人群 本资源适用于即将毕业或已经毕业,希望通过学习Java找到一份理想工作的同学。无论你是初学者还是有一定...
使用JDBC连接SQL SERVER 2008,很多人都在问,我自己也测试几次,发现按照以前的方法连接会出现一点小问题。原因在于,SQL SERVER 2008采用了动态端口的机制,按照以前的方法连接会报告连接不了,其实端口写对了完全...
文档与笔记:整理了开发过程中的关键决策、技术难题以及学习心得,有助于深入理解项目背后的思考过程。 二、适用人群 这个项目资源包适用于即将毕业或已经毕业,希望通过实际项目经验增强自己JavaWeb开发能力的同学...
文档与笔记:整理了开发过程中的关键决策、技术难题以及学习心得,有助于深入理解项目背后的思考过程。 二、适用人群 这个项目资源包适用于即将毕业或已经毕业,希望通过实际项目经验增强自己JavaWeb开发能力的同学...
Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,手把手教会读者学习Java 配16小时多媒体教学视频,高效、直观 一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让...
java数据库学习过程的精力总结,适合初学者!对其帮助应该会很大
学习笔记和心得:记录了学习过程中的重点难点和心得体会,有助于学习者更好地理解和掌握知识。 二、适用人群 本资源适用于即将毕业或已经毕业,希望通过学习Java找到一份理想工作的同学。无论你是初学者还是有一定...
学习笔记和心得:记录了学习过程中的重点难点和心得体会,有助于学习者更好地理解和掌握知识。 二、适用人群 本资源适用于即将毕业或已经毕业,希望通过学习Java找到一份理想工作的同学。无论你是初学者还是有一定...