实验目的:
- 掌握使用优化写程序
- 使用JDBC操作数据库
- 使用事务实现批量插入和修改
实验内容1:使用JDBC操作数据库
- 创建一个学生表,学生有学号、姓名、年龄、班级和成绩信息。
- 定义学生实体类。
- 实现学生的添加和查询功能。
package Access;
import java.sql.ResultSet;
import Access.*;
public class DBDemo {
public static void main(String[] args) {
String selectSql = "SELECT * FROM student2";
String insertSql = "INSERT INTO student2(id,name,age,class,grade) VALUES(?,?,?,?,?)";
String updateSql = "UPDATE student2 SET password=? WHERE username=?";
String deleteSql = "DELETE FROM student2 WHERE username=?";
// 创建DBUtil对象
DBUtil db = new DBUtil();
try {
// 连接数据库
db.getConnection();
// 查询并显示原来的数据
ResultSet rs = db.executeQuery(selectSql, null);
System.out.println("----------------原来的数据---------------");
while (rs.next()) {
// (5)通过字段检索,进行查询操作
int id = rs.getInt("ID");
String name = rs.getString("Name");
int age = rs.getInt("Age");
String clas = rs.getString("Class");
int grade = rs.getInt("Grade");
// 输出数据
System.out.print("ID: " + id);
System.out.print(", 姓名: " + name);
System.out.print(", 年龄: " + age);
System.out.print(", 班级: " + clas);
System.out.print(", 成绩: " + grade);
System.out.print("\n");
}
System.out.println("---------------- ----------------------");
// 执行添加
int count = db.executeUpdate(insertSql, new String[] { "7", "宋航", "16", "电子一班","99"});
System.out.println("添加" + count + "行!");
// 查询并显示更新后的数据
rs = db.executeQuery(selectSql, null);
System.out.println("---------------更新后的数据---------------");
while (rs.next()) {
System.out.println("行 " + rs.getRow() + ": "
+"ID: "+rs.getInt(1)+ "\t"
+"姓名: "+rs.getString(2) + "\t"
+"年龄: "+rs.getInt(3)+ "\t"
+"班级: "+rs.getString(4) + "\t"
+"成绩: "+rs.getInt(5) + "\t");
}
System.out.println("-----------------------------------------");
} catch (Exception e) {
// 关闭连接
db.closeAll();
e.printStackTrace();
}
}
}
实验内容2:使用事务实现批量插入和修改
(1)创建员工表,员工有工号、姓名、部门和工资。
(2)创建员工实体类。
(3)使用事务批量插入6条员工记录。
(4)使用事务实现每个员工的工资上涨10%。
package Access;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import Access.DBUtil;
public class TransactionDemo {
public static void main(String args[]) throws ClassNotFoundException {
// 创建DBUtil对象
DBUtil db = new DBUtil();
Connection conn = null;
try {
conn = db.getConnection();
// 获取事务自动提交状态
boolean autoCommit = conn.getAutoCommit();
System.out.println("事务自动提交状态:" + autoCommit);
if (autoCommit) {
// 关闭自动提交,开启事务
conn.setAutoCommit(false);
}
// 创建Statement对象
Statement stmt = conn.createStatement();
// 多条DML批处理语句
String sql_1 = "insert into staff ( Jobnumber,Name,Dept,Salary) VALUES (5,'李丽','市场部','3444')";
String sql_2 = "insert into staff ( Jobnumber,Name,Dept,Salary) VALUES (6,'许宣','采购部','4258')";
String sql_3 = "insert into staff ( Jobnumber,Name,Dept,Salary) VALUES (7,'卓依琳','公关部','9876')";
String sql_4 = "insert into staff ( Jobnumber,Name,Dept,Salary) VALUES (8,'王一博','配送部','5646')";
String sql_5 = "insert into staff ( Jobnumber,Name,Dept,Salary) VALUES (9,'张鹏','生产部','3874')";
String sql_6 = "insert into staff ( Jobnumber,Name,Dept,Salary) VALUES (10,'王鑫','营销部','5774')";
stmt.executeUpdate(sql_1);
stmt.executeUpdate(sql_2);
// 由于主键约束,下述语句将抛出异常
stmt.executeUpdate(sql_3);
stmt.executeUpdate(sql_4);
stmt.executeUpdate(sql_5);
stmt.executeUpdate(sql_6);
// 如果顺利执行则在此提交
conn.commit();
// 恢复原有事务提交状态
conn.setAutoCommit(autoCommit);
// 查询并显示原来的数据
ResultSet rs = db.executeQuery("SELECT * FROM staff", null);
System.out.println("-------------------------原来的数据------------------------------");
while (rs.next()) {
// (5)通过字段检索,进行查询操作
int jobnumber = rs.getInt("Jobnumber");
String name = rs.getString("Name");
String dept = rs.getString("Dept");
int salary = rs.getInt("Salary");
// 输出数据
System.out.print("工号: " + jobnumber);
System.out.print(", 姓名: " + name);
System.out.print(", 部门: " + dept);
System.out.print(", 薪水: " + salary);
System.out.print("\n");
}
System.out.println("--------------------------------------------------------------");
stmt.addBatch("update staff set Salary=Salary*1.1");
stmt.executeBatch();
rs = db.executeQuery("SELECT * FROM staff", null);
// 查询并显示更新后的数据
System.out.println("-------------------------工资上涨10%之后------------------------");
while (rs.next()) {
System.out.println("行 " + rs.getRow() + ": "
+"工号: "+rs.getInt(1)+ "\t"
+"姓名: "+rs.getString(2) + "\t"
+"部门: "+rs.getString(3) + "\t"
+"薪水: "+rs.getInt(4) + "\t");
}
System.out.println("--------------------------------------------------------------");
// 关闭连接
db.closeAll();
} catch (Exception e) {
// 出现异常
if (conn != null) {
try {
// 回滚
conn.rollback();
} catch (SQLException se) {
se.printStackTrace();
}
}
e.printStackTrace();
}
}
}