java和数据库交互常见Exception

目录

引言

【sql执行异常】

【连接异常】

参考


引言

java和数据库交互常见Exception汇总,可用于平时运维常见问题排查和日志监控。

【sql执行异常】


#【基类】各类sql报错,比如kill sql也会报该错误
SQLException
#【基类】没有任何应用程序级功能干预时,重试先前失败操作可以成功的情况下抛出的 SQLException 子类
MySQLTransientException/SQLTransientException
#表示在没有进行任何应用程序级更改的情况下重试操作时,失败的连接操作可以成功
MySQLTransientConnectionException/SQLTransientConnectionException
#此异常表示由于死锁或其他事务序列化失败,当前语句自动被数据库回滚
MySQLTransactionRollbackException/SQLTransactionRollbackException
#SQL超时异常,比如MyBatis配置了defaultStatementTimeout,sql执行耗时超过了配置
MySQLTimeoutException/SQLTimeoutException

#【基类】重试相同操作将失败(除非纠正了 SQLException 的 cause)的情况下抛出的 SQLException 子类
MySQLNonTransientException/SQLNonTransientException
#此异常表示正在进行的查询违反了 SQL 语法规则
MySQLSyntaxErrorException/SQLSyntaxErrorException
#MySQL语句被取消异常
MySQLStatementCancelledException
#MySQL查询中断异常
MySQLQueryInterruptedException
#表示在失败原因没有纠正的情况下重试操作时,失败的连接操作不会成功
MySQLNonTransientConnectionException/SQLNonTransientConnectionException
#此异常表示建立连接期间提供的授权凭据无效
MySQLInvalidAuthorizationSpecException/SQLInvalidAuthorizationSpecException
#此异常表示违反了一个完整性约束(外键、主键或唯一键)
MySQLIntegrityConstraintViolationException/SQLIntegrityConstraintViolationException
#此异常表示各种数据错误,包括但不限于未经允许的转换、除以0、对函数无效的参数。
MySQLDataException/SQLDataException

【连接异常】


#【基类】应用程序执行某些恢复步骤并重试整个事务或事务分支(在分布式事务中)后,可以成功执行先前失败操作的情况下抛出的 SQLException 子类。恢复操作至少必须包括关闭当前连接和获得一个新连接
SQLRecoverableException
#表示与数据库通信错误的异常,比如没有配置探活,或者socketTimeout配置过小应用无法启动,端口配置错误,网络异常等
CommunicationsException

#与服务器还没连接,正准备建立连接,试图将套接字连接到远程地址和端口时发生错误的情况下,抛出此异常。这些错误通常发生在拒绝远程连接时(例如,没有任何进程在远程地址/端口上进行侦听),如果是网络延迟问题可以尝试调整jdbc connectTimeout 参数配置
ConnectException
#与服务器连接成功,在数据传输过程中,如果在读取或接受套接字时发生超时,则抛出此异常,如果是网络延迟问题可以尝试调整jdbc socketTimeout 参数配置
SocketTimeoutException

参考


#SocketTimeoutException和ConnectException简介
SocketTimeoutException和ConnectException简介_u010142437的博客-CSDN博客
#官档的jdbc5.1和8.0 Exception改变
MySQL :: MySQL Connector/J 8.0 Developer Guide :: 4.4.1.6 Changes for Exceptions
#JDK 1.6中文文档
java.sql.SQLException - 提供关于数据库访问错误或其他错误信息的异常。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的Java连接MySQL数据库交互界面示例: ```java import java.sql.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class DBConnectionDemo extends JFrame implements ActionListener { // 数据库连接参数 static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost:3306/mydb"; static final String USER = "root"; static final String PASS = "password"; // GUI组件 JLabel titleLabel, nameLabel, ageLabel, genderLabel; JTextField nameField, ageField, genderField; JButton addButton, clearButton; JTextArea resultArea; // 数据库连接对象 Connection conn = null; Statement stmt = null; public DBConnectionDemo() { // 设置界面 super("数据库交互界面"); setSize(400, 400); setDefaultCloseOperation(EXIT_ON_CLOSE); setLayout(new BorderLayout()); // 添加标题 titleLabel = new JLabel("添加用户信息"); titleLabel.setHorizontalAlignment(SwingConstants.CENTER); add(titleLabel, BorderLayout.NORTH); // 添加输入框和标签 JPanel inputPanel = new JPanel(new GridLayout(3, 2)); nameLabel = new JLabel("姓名:"); nameField = new JTextField(); ageLabel = new JLabel("年龄:"); ageField = new JTextField(); genderLabel = new JLabel("性别:"); genderField = new JTextField(); inputPanel.add(nameLabel); inputPanel.add(nameField); inputPanel.add(ageLabel); inputPanel.add(ageField); inputPanel.add(genderLabel); inputPanel.add(genderField); add(inputPanel, BorderLayout.CENTER); // 添加按钮 JPanel buttonPanel = new JPanel(new FlowLayout()); addButton = new JButton("添加"); addButton.addActionListener(this); clearButton = new JButton("清空"); clearButton.addActionListener(this); buttonPanel.add(addButton); buttonPanel.add(clearButton); add(buttonPanel, BorderLayout.SOUTH); // 添加结果显示区域 resultArea = new JTextArea(); resultArea.setEditable(false); JScrollPane scrollPane = new JScrollPane(resultArea); add(scrollPane, BorderLayout.EAST); // 连接数据库 try { Class.forName(JDBC_DRIVER); conn = DriverManager.getConnection(DB_URL, USER, PASS); stmt = conn.createStatement(); } catch (Exception ex) { ex.printStackTrace(); } // 显示界面 setVisible(true); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == addButton) { // 获取用户输入 String name = nameField.getText(); int age = Integer.parseInt(ageField.getText()); String gender = genderField.getText(); // 添加到数据库 try { String sql = "INSERT INTO users (name, age, gender) VALUES ('" + name + "', " + age + ", '" + gender + "')"; int rows = stmt.executeUpdate(sql); if (rows > 0) { resultArea.append("成功添加用户: " + name + "\n"); } else { resultArea.append("添加用户失败\n"); } } catch (SQLException ex) { ex.printStackTrace(); } } else if (e.getSource() == clearButton) { // 清空用户输入 nameField.setText(""); ageField.setText(""); genderField.setText(""); } } public static void main(String[] args) { new DBConnectionDemo(); } } ``` 这个程序实现了一个简单的添加用户信息的功能,用户可以在界面中输入姓名、年龄和性别,然后点击“添加”按钮将信息添加到MySQL数据库中,并在右侧的结果显示区域显示添加的结果。注意,这个程序并没有进行输入验证和SQL注入防护,需要在实际应用中完善。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值