首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复未处理的异常:用于引发sqle的java.sql.SQLException

如何修复未处理的异常:用于引发sqle的java.sql.SQLException
EN

Stack Overflow用户
提问于 2016-10-20 08:04:43
回答 3查看 9.9K关注 0票数 0

作为我的应用程序(API 11)的一部分,我需要提供一个预定义的数据库,并且我在网上找到了一个教程。这里是java代码,但我得到了一个错误:“未处理异常: java.sql.SQLException”(抛出sqle;)。

有什么解决办法吗?

耽误您时间,实在对不起

代码语言:javascript
复制
package com.wima.twomatrixlibrarisampletest;

import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.io.IOException;
import java.sql.SQLException;

public class Main210Activity extends AppCompatActivity {

    Cursor c = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main210);

    ((Button) findViewById(R.id.button01)).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            DatabaseHelper myDbHelper = new DatabaseHelper(Main210Activity.this);
            try {
                myDbHelper.createDataBase();
            } catch (IOException ioe) {
                throw new Error ("Unable to create database");
            }
            try {
                myDbHelper.openDataBase();
            } catch (SQLException sqle) {
                throw sqle;
            }
            Toast.makeText (Main210Activity.this, "Plz Work!", Toast.LENGTH_LONG).show();
            c = myDbHelper.query("EMP_TABLE", null, null, null, null, null, null);
            if(c.moveToFirst()) {
                do {
                    Toast.makeText(Main210Activity.this, "_id: " + c.getString(0) + "\n" +
                                    "E_Flange: " + c.getString(1) + "\n" +
                                    "E_Web: " + c.getString(2) + "\n" +
                                    "E_Ratio: " + c.getString(3), Toast.LENGTH_SHORT).show();
                }while (c.moveToNext());
            }
        }
    });
}
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-20 08:21:22

异常出现在处理和运行时两种类型中。

处理的异常必须捕获(尝试捕获)或抛出(抛出)

例如SQLExceptionIOExeption

可以捕获运行时异常,但不需要将它们声明为引发。

例子:OutOfMemoryExceptionIndexOutOfBoundsException.

SQLException是一个已处理的异常,因此当另一个应答声明时,您要么必须将调用包围在一个try块中以处理该异常,要么声明

代码语言:javascript
复制
public void onClick(View v) throws SqlException {

在您的示例中,您要捕获它然后重新抛出它,这意味着该方法必须声明它为已抛出的对象,通常除非您需要抛出它,否则您应该记录错误,然后默默地继续,在您的示例中,您声明的是抛出e;这实际上是将问题抛出一个级别,并且按照前面提到的那样做--声明该方法抛出它--抛出新错误()是运行时异常,因此不需要声明它,所以如果您不想声明抛出,您可以尝试类似的方法。

代码语言:javascript
复制
throw new Error(sqle.getMessage());
票数 3
EN

Stack Overflow用户

发布于 2016-10-20 08:14:50

我的“如何修复”的想法是:在做进一步的/数据库工作之前,先学习这一必要的java基础知识!

一个很好的起点可以是关于异常的Java课程

您知道,您的代码所在的方法声明为:

代码语言:javascript
复制
public void onClick(View v) {

禁止抛出条款!

但你还是想把

代码语言:javascript
复制
throws sql exception 

在那个方法范围内!那根本行不通!编译器告诉您,您的代码必须处理检查过的异常。您知道,该方法的签名不包含任何抛出子句,您不能同时使用它。无论是空抛出子句,还是没有抛出调用;还是抛出调用;但是,您将需要在方法上添加抛出子句!

换句话说:你的想法只是重新抛出了异常

  1. 没有任何意义
  2. 这完全是不正确的,因为封闭方法不允许您抛出未在throws方法的onClick子句中列出的检查异常。

当然,当您正在重写该方法时,不能简单地将其更改为

代码语言:javascript
复制
@Override
public void onClick(View v) throws SqlException

作为"Android“用户,不希望您的代码抛出检查过的异常。

长话短说:你必须找到其他方法来应对这一失败,而不是盲目地重蹈覆辙!为了做到这一点,你应该首先教育自己你正在做的事情。因为正如您现在的代码所显示的那样,您似乎正在收集一些想法(可能来自于类似这样的站点),希望最终得到一些有用的东西。提示:这将使不适用于。您将从一个编译器错误运行到下一个编译器错误;即使您需要编译,您的应用程序也会一直崩溃。因为,就像前面说的,你不知道你在做什么。这永远是一条通往灾难的道路。

票数 3
EN

Stack Overflow用户

发布于 2016-10-20 08:21:12

只需将尝试/捕获扩展到数据库事务结束:

代码语言:javascript
复制
 try {
     .....
     .....
      Toast.makeText (Main210Activity.this, "Plz Work!", Toast.LENGTH_LONG).show();
        c = myDbHelper.query("EMP_TABLE", null, null, null, null, null, null);
        if(c.moveToFirst()) {
            do {
                Toast.makeText(Main210Activity.this, "_id: " + c.getString(0) + "\n" +
                                "E_Flange: " + c.getString(1) + "\n" +
                                "E_Web: " + c.getString(2) + "\n" +
                                "E_Ratio: " + c.getString(3), Toast.LENGTH_SHORT).show();
            }while (c.moveToNext());
        }
    }
 catch(SQLException e)
 {
   e.printStackTrace();
 }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40148801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档