Stement接口和ResultSet接口

本文详细介绍JDBC中Stement和ResultSet接口的使用方法,包括创建数据库连接、执行SQL语句、查询数据、添加和更新信息等核心操作。同时,介绍了StringBuffer类在SQL语句拼接中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Stement接口和ResultSet接口的方法介绍

获取Connection对象后就可以进行各种数据库操作了,此时需要使用Connection对象创建Statement对象。Connection接口常用的方法如下。

方法名称作用
void close()立即释放此Connection对象的数据库和JDBC资源
Statement createStatement()创建一个Statement对象来将SQL语句发送到数据库
PreparedStatement prepareStatement(String sql)创建一个PreparedStatement对象来将参数化的SQL语句发送到数据库
boolean isClosed()查询此Connection 对象是否已经被关闭

Statement 对象用于将SQL语句发送到数据库中,可以理解为执行SQL语句。Statement接口中包含很多基本数据库操作方法,表7-4列出Statement接口执行SQl命令的三个常用方法。

方法名称作用
ResultSet executeQuery()可以执行SQl查询并获取ResultSet对象
int executeUpdate (String sql)可以执行插入,删除,更新的操作,返回值是执行该操作所影响的行数
boolean execute(String sql)可以执行任意Sql语句。若结果为ResultSet对象,则返回true;若其为更新计数或者不存在任何结果,则返回false

添加信息

添加很简单,只要创建Statement对象然后调用execute(String sql)方法或者 executeUpdate(String sql方法)即可。这里关键的是SQl语句的拼接,可以直接利用“+”运算符进行拼接,也可以利用StringBuffer类的append()方法进行拼接。拼接时要小心,尤其是引号,逗号,和括号的拼接。
部分代码示例:

Connectin conn=null;
Statement stmt=null;
String name="zhang";
try{
	Class.forName("com.mysql.jdbc.Driver");
	}catch(ClassNotFoundException e){
	logger.error(e);
}
try{
	conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/epet","epetadmin","0000");
	stmt=conn.createStatement();
	StringBuffer sbSql=new StringBuffer("insert into dog(name) values('");
	sbSql.append(name+"')");

	stmt.execute(sbSql.toString());
	logger.info("插入成功");
}catch(){
}finally{
	//关闭Statement和数据库连接
}

资料 StringBuffer类的作用
java定义了String和StringBuffer两个类来封装对字符串的各种操作。String类的字符串是常量,它们的值在创建之后不能改变。而StringBuffer类似于String的字符串缓冲区,通过某些方法调用可以改变该字符串的长度和内容,用于存放内容可以改变的字符串。如果StringBuffer生成了最终想要的字符串,可以通过toString()方法转换为一个String对象。
java为字符串提供了字符串连接字符运算符“+”,也可以把非字符串数据转换为字符串并连接成新的字符串。类似“+”运算符的功能也可以通过StringBuffer类的append()方法实现。
例如:

 int heatlth=90,love=20;
  String sql="SELECT * FROM epet WhERE health>"+health+"AND love"+love;

等效于:

 int health=90,love=20;
 String sql=new StringBuffer().append("select * from epet where health>")
	 .append(health)
	 .append("and love>")
 	.append(love).toString();

更新信息

更新数据库中id=1的信息。操作也很简单,只要创建Statement对象,然后调用execute(String sql)方法或者executeUpdate(String sql)方法即可。
部分代码:

try{
	conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/epet","epetadmin","0000");
	stmt=conn.createStatement();
	stmt.executeUpdate("update dog set name=lisi"+"where id=1");
	logger.info("成功更新");
}

使用Statement和ResultSet查询

查询并输出信息,首先还是要创建Statement对象,然后调用executeQuery(String sql)方法执行查询操作,返回值是结果集ResultSet对象。
ResultSet可以理解为由查询结果组成的一个二维表,每行代表一条记录,每列代表一个字段;并且存在一个光标,光标所指的行为当前行,只能对结果集的当前数据进行操作;光标初始位置是第一行之前(而不是指向第一行)。通过ResultSet的next()方法使光标向下移动一行,然后通过一系列getXxx()方法实现对当前行各列的数据的操作。
若执行next()后光标指向结果集的某一行,则返回true;否则返回false。若光标已指向结果集最后一行,再次调用next()方法,会指向最后一行的后面,此时返回fasle。
getXxxx()方法提供了获取当前行中某列值的途径,列号或列名可以用于标识要从中获取数据的列(xx代表基本数据类型,比如int,float等)。采用列名来标识列可读性强,建议多采用这种方式。
部分代码示例:

	try{
	//省略建立连接
	//查询数据
	stmt=conn.createStatement();
	rs=stmt.executeQuery("select id,name from student");
	syso("查询的信息");
	while(rs.next()){
		 syso(rs.getInt(1)+"\t");
		 syso(rs.getString("name"));
		}
	}catch{}

这样就可以查询出数据库的数据了

ResultSet接口常用方法及作用

方法名称作用
boolean next()将光标从当前位置下移动一行
boolean previous()将光标从当前位置上移动一行
void close()关闭ResultSet对象
int getInt(int columnIndex)以int的形式获取结果集当前指定列号的值
int getInt(String columnLabel)以int的形式获取结果集当前指定列名的值
flaot getFloat(int columnIndex)以float的形式获取结果集当前指定列号的值
flaot getFloat(String columnLabel)以float的形式获取结果集当前指定列名的值
String getString(int columnIndex)以String的形式获取结果集当前指定列号的值
String getString(int columnLabel)以String的形式获取结果集当前指定列名的值
int getRow()得到光标当前所指行的行号
boolean absolute(int row)光标移动到row指定的行

注意:
1)作为一种好的编程风格,应该在不需要ResultSet对象,Statement对象和Connection对象时显地关闭它们。语句形式为:

public void close() throws SQLException

2)要按先ResultSet结果集,后Statement对象,最后Connection的顺序关闭资源,因为ResultSet是通过Statement执行SQl语句命令得到的,而Statement是需要在创建连接后才能使用的,所以三者之间存在相互依存的关系,关闭时也必须按照依存关系进行。
3)用户如果不关闭ResultSet,当Statement关闭,重新执行或用于从多结果序列中获取下一个结果时,改ResultSet将被自动关闭。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值