Java结果集以关闭_显示结果集已关闭,正确顺序是什么

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

求大神帮忙看一下下面的很多条sql语句的顺序,不知道是不是顺序的错误

465b7bc663d34c6791732720498d7047.png

4b3b272db88ec63134e5b12571de8466.png

package 读者具体功能实现;

import java.awt.BorderLayout;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.ItemEvent;

import java.awt.event.ItemListener;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Vector;

import javax.swing.JButton;

import javax.swing.JComboBox;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTabbedPane;

import javax.swing.JTable;

import javax.swing.JTextArea;

import javax.swing.JTextField;

import javax.swing.table.JTableHeader;

import 对象.book;

import 对象.user;

import 界面类.userframe;

public class returnbook extends JFrame implements ActionListener {

JPanel jp1,jp2,jp3,jp4;

static Connection con = null;

Statement sm1,sm2,sm3,sm4,sm5,sm6,sm7,sm8;

JLabel jl1,jl2,jl3,jl4,jl5;

JButton **1,**2;

JTextField jtf1,jtf2,jtf3,jtf4,jtf5;

JComboBox jcb1,jcb2,jcb3,jcb4;

public static String dateStr;

public static Date back_date;

JScrollPane jsp;

ResultSet rs1,rs2,rs3,rs4;

public static void main(String[] args) {

returnbook rb=new returnbook ();

}

public returnbook (){//先处理上面

String [] str1={"数学类","文学类","体育类","外语类","史学类","文化生活类","教育类","医学类"};

String [] str2={"罗天益医学全书","体适能基础理论","文化生活与生活的文化","围城","新三国志","红与黑","概率论","文化生活与生活的文化"};

String [] str3={"钱钟书","阮伯仁","许敬生","司汤达","刘浩然","赵凯旋","南宫民","丁国昌"};

String [] str4={"清华大学出版社","北京大学出版社","外语研究社出版社","南开大学出版社","中国教育出版社","中国科学出版社","中国中医药出版社","人民体育出版社"};

jcb1 = new JComboBox(str1);

jcb1.addActionListener(this);

jcb2 = new JComboBox(str2);

jcb2.addActionListener(this);

jcb3 = new JComboBox(str3);

jcb3.addActionListener(this);

jcb4 = new JComboBox(str4);

jcb4.addActionListener(this);

JPanel jp1=new JPanel();

jp1.setLayout(new GridLayout(2,2));

jp1.add(jcb1);

jp1.add(jcb2);

jp1.add(jcb3);

jp1.add(jcb4);

JTabbedPane jtp=new JTabbedPane();

JPanel jp5=new JPanel();

jtp.add("条件查询",jp1);

jtp.add("全局查询",jp5 );

this.add(jtp,BorderLayout.NORTH);

//处理中部

Vector cn=new Vector<>();//定义列名向量

cn.add("图书编号");

cn.add("图书类型");

cn.add("图书名称");

cn.add("单价");

cn.add("出版社");

cn.add("出版日期");

cn.add("作者");

cn.add("库存数量");

Vector> cn3=new Vector<>();//定义表格数据向量

Vector cn2=new Vector<>();//定义行向量

cn2.add("a");

cn2.add("b");

cn2.add("c");

cn2.add("d");

cn2.add("e");

cn2.add("f");

cn2.add("g");

cn2.add("h");

cn3.add(cn2);

JTable jt1=new JTable (cn3,cn);

JTableHeader jth=jt1.getTableHeader();

this.add(jt1);

JScrollPane jsp=new JScrollPane (jt1);

this.add(jsp,BorderLayout.CENTER);

//处理下部

JPanel jp2=new JPanel ();

jp2.setLayout(new GridLayout(4,2));

JLabel jl1=new JLabel ("借书时间");

JLabel jl2=new JLabel ("规定时间");

JLabel jl3=new JLabel ("还书时间");

JLabel jl4=new JLabel ("罚款金额");

jtf1=new JTextField ();

jtf2=new JTextField ("60");

jtf3=new JTextField ();

jtf4=new JTextField ();

jp2.add(jl1);

jp2.add(jtf1);

jp2.add(jl2);

jp2.add(jtf2);

jp2.add(jl3);

jp2.add(jtf3);

jp2.add(jl4);

jp2.add(jtf4);

JPanel jp3=new JPanel ();

jp3.setLayout(new GridLayout(2,2));

JLabel jl5=new JLabel ("当前时间");

jtf5=new JTextField ();//输出当前时间

SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

jtf5.setText(df.format(new Date()));

JButton **1=new JButton ("归还");

**1.addActionListener(this);

JButton **2=new JButton ("退出");

**2.addActionListener(this);

jp3.add(jl5);

jp3.add(jtf5);

jp3.add(**1);

jp3.add(**2);

JPanel jp4=new JPanel ();

jp4.setLayout(new GridLayout(1,2));

jp4.add(jp2);

jp4.add(jp3);

this.add(jp4,BorderLayout.SOUTH);

this.setSize(525,600);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

this.setTitle("读者还书界面,当前用户为"+user.user_name+"正在使用本系统"); //设置标题

}

@Override

public void actionPerformed(ActionEvent arg0) {

if (arg0.getSource()==jcb1) {

System.out.println(jcb1.getSelectedItem().toString());

}

if (arg0.getSource()==jcb2) {

System.out.println(jcb2.getSelectedItem().toString());

}

if (arg0.getSource()==jcb3) {

System.out.println(jcb3.getSelectedItem().toString());

}

if (arg0.getSource()==jcb4) {

System.out.println(jcb4.getSelectedItem().toString());

}

if(arg0.getActionCommand().equals("归还")){

String UserName = "sa";

String Password = "sa";

String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";

String Url = "jdbc:sqlserver://127.0.0.1;database=book3";

try {

try {

Class.forName(driverName);

} catch (ClassNotFoundException e4) {

// TODO 自动生成的 catch 块

e4.printStackTrace();

}

System.out.println("数据库驱动加载成功");

con=DriverManager.getConnection(Url,UserName,Password);

} catch (SQLException e1) {

// TODO 自动生成的 catch 块

e1.printStackTrace();

}

try {

if(!con.isClosed()){

System.out.println("数据库连接成功");

}

} catch (SQLException e2) {

// TODO 自动生成的 catch 块

e2.printStackTrace();

}

sm1 = con.createStatement();

rs1 = sm1.executeQuery("select * from system_book where book_type='"+jcb1.getSelectedItem().toString()+"' or book_name='"+jcb2.getSelectedItem().toString()+"' or book_author='"+jcb3.getSelectedItem().toString()+"' or book_address='"+jcb4.getSelectedItem().toString()+"' ");

while(rs1.next()){

String v=rs1.getString("book_number");

String v1=rs1.getString("quantity");

String v3=rs1.getString("book_name");

int i = sm1.executeUpdate("update system_book set quantity=quantity+1 where book_number='"+v+"'");

if(i==1){

System.out.println("更新成功");

}

Statement sm2=con.createStatement();

rs2 = sm2.executeQuery("select rent_date from rent where book_number='"+v+"'");

while(rs2.next()){

String a=rs2.getString("rent_date");

System.out.println(a);

jtf1.setText(a);//得到借书时间

//得到还书时间

SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

jtf3.setText(df.format(new Date()));

String dateStr=df.format(new Date());

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

long m = sdf.parse(dateStr).getTime() - sdf.parse(a).getTime();

int days=(int) m / (1000 * 60 * 60 * 24);

String a4=days+"";

if(days>60){//同时确定超期次数

int a5=days-60;

String a6=a5+"";

jtf4.setText("+a6+");//得到罚款

int i3 = sm2.executeUpdate("insert into returnbook values('"+user.user_name+"','"+jtf3.getText()+"','"+v+"','"+v1+"','"+a4+"','overbacktime+1')");

if(i3==1){

System.out.println("插入成功");

}

int f=sm2.executeUpdate("delete from rent where book_number='"+v+"'");

if(f==1){

System.out.println("删除成功");

}

int i1 = sm2.executeUpdate("insert into fine values('"+user.user_name+"','"+v+"','"+v3+"','"+a6+"','"+a4+"')");

if(i1==1){

System.out.println("插入成功");

}

int i11 = sm2.executeUpdate("update creditrating set creditrating=creditrating-1");

if(i11==1){

System.out.println("插入成功");

}

}

else {

String b="0";

int i2 = sm1.executeUpdate("insert into returnbook values('"+user.user_name+"','"+jtf3.getText()+"','"+v+"','"+v1+"','"+a4+"','"+b+"')");

if(i2==1){

System.out.println("插入成功");

}

jtf4.setText("0");//罚款为0

}

}

}

}

if(arg0.getActionCommand().equals("退出")){

new userframe();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,打开文件流后必须及时关闭文件流,否则可能会导致文件被占用或者数据丢失等问题。关闭文件流时,应该按照先打开后关闭顺序进行关闭,即先关闭最后打开的文件流,最后关闭最先打开的文件流,这样可以保证所有的文件流都被正确关闭。 例如,如果你先打开了一个输入流,然后又打开了一个输出流,那么应该先关闭输出流,再关闭输入流。示例代码如下: ```java // 先打开输入流 FileInputStream fis = new FileInputStream("input.txt"); // 再打开输出流 FileOutputStream fos = new FileOutputStream("output.txt"); // ... // 先关闭输出流 fos.close(); // 再关闭输入流 fis.close(); ``` 在关闭文件流时,还应该使用try-catch-finally语句块,确保文件流能够被正确关闭,即使在处理过程中发生异常也不会出现问题。示例代码如下: ```java // 先打开输入流 FileInputStream fis = null; try { fis = new FileInputStream("input.txt"); // 打开输出流 FileOutputStream fos = null; try { fos = new FileOutputStream("output.txt"); // ... // 先关闭输出流 fos.close(); } catch (IOException e) { e.printStackTrace(); } finally { // 确保输出流被关闭 if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } catch (IOException e) { e.printStackTrace(); } finally { // 确保输入流被关闭 if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 这样,无论在处理过程中是否发生异常,都可以确保所有的文件流都被正确关闭
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值