作为我的应用程序(API 11)的一部分,我需要提供一个预定义的数据库,并且我在网上找到了一个教程。这里是java代码,但我得到了一个错误:“未处理异常: java.sql.SQLException”(抛出sqle;)。
有什么解决办法吗?
耽误您时间,实在对不起
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());
}
}
});
}
}发布于 2016-10-20 08:21:22
异常出现在处理和运行时两种类型中。
处理的异常必须捕获(尝试捕获)或抛出(抛出)
例如SQLException,IOExeption
可以捕获运行时异常,但不需要将它们声明为引发。
例子:OutOfMemoryException,IndexOutOfBoundsException.
SQLException是一个已处理的异常,因此当另一个应答声明时,您要么必须将调用包围在一个try块中以处理该异常,要么声明
public void onClick(View v) throws SqlException {在您的示例中,您要捕获它然后重新抛出它,这意味着该方法必须声明它为已抛出的对象,通常除非您需要抛出它,否则您应该记录错误,然后默默地继续,在您的示例中,您声明的是抛出e;这实际上是将问题抛出一个级别,并且按照前面提到的那样做--声明该方法抛出它--抛出新错误()是运行时异常,因此不需要声明它,所以如果您不想声明抛出,您可以尝试类似的方法。
throw new Error(sqle.getMessage());发布于 2016-10-20 08:14:50
我的“如何修复”的想法是:在做进一步的/数据库工作之前,先学习这一必要的java基础知识!
一个很好的起点可以是关于异常的Java课程。
您知道,您的代码所在的方法声明为:
public void onClick(View v) {禁止抛出条款!
但你还是想把
throws sql exception 在那个方法范围内!那根本行不通!编译器告诉您,您的代码必须处理检查过的异常。您知道,该方法的签名不包含任何抛出子句,您不能同时使用它。无论是空抛出子句,还是没有抛出调用;还是抛出调用;但是,您将需要在方法上添加抛出子句!
换句话说:你的想法只是重新抛出了异常
throws方法的onClick子句中列出的检查异常。当然,当您正在重写该方法时,不能简单地将其更改为
@Override
public void onClick(View v) throws SqlException作为"Android“用户,不希望您的代码抛出检查过的异常。
长话短说:你必须找到其他方法来应对这一失败,而不是盲目地重蹈覆辙!为了做到这一点,你应该首先教育自己你正在做的事情。因为正如您现在的代码所显示的那样,您似乎正在收集一些想法(可能来自于类似这样的站点),希望最终得到一些有用的东西。提示:这将使不适用于。您将从一个编译器错误运行到下一个编译器错误;即使您需要编译,您的应用程序也会一直崩溃。因为,就像前面说的,你不知道你在做什么。这永远是一条通往灾难的道路。
发布于 2016-10-20 08:21:12
只需将尝试/捕获扩展到数据库事务结束:
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();
}https://stackoverflow.com/questions/40148801
复制相似问题