前面我们封装了一个用于连接数据库和关闭资源的DBUtils的类,可以减少很多重复的代码。这个类,提供了连接数据库和关闭资源的两个静态方法。再次复习下这个类中加载properties文件,为什么要使用静态代码块,也就是static{},因为我们想,这个DBUtils类一加载到JVM虚拟机就里面执行加载解析propertes文件操作。这个技巧,我们之前在Selenium自动化中写driver的初始化也用上了。
1.数据表准备
为了我们下一篇的练习,这里我给这个student表新增一个password字段,也就是学生密码,方便我们后面文章来做登录练习。
执行sql语句或者小海豚上图形界面操作。
alter table student add pwd char(20);
我这里随机给当前已有学生添加密码
2.查询练习
这个我们在前面一篇文章的练习之后,把查询的结果集封装成Student对象,这里新加了一个字段,所以,我们的Student.java里面也需要新加一个private String password 和set get方法。
package demo;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.anthony.utils.DBUtils;
public class CURD {
@Test
public void testSelect() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = DBUtils.getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT * FROM student");
List<Student> list = new ArrayList<Student>();
while(rs.next()) {
Student s = new Student();
s.setName(rs.getString("Name"));
s.setId(rs.getInt("ID"));
s.setGender(rs.getString("Gender"));
s.setAge(rs.getInt("Age"));
s.setPassword(rs.getString("pwd"));
// 把student对象添加到集合中
list.add(s);
}
//遍历集合
for (Student student : list) {
System.out.println(student.toString());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtils.close(conn, stmt, rs);
}
}
}
测试结果:
Student [Id=192101, Name=Tom, Gender=male, Age=19, password=123]
Student [Id=192102, Name=Lucy, Gender=female, Age=18, password=456]
Student [Id=192103, Name=Dniel, Gender=male, Age=20, password=111]
Student [Id=192104, Name=Sunny, Gender=female, Age=18, password=2222]
Student [Id=192105, Name=Anthony, Gender=male, Age=23, password=123456]
3.插入练习
这里我直接贴单元测试代码
@Test
public void testInsert() {
Connection conn = null;
Statement stmt = null;
try {
conn = DBUtils.getConnection();
stmt = conn.createStatement();
int i = stmt.executeUpdate("INSERT INTO student VALUES ('192106','Lisi','male','22','333')");
if (i > 0) {
System.out.println("插入成功");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtils.close(conn, stmt, null);
}
}
4.更新练习
这里,我把Anthony的年龄从23改成18.
@Test
public void testUpdate() {
Connection conn = null;
Statement stmt = null;
try {
conn = DBUtils.getConnection();
stmt = conn.createStatement();
int i = stmt.executeUpdate("UPDATE student SET Age='18' WHERE Name='Anthony'");
if (i > 0) {
System.out.println("更新成功");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtils.close(conn, stmt, null);
}
}
刷新一下小海豚,或者执行上面查询的用例。
5.删除练习
这里我把Tom这行数据删除
@Test
public void testDelete() {
Connection conn = null;
Statement stmt = null;
try {
conn = DBUtils.getConnection();
stmt = conn.createStatement();
int i = stmt.executeUpdate("DELETE FROM student WHERE Name='Tom'");
if (i > 0) {
System.out.println("删除成功");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtils.close(conn, stmt, null);
}
}
结果Tom被删除