java dao异常_JAVA学习之 异常处理机制

今天就来说说java的异常处理机制,异常处理不是第一接触,尤其是写过非常多c#的代码,基本都会写到异常处理的代码,事实上c#的异常处理与java的异常处理基本都是一样的,仅仅是在一些细节上不是非常一样。

今天就来说说关于Java的异常处理机制。

一、为什么须要

1、原因非常easy就是错误是无法避免的。为什么这么说:我们的程序都是须要与外界交互的。可是外界环境是没有办法控制的。比如要訪问的文件不存在,突然网络中断,或者操作失误等等都在所难免。还有代码是程序猿写出来的,有bug也在情理之中。

2、异常无法避免,可是一个好的系统不能再遇到异常的时候就瘫痪吧?!

我们须要对用户提出友好的提示。而且对用户的操作进行保存。这样异常处理就是很必要的了。

首先说道异常。我们都知道在敲代码的时候异常在所难免,可是这些异常都是怎么造成的呢?。总结发现异常通常是由用户错误引起,程序错误引起,物理错误引起。

二、优势

1、传统的方法会将非常多精力用在错误处理上,假设用异常处理我们能够先完毕正常的流程,再对异常进行捕捉处理

2、传统的方法正常流程和异常混在一起,而异常处理则是互相独立的,增强了代码的可读性。

3、传统的方法使用分支语句来处理错误。添加了代码的复杂性。假设用异常处理的方法则对异常类型进行分类型分组别进行处理简单明了

4、传统的方法仅仅能对考虑到的错误进行处理。对无法预測的错误没有应对措施,假设用异常处理的方式则对各种异常都能进行处理

三、分类

45498e347bb16304a21dcbdb72b937cb.png

1、Throwable(java.lang.Throwable):在API文档中写到:Throwable类是Java语言中全部错误或异常的超类。

仅仅有当对象是此类(或其子类之中的一个)的实例时。才干通过Java虚拟机或者Java throw语句抛出。类似地,仅仅有此类或其子类之中的一个才干够是catch子句中的參数类型。

2、Error(java.lang.Error):我们都知道是错误的意思。用于指示合理的应用程序不应该试图捕获的严重问题

3、Exception(java.lang.Exception):异常是指程序本身能够处理的异常

4、RuntimeException(java.lang.RuntimeException)(执行时异常):可能在java虚拟机正常执行期间抛出的异常超类。这样的异常是能够通过改进代码来避免的。

5、非执行时异常(编译异常):是runtimeException以外的异常,从程序的角度讲是必须进行处理的异常,假设不处理。程序就不能编译通过。

比如:sqlException以及自己定义的Exception异常。

四、异常机制

在java中两种方法处理异常:捕捉异常,抛出异常。

1、捕捉异常:

使用try...catch捕获异常并处理,多个catch语句用来匹配多个异常。如:

代码例如以下:

package com.tgb.pattern;

import javax.swing.JOptionPane;

public class Demo {

public static void main(String[] args){

int i=Integer.parseInt(JOptionPane.showInputDialog("请输入一个整数"));

JOptionPane.showMessageDialog(null,"输入的整数是:"+ i);

}

}

假设输入qq就会出现:

209cc7c35810dfcd9dcf0fbf1de9f94e.png

调整后:

package com.tgb.pattern;

import javax.swing.JOptionPane;

public class Demo {

public static void main(String[] args){

try{

int i=Integer.parseInt(JOptionPane.showInputDialog("请输入一个整数"));

JOptionPane.showMessageDialog(null,"输入的整数是:"+ i);

}catch(NumberFormatException nf){

JOptionPane.showMessageDialog(null,nf.getMessage());

}

}

}

结果为:

SouthEast

这样用户还是没有办法看明确,继续改动:

package com.tgb.pattern;

import javax.swing.JOptionPane;

public class Demo {

public static void main(String[] args){

try{

int i=Integer.parseInt(JOptionPane.showInputDialog("请输入一个整数"));

JOptionPane.showMessageDialog(null,"输入的整数是:"+ i);

}catch(NumberFormatException nf){

JOptionPane.showMessageDialog(null,"仅仅能输入整数!");

}

}

}

结果为:

SouthEast

再看一个多个catch的代码:

package com.tgb.pattern;

import javax.swing.JOptionPane;

public class Demo {

public static void main(String[] args){

try{

int i=Integer.parseInt(JOptionPane.showInputDialog("请输入一个整数。范围是0-10:"));

JOptionPane.showMessageDialog(null,"输入的数为:" +getIntDigit(i));

}catch(Exception ex){

JOptionPane.showMessageDialog(null,ex.getMessage());

}

}

static int getIntDigit(int i)throws Exception{

if(i>0 && i<=10){

return i;

}else{

throw new Exception("输入数的范围不在0-10之间");

}

}

}

结果为:

b7549a07e262bb373f4aebc1dde8a18c.png

SouthEast

7cf178b4966fe3012324369fa3b82cee.png

015e4dc43ea8ab19c53c5b1156a6602c.png

没能不为整数的数据进行异常处理,以下改动一下:

package com.tgb.pattern;

import javax.swing.JOptionPane;

public class Demo {

public static void main(String[] args){

try{

int i=Integer.parseInt(JOptionPane.showInputDialog("请输入一个整数,范围是0-10:"));

JOptionPane.showMessageDialog(null,"输入的数为:" +getIntDigit(i));

}catch(NumberFormatException nf){

JOptionPane.showMessageDialog(null, "必须输入整数");

}catch(Exception ex){

JOptionPane.showMessageDialog(null,ex.getMessage());

}

}

static int getIntDigit(int i)throws Exception{

if(i>0 && i<=10){

return i;

}else{

throw new Exception("输入数的范围不在0-10之间");

}

}

}

结果为:

bf629a4e09a94ceb79713cfb919bb232.png

01ba1f565a6c08cfcbb69398f72fd606.png

这样就能够捕获到不同的异常信息并对其进行处理了。事实上以上代码的getIntDigit方法中的异常处理就是抛出,并在主方法中进行捕获。所以就不再写关于抛出异常的实例了。

在java的异常处理机制中还有非常多不同的java异常处理类,这里没有一一说明,能够在响应的api文档进行查询。当然假设有兴趣也能够在写程序过程中收集错误信息。非常好的利用异常处理能够提高代码的可读性。使的代码更加简洁!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为你提供一个简单的图书信息管理系统的Java代码示例,包括使用面向对象技术、主函数、异常处理、JDBC连接SQL Server数据库和基本的增删改查操作。请注意,本示例代码仅供参考,具体实现可能因需求不同而有所不同。 首先,我们需要创建一个Book,用于存储图书信息: ```java public class Book { private int id; private String title; private String author; private String publisher; private int year; private double price; public Book(int id, String title, String author, String publisher, int year, double price) { this.id = id; this.title = title; this.author = author; this.publisher = publisher; this.year = year; this.price = price; } // getters and setters // ... @Override public String toString() { return "Book [id=" + id + ", title=" + title + ", author=" + author + ", publisher=" + publisher + ", year=" + year + ", price=" + price + "]"; } } ``` 然后,我们需要创建一个BookDao,用于与数据库交互,包括增删改查等操作: ```java import java.sql.*; import java.util.ArrayList; import java.util.List; public class BookDao { private final String url = "jdbc:mysql://localhost:3306/books"; private final String user = "root"; private final String password = "root"; public BookDao() { try { Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public List<Book> getAllBooks() { List<Book> books = new ArrayList<>(); String sql = "SELECT * FROM book"; try (Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql)) { while (rs.next()) { int id = rs.getInt("id"); String title = rs.getString("title"); String author = rs.getString("author"); String publisher = rs.getString("publisher"); int year = rs.getInt("year"); double price = rs.getDouble("price"); books.add(new Book(id, title, author, publisher, year, price)); } } catch (SQLException e) { e.printStackTrace(); } return books; } public Book getBookById(int id) { Book book = null; String sql = "SELECT * FROM book WHERE id=?"; try (Connection conn = DriverManager.getConnection(url, user, password); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setInt(1, id); try (ResultSet rs = pstmt.executeQuery()) { if (rs.next()) { String title = rs.getString("title"); String author = rs.getString("author"); String publisher = rs.getString("publisher"); int year = rs.getInt("year"); double price = rs.getDouble("price"); book = new Book(id, title, author, publisher, year, price); } } } catch (SQLException e) { e.printStackTrace(); } return book; } public boolean addBook(Book book) { String sql = "INSERT INTO book (title, author, publisher, year, price) VALUES (?, ?, ?, ?, ?)"; try (Connection conn = DriverManager.getConnection(url, user, password); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, book.getTitle()); pstmt.setString(2, book.getAuthor()); pstmt.setString(3, book.getPublisher()); pstmt.setInt(4, book.getYear()); pstmt.setDouble(5, book.getPrice()); pstmt.executeUpdate(); return true; } catch (SQLException e) { e.printStackTrace(); return false; } } public boolean updateBook(Book book) { String sql = "UPDATE book SET title=?, author=?, publisher=?, year=?, price=? WHERE id=?"; try (Connection conn = DriverManager.getConnection(url, user, password); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, book.getTitle()); pstmt.setString(2, book.getAuthor()); pstmt.setString(3, book.getPublisher()); pstmt.setInt(4, book.getYear()); pstmt.setDouble(5, book.getPrice()); pstmt.setInt(6, book.getId()); pstmt.executeUpdate(); return true; } catch (SQLException e) { e.printStackTrace(); return false; } } public boolean deleteBook(int id) { String sql = "DELETE FROM book WHERE id=?"; try (Connection conn = DriverManager.getConnection(url, user, password); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setInt(1, id); pstmt.executeUpdate(); return true; } catch (SQLException e) { e.printStackTrace(); return false; } } } ``` 接下来,我们可以创建一个BookManager,用于测试BookDao中的各种操作: ```java import java.util.List; public class BookManager { public static void main(String[] args) { BookDao dao = new BookDao(); // test getAllBooks List<Book> books = dao.getAllBooks(); for (Book book : books) { System.out.println(book); } // test getBookById Book book = dao.getBookById(1); System.out.println(book); // test addBook Book newBook = new Book(0, "Java Programming", "John Smith", "Oracle Press", 2021, 39.99); boolean success = dao.addBook(newBook); System.out.println("Add book: " + success); // test updateBook book.setPrice(49.99); success = dao.updateBook(book); System.out.println("Update book: " + success); // test deleteBook success = dao.deleteBook(2); System.out.println("Delete book: " + success); } } ``` 最后,我们需要添加异常处理机制,例如在发生SQLException时打印错误信息: ```java public class BookDao { // ... public List<Book> getAllBooks() { List<Book> books = new ArrayList<>(); String sql = "SELECT * FROM book"; try (Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql)) { while (rs.next()) { int id = rs.getInt("id"); String title = rs.getString("title"); String author = rs.getString("author"); String publisher = rs.getString("publisher"); int year = rs.getInt("year"); double price = rs.getDouble("price"); books.add(new Book(id, title, author, publisher, year, price)); } } catch (SQLException e) { e.printStackTrace(); } return books; } // ... } ``` 以上是一个简单的图书信息管理系统的Java代码示例,包括使用面向对象技术、主函数、异常处理、JDBC连接SQL Server数据库和基本的增删改查操作。需要注意的是,本示例代码仅供参考,具体实现可能因需求不同而有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值