作用:执行SQL语句
1、int executeUpdate(sql):执行DML(对数据增删改)、DDL(对表和库的增删改查)语句
返回值:
(1)DML语句影响的行数
//3、定义sql
String sql1 = "UPDATE account set money = 2000 where id = 1";
//4、获取执行sql的对象Statement
Statement stmt = conn.createStatement();
//5、执行sql
int count1 = stmt.executeUpdate(sql1);
//6、处理结果
System.out.println(count1);
在上述代码中,sql1就是一条DML语句,count1就是执行后所影响的行数,运行结果为1。如果将DML语句改为UPDATE account set money = 2000 where id = 10,而原表中并没有id=10的记录,运行结果会返回0。
但用户想要看到的结果是“成功”或者是“失败”,而不是输出0或1,可以通过影响的行数判断是否执行成功,使用if-else语句,如果大于0输出“执行成功”,否则输出“执行失败”,代码如下:
//3、定义sql
String sql1 = "UPDATE account set money = 2000 where id = 1";
//4、获取执行sql的对象Statement
Statement stmt = conn.createStatement();
//5、执行sql
int count1 = stmt.executeUpdate(sql1);
//6、处理结果
//System.out.println(count1);
if(count1>0){
System.out.println("执行成功");
}else {
System.out.println("执行失败");
}
(2)DDL语句执行后,执行成功也可能返回0
下面代码是创建一个数据库db2,执行成功,输出结果为1,在数据库内也会成功创建db2数据库。
//3、定义sql
String sql1 = "create database db2";
//4、获取执行sql的对象Statement
Statement stmt = conn.createStatement();
//5、执行sql
int count1 = stmt.executeUpdate(sql1);
//6、处理结果
System.out.println(count1);
下面代码是删除一个数据库db2,IDEA输出结果为0,但数据库db2成功被删除了,说明此DDL语句执行成功也可能会返回0:
//3、定义sql
String sql1 = "drop database db2";
//4、获取执行sql的对象Statement
Statement stmt = conn.createStatement();
//5、执行sql
int count1 = stmt.executeUpdate(sql1);
//6、处理结果
System.out.println(count1);
因此,执行DDL语句时,不能通过影响行数的结果判断是否执行成功。
2、ResultSet executrQuery(sql): 执行DQL语句(查询语句)(比较常用)
返回值:ResultSet 结果集对象(封装了DQL查询语句的结果)
【获取查询结果】
boolean next():
1)将光标从当前位置向下移动一行,开始默认在属性行;
2)判断当前行是否为有效行
返回值:
xxx getXxx(参数):获取数据
xxx:数据类型,如:int getInt(参数),String getString(参数)
参数:int:列的编号,从1开始 ; String:列的名称
获取查询结果过程:
最开始光标指在id-name-money一行,从当前位置往下一行,指在id=1的行,判断这一行是否有效,当前行有效,返回true,获取数据;从当前位置往下一行,指在id=2的行,判断这一行是否有效,当前行有效,返回true,获取数据;从当前位置往下一行,判断这一行是否有效,当前行无效,没有数据,返回false,执行结束;
这个过程是一个重复执行的过程,可以用一个循环:
//循环判断游标是否是最后一行末尾
while(rs.next()){
//获取数据
rs.getXxx(参数);
}
以下两种方法都可以实现,第一种使用getXxx(int(列的编号,从1开始)),另一种是getXxx(String(列的名称)),记得加引号!
//3、定义sql
String sql1 = "select * from account";
//4、获取执行sql的对象Statement
Statement stmt = conn.createStatement();
//5、执行sql
ResultSet rs = stmt.executeQuery(sql1);
//6、处理结果,遍历rs中的数据
//6.1光标向下移动一行,并判断当前行是否有数据
// while(rs.next()){
// //6.2 获取数据 getXxx()
// int id = rs.getInt(1);
// String name = rs.getString(2);
// double money = rs.getDouble(3);
//
// System.out.println(id);
// System.out.println(name);
// System.out.println(money);
//
// System.out.println("-----------------------");
// }
while(rs.next()){
//6.2 获取数据 getXxx()
int id = rs.getInt("id");
String name = rs.getString("name");
double money = rs.getDouble("money");
System.out.println(id);
System.out.println(name);
System.out.println(money);
System.out.println("-----------------------");
}
//7、释放资源
stmt.close();
conn.close();
两种方式运行结果相同
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)