数据库访问--插入和修改!

实验目的:

  1. 掌握使用优化写程序
  2. 使用JDBC操作数据库
  3. 使用事务实现批量插入和修改

实验内容1:使用JDBC操作数据库

  1. 创建一个学生表,学生有学号、姓名、年龄、班级和成绩信息。
  2. 定义学生实体类。
  3. 实现学生的添加和查询功能。
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();

}

}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值