美文网首页
实验4---JDBC编程2

实验4---JDBC编程2

作者: Riya | 来源:发表于2020-02-24 13:37 被阅读0次

一、实验目的

本实验的目的是掌握数据库环境的搭建;掌握使用JDBC访问数据库的步骤;掌握使用Java API操作数据库。

二、实验内容

创建一个Product(Product_Code CHAR(7), Description VARCHAR(40), Price DECIMAL(10, 2))表,完成以下功能:

  1. 使用事务处理,将Product表中Description字段是'Toaster'的Price的值减少10,并将减少的10增加到Description字段为'Hair dryer'的Price属性值上。
  2. 使用批量更新,完成对Product表批量插入一批数据的功能。

三、实验步骤

  1. 在实验三的基础上,连接数据库,创建表,插入一些值

  2. 查询初始表中的内容

  3. (将Product表中Description字段是'Toaster'的Price的值减少10)将Toaster的所有属性值从表中取出,存入ResultSet中。操作ResultSet,将Toaster的price属性加10存入变量s中。将'Toaster'的Price的值更新为s

  4. (将减少的10增加到Description字段为'Hair dryer'的Price属性值上)与步骤三类似,将加10,改为减10;

  5. 使用addBatch和executeBatch批量插入数据

四、实验结果



五、实验小结

通过此次实验,对事务的处理和异常的处理有了更深刻的理解,以及对于jdbc对数据库的操作更加的熟练。Ps:遇到的小问题及解决方法:
异常:java.sql.SQLException: Before start of result set
解决方法:使用rs.getString();前一定要加上rs.next();
原因:ResultSet对象代表SQL语句执行的结果集,维护指向其当前数据行的光标。每调用一次next()方法,光标向下移动一行。最初它位于第一行之前,因此第一次调用next()应把光标置于第一行上,使它成为当前行。随着每次调用next()将导致光标向下移动一行。在ResultSe对象及其父辈Statement对象关闭之前,光标一直保持有效。

六、源代码

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class ConnectionDemo {
public static void main(String[] args) throws Exception {
double s=0;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
// 建立数据库连接
String url="jdbc:mysql://localhost:3306/database";
String user="root";
String password="1009707126zxy+";
Connection conn=DriverManager.getConnection(url,user,password);
System.out.println("连接成功!");
PreparedStatement ps = null;

// 创建Statment对象
Statement stmt = conn.createStatement();
stmt.close();

//第一次查询表内容
System.out.println("第一次查询表内容");
ps = conn.prepareStatement("select * from Product");
ResultSet result1 = ps.executeQuery();
while(result1.next())
System.out.println(result1.getString("Product_Code")+"\t"+result1.getString("Description")+"\t"+result1.getDouble("Price"));

//修改;将Product表中Description字段是'Toaster'的Price的值减少10
ps = conn.prepareStatement("select *from Product where Description ='Toaster'");
ResultSet rs1 = ps.executeQuery();
while(rs1.next()) {
s=rs1.getInt(3)-10;
String sql1="Update Product set Price="+s+" where Description='Toaster'";
ps = conn.prepareStatement(sql1);
ps.executeUpdate();
}

//查询
System.out.println("第二次查询表内容(修改后;将Product表中Description字段是'Toaster'的Price的值减少10)");
ps = conn.prepareStatement("select * from Product");
ResultSet result2 = ps.executeQuery();
while(result2.next())
System.out.println(result2.getString("Product_Code")+"\t"+result2.getString("Description")+"\t"+result2.getDouble("Price"));

//修改;将减少的10增加到Description字段为'Hair dryer'的Price属性值上
ps = conn.prepareStatement("select *from Product where Description ='Hair dryer'");
ResultSet rs2 = ps.executeQuery();
while(rs2.next()) {
s=rs2.getInt(3)+10;
String sql2="Update Product set Price="+s+" where Description='Hair dryer'";
ps = conn.prepareStatement(sql2);
ps.executeUpdate();
}

//查询
System.out.println("第三次查询表内容(修改后;将减少的10增加到Description字段为'Hair dryer'的Price属性值上)");
ps = conn.prepareStatement("select * from Product");
ResultSet result3 = ps.executeQuery();
while(result3.next())
System.out.println(result3.getString("Product_Code")+"\t"+result3.getString("Description")+"\t"+result3.getDouble("Price"));

//批量更新
boolean Commit=conn.getAutoCommit();
System.out.println("事务提交状态:"+Commit);
if(Commit) {
  conn.setAutoCommit(false);//关闭自动提交
}
stmt=conn.createStatement();
stmt.addBatch("Insert into Product(Product_Code,Description,Price)values(6,'Phone',100)");
stmt.addBatch("Insert into Product(Product_Code,Description,Price)values(7,'Laptop',200)");
stmt.addBatch("Insert into Product(Product_Code,Description,Price)values(8,'AirPods',300)");
stmt.executeBatch();
conn.commit();
conn.setAutoCommit(Commit);

//查询
System.out.println("第四次查询表内容(批量更新):");
ps = conn.prepareStatement("select * from Product");
ResultSet result5 = ps.executeQuery();
while(result5.next())
System.out.println(result5.getString("Product_Code")+"\t"+result5.getString("Description")+"\t"+result5.getDouble("Price"));

conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

相关文章

  • 实验4---JDBC编程2

    一、实验目的 本实验的目的是掌握数据库环境的搭建;掌握使用JDBC访问数据库的步骤;掌握使用Java API操作数...

  • 嵌入式lab3

    嵌入式系统导论实验报告 1.实验题目 DOL的编程与实例分析 2.实验结果 (1)修改example2中的文件,使...

  • 基于C++实现校园卡管理系统

    1 实验目的 本实验面向 C++语言的初学者 主要让实验者熟悉面向对象的编程思想以及类的使用 2 实验环境 本实验...

  • Hadoop实验——MapReduce编程(2)

    实验目的 通过实验掌握基本的MapReduce编程方法。 掌握用MapReduce解决一些常见的数据处理问题,包括...

  • 数字图像处理实验一

    MATLAB入门及数字图像处理编程基础 【实验目的】: 1. 熟悉和掌握MATLAB基本编程环境 2. 熟悉和掌握...

  • 学习编程的干货网站

    学习编程的干货网站 1.实验楼 https://www.shiyanlou.com/ 2.菜鸟教程 http://...

  • 服务器连接进行通信

    一、实验名称 TCP/IP网络编程 二、实验目的和要求 1.服务器程序,最多接受5个客户 2.接受特定消息可以结束...

  • 嵌入式系统导论实验报告 一、实验目的 1、进一步掌握本学期以来所做实验用到的各种元器件的使用方法和编程;2、加深G...

  • 微机原理第二篇

    8259中断程序控制实验【实验目的】 1.掌握8259中断控制的器的工作原理 2.学习8259的应用编程方法 3....

  • TDD编程实验

    本文分为以下几个方面: 知识、思路 实现代码 测试代码 git log截屏记录 知识、思路、github地址 ht...

网友评论

      本文标题:实验4---JDBC编程2

      本文链接:https://www.haomeiwen.com/subject/oxfvqhtx.html