您的位置:首页 > 编程语言 > Java开发

Java学习篇之--用纯Java的JDBC驱动程序实现与数据库连接

2015-02-02 17:53 555 查看

用纯Java的JDBC驱动程序实现与数据库连接

最近在研究JAVA中数据库的连接,将知识整理一下分享给大家:

附:一个讲解JDBC也不错的文章 http://blog.csdn.net/jiangwei0910410003/article/details/26164629
Java程序可以用纯Java的JDBC驱动程序实现与数据库连接。这种方法应用较广泛,但是需要下载相应的驱动程序包,因为不同的数据库的连接代码可能不同,连接不同的数据库,加载的驱动程序也可能不同。本文将以MySQL数据库为例来讲解连接数据库的过程。

首先下载驱动程序:

mysql-connector-java-5.0.8-bin.jar

然后添加驱动程序:

选中项目后右键选择Properties->Java Build Path->Add External JARs,选中之前下载的驱动程序

最后可以根据Java中的类和接口进行数据库的操作连接:

1)、加载驱动程序:

Class.forName("com.mysql.jdbc.Driver");

2)、通过DriverManager类中的getConnection方法获取数据库连接:

DriverManager类处理驱动程序的加载和建立新数据库连接。DriverManager是java.sql包中用于管理数据库驱动程序的类。通常,应用程序只使用类DriverManager的getConnection()静态方法,用来建立与数据库的连接,返回Connection对象。

方法原型:static Connection getConnection(String url,String username,String password)

Connection conn= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/testdb","root","root");

3)、使用类Connection的对象创建一个Statement对象:

Connection类是java.sql包中用于处理与特定数据库连接的类。Connection对象是用来表示数据库连接的对象,Java程序对数据库的操作都在这种对象上进行。

类Connection主要有以下几种方法:

方法原型:Statement createStatement() 创建一个Statement对象

Statement createStatement(int resultSetType,int resultSetConcurrency)创建一个Statement对象,生成具有特定类型的结果集

void commit() 提交对数据库的改动并释放当前持有的数据库的锁

void rollback()
回滚当前事务中的所有改动并释放当前连接持有的数据库的锁

String getCatalog()
获得连接对象的当前目录

boolean isClose()
判断连接是否已关闭

boolean isReadOnly()
判断连接是否为只读模式

void setReadOnly()
设置连接为只读模式

void close() 释放连接对象的数据库和JDBC资源

Statement类是java.sql包中用于在指定的连接中处理SQL语句的类。数据库编程的要点是在程序中嵌入SQL命令。程序需要声明和创建连接数据库的Connection对象,并让该对象连接数据库。调用类DriverManager的静态方法getConnection()获得Connection对象,实现程序与数据库的连。然后,用Statement类声明SQL语句对象,并调用Connection对象的createStatement()方法,创建SQL语句对象。

Statement stmt= conn.createStatement();

4)、执行SQL语句:
有了SQL语句对象后,调用语句对象的方法executeQuery()执行SQL查询,并将查询结果存放在一个用ResultSet类声明的对象中。

ResultSet对象实际上是一个查询结果数据的表,是一个管式数据集,由统一形式的数据行组成,一行对应一条查询记录。在ResultSet对象中隐含着一个游标,一次只能获得游标当前所指的数据行,用next方法可取下一个数据行。用数据行的字段(列)名称或位置索引(自1开始)调用形如getXXX()方法获得记录的字段植 。

类ResultSet主要有以下几种方法:

方法原型:

byte getByte(int columnIndex) 返回指定字段的字节值

Date getDate(int columnIndex) 返回指定字段的日期值

float getFloat(int columnIndex) 返回指定字段的浮点值

int getInt(int columnIndex) 返回指定字段的整数值

String getString(int columnIndex)
返回指定字段的字符串值

double getDouble(String columnName)
返回指定字段的双精度值

long getLong(String columnName) 返回指定字段的long型整值

boolean next() 返回是否还有下一字段

以上方法原型中columnIndex是位置索引,用于指定字段,columnName是字段名。

用户需要在查询结果集上浏览,或前后移动、或显示结果集的指定记录,这称为可滚动结果集。程序要获得一个可滚动结果集,只要在获得SQL的语句对象时,增加指定结果集的两个参数即可。

即用函数原型Statement createStatement(int resultSetType,int resultSetConcurrency)。

int 型参数resultSetType决定可滚动集的滚动方式:

ResultSet.TYPE_FORWORD_ONLY 结果集的游标只能向下滚动

ResultSet.TYPE_SCROLL_INSENSITIVE
游标可上下移动,当数据库变化时,当前结果集不变

ResultSet. TYPE_SCROLL_SENSITIVE
游标可上下移动,当数据库变化时,当前结果集同步改变

int 型参数resultSetConcurrency决定数据库是否与可滚动集同步更新:

ResultSet.CONCUR_READ_ONLY 不能用结果集更新数据库中的表

ResultSet.CONCUR_UPDATETABLE 能用结果集更新数据库中的表

例如,以下代码利用连接对象connect,创建Statement对象stmt,指定结果集可滚动,并以只读方式读数据库:

stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_READ_ONLY);

可滚动集上常用的方法如下:

boolean previous() 将游标向上移动,当移到结果集的第一行时,返回false

void beforeFirst() 将游标移结果集的第一行之前

void afterLast() 将游标移到结果集的最后一行之后

void first() 将游标移到第一行

void last() 将游标移到最后一行

boolean isAfterLast() 判游标是否在最后一行之后

boolean isBeforeFirst() 判游标是否在第一行之前

boolean isLast() 判游标是否在最后一行

boolean isFirst() 判游标是否在第一行

int getRow() 获取当前所指的行(行号自1开始编号,结果集空,返回0)

boolean absolute(int row) 将游标移到row行

ResultSet rs= stmt.executeQuery("select * "+"from t_test "+"where id='LiMing'");

while(rs.next())

{

System.out.println(rs.getString(2));

}

5)编程时常用的一种数据库操作方法:

利用Statement 的子类PreparedStatement来实现。

String sql = "select * from t_test where lastname=? and firstname=?"

PreparedStatement ptmt=conn.PreparedStatement(sql)

ptmt.setstring(1,"Li")

ptmt.setstring(2,"Ming")

resultSet rs=ptmt.executeQuery()

由于preparedstatement具备很多优点,开发者可能通常都使用它,只有在完全是因为性能原因或者是在一行sql语句中没有变量的时候才使用通常的statement。

补充:executeQuery、execute、executeUpdate的区别:

executeQuery:

执行select语句返回单个结果集。

execute返回多个结果集:

executeUpdate:

执行数据库更新语句。

用于执行INSERT、UPDATE或DELETE语句以及SQL DDL(数据定义语言)语句,例如CREATE TABLE 和DROP TABLE。INSERT、UPDATE 或DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于CREATE TABLE 或DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: