javaJDBC中常用的类和接口

JDBC的全称是Java DataBase Connectivity,它是一种被用于执行SQL语句的JavaAPI(API,应用程序设计接口),通过使用JDBC,就可以使用相同的API访问不同的数据库,需要注意的是,JDBC并不能直接访问数据库,必须依赖于数据库厂商体用的JDBC驱动程序,使用JDBC操作数据库的主要步骤如下图:

java提供了丰富的类和接口用于数据库编程,利用这些类和接口可以方便地访问并处理存储在数据库中的数据,下面将介绍一些常用的JDBC接口和类,这些接口和类都在java.sql包中。

1.DriverManager类

DriverManager类是JDBC的管理层,用来管理数据库中的驱动程序,在使用java操作数据库之前,必须使用class类的静态方法forName(String classname)加载能够连接数据库的驱动程序。

例如,加载MySql数据库驱动程序(包名为mysql-connector-java-5.1.48-bin.jar)的代码如下:

public class Demo {
	public static void main(String[] args) {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e1) {
			e1.printStackTrace();
		}    
    }
}

加载完连接数据库的驱动程序后,java会自动将驱动程序的实例注册到DriverManager类中,这时即可通过DriverManager类的getConnection()方法与指定数据库建立连接,getConnection()方法的语法如下:
 

getConnection(String url,String user,String password)
  • url:连接数据库的URL;
  • user:连接数据库的用户名;
  • password:连接数据库的密码;

例如,使用DriverManager类的getConnection()方法,与本地Mysql数据库建立连接的代码如下:

DriverManager.getConnection("jdbc:mysql://192.168.12.245:3306/test","root","123456");

2.Connection接口

Connection接口代表java端与指定数据库之间的连接Connection接口的常用方法及说明如下表:

方法功能描述
createStatement()创建Statement对象
createStatement(int resultSetType,int resultSetConcurrency)创建Statement对象,Statement对象被用来生成一个具有给定类型、并发性和可保存性的ResultSet对象
prepareStatement()创建预处理prepareStatement对象
prepareCall(String sql)创建一个CallableStatement对象来调用数据库存储过程
isReadOnly()查看当前Connection对象的读写模式是否是只读模式
setReadOnly()查看当前Connection对象的读写模式,默认为非只读模式
commit()事上一次提交/回滚后进行的更改成为持久更改,并释放此Connection对象当前持有的数据库锁
roolback()取消在当前事务中进行的更改,并释放此Connection对象当前持有的数据库锁
close()立即释放此Connection对象的数据库和JDBC资源,而不是等待它们被自动释放

例如,使用Connection对象连接mysql数据库,代码如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Demo {
	public static void main(String[] args) {
		try {
			//加载mysql数据库驱动程序
			Class.forName("com.mysql.jdbc.Driver");
			//通过访问数据库的URL获取数据库连接对象
			Connection con = DriverManager.getConnection("jdbc:mysql://192.168.12.245:3306/wiki","wiki","123456");
			//输出一下,查看是否连接成功
			System.out.println(con);
		} catch (ClassNotFoundException e) {

			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
	

}

返回结果:

从返回结果看出,数据库连接成功了。

3.Statement接口

Statement接口时用来执行静态SQL语句的工具接口,Statement接口的常用方法说明如下表:

方法功能描述
execute(String sql)执行静态的SELECT语句,该语句可能返回多个结果集
executeQuery(String sql)执行给定的SQL语句,该语句返回单个ResultSet对象
clearBatch()清空此Statement对象的当前SQL命令列表
executeBatch()将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组,数组元素的排序与SQL语句的添加顺序对应
addBatch()将给定的SQL命令添加到此Statement对象的当前命令列表中,如果驱动程序不支持批量处理,将抛出异常
close()释放Statement对象占用的数据库和JDBC资源
executeUpdate()执行前面包含的参数的动态INSERT、UPDATE或DELETE语句

例如,使用连接数据库对象con的createStatement()方法创建Statement对象,代码如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class Demo {
	public static void main(String[] args) {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			Connection con = DriverManager.getConnection("jdbc:mysql://192.168.12.245:3306/wiki","wiki","123456");
			Statement stmt = con.createStatement();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}	
}

4.PreParedStatement接口

PreParedStatement接口是Statement接口的子接口,是用来执行动态SQL语句的工具接口,PreParedStatement接口的常用如下表:

方法功能描述
setInt(int index,int k )将指定位置的参数设置为int值
setFloat(int index,float f)将指定位置的参数设置为float值
setLong(int index,long l)将指定位置的参数设置为long值
setDouble(int index,double d)将指定位置的参数设置为double值
setBoolean(int index,boolean b)将指定位置的参数设置为Boolean值
setDate(int index,date date)将指定位置的参数设置为对应的date值
setString(int index,String s)将指定位置的参数设置为对应的String值
setNull(int index,int sqlType)将指定位置的参数设置为SQL NULL
executeQuery()在此PreParedStatement对象中执行SQL查询语句,并返回该查询生成的ResultSet对象
executeUpdate()执行前面包含的参数的动态INSERT、UPDATE或DELETE语句
clearParameters()清除当前所有参数的值

例如,使用数据库对象con的PreParedStatement()方法创建PreParedStatement对象,其中需要设置一个参数,用来查询数据表中符合条件的数据,代码如下:

PreparedStatement ps = con.prepareStatement("select * from mysql where name = ?");
ps.setString(1, "dpc");//将sql中第一个问号的值设置为"dpc"

5.ResultSet接口

ResultSet接口类似于一个临时表,用来暂时存放对数据库中的数据执行查询操作后的结果,ResultSet对象具有指向当前数据行的指针,指针开始的位置在第一条记录上,通过next()方法可向下移动指针,ResultSet接口的常用方法以及说明如下表:

方法功能描述
getInt()以int形式获取此ResultSet对象的当前行的指定列值,如果列值为NULL,则返回值是0
getFloat()以float形式获取此ResultSet对象的当前行的指定列值,如果列值为NULL,则返回值是0
getDate()以data形式获取此ResultSet对象的当前行的指定列值,如果列值为NULL,则返回值是null
getBoolean()以boolean形式获取此ResultSet对象的当前行的指定列值,如果列值为NULL,则返回值是null
getString()以String形式获取此ResultSet对象的当前行的指定列值,如果列值为NULL,则返回值是null
getObject()以Object形式获取此ResultSet对象的当前行的指定列值,如果列值为NULL,则返回值是null
first()将指针移到当前记录的第一行
last()将指针移到当前记录的最后一行
next()将指针向下移一行
beforeFirst()将指针移到集合的开头(第一行位置)
afterLast()将指针移到集合的尾部(最后一行位置)
absolute(int index)将指针移到ResultSet给定编号的行
isFrist()判断指针是否位于当前ResultSet合集的第一行,如果是返回true,否则返回false
isLast()判断指针是否位于当前ResultSet合集的最后一行,如果是返回true,否则返回false
updateInt()用int值更新指定列
updateFloat()用float值更新指定列
updateLong()用指定的long值更新指定列
updateString()用指定的String值更新指定列
updateObject()用Object值更新指定列
updateNull()将指定的列值修改为NULL
updateDate()用指定的date值更新指定列
updateDouble()用指定的double值更新指定列
getRow()查看当前行的索引号
insertRow()将插入行的内容插入数据库
updateRow()将当前行的内容同步到数据表
deleteRow()删除当前行,但并不同步数据库,而是在执行close()方法后同步到数据库

注意:使用updateXXX()方法更新数据库中的数据时,并没有将数据库中被操作的数据同步到数据库中,需要执行updateRow()方法或insertRow()方法才可以更新数据库中的数据。

例如,通过Statement对象调用executeQuery()方法,把数据库mysql.user(mysql存放授权用户和主机的表)中的所有数据存储到ResultSet对象中,然后输出ResultSet对象中的数据,代码如下:

import java.sql.*;

public class Demo {
	public static void main(String[] args) {
		try {
			//加载mysql驱动程序
			Class.forName("com.mysql.jdbc.Driver");
			//创建连接数据库对象
			Connection con = DriverManager.getConnection("jdbc:mysql://192.168.12.245:3306/mysql","root","easyExchange@2015");
			//创建Statement对象
			Statement st = con.createStatement();
			//创建ResultSet对象,获取查询数据
			ResultSet res = st.executeQuery("select user,host from mysql.user");
			//如果当前语句不是最后一条,则进入循环
			while (res.next()) {
				//获取列名是host的值
				String host = res.getString("host");
				//获取列名是user的值
				String user = res.getString("user");
				System.out.println("主机: " + host + " 用户:" + user);
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}	
}

返回结果:

 

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值