2016-10-20 5 views
-1

私のアプリケーション(API 11)の一部として、定義済みのデータベースを提供する必要があり、チュートリアルをオンラインで見つけました。だからここにJavaコードがありますが、「未処理の例外:java.sql.SQLException」というエラーが発生します(sqle;を投げます)。未処理の例外を修正する:throw sqleのjava.sql.SQLException

修正方法はありますか?お時間を

おかげ

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()); 
      } 
     } 
    }); 
} 
} 
+0

例外のメッセージは何ですか? sqle.getMessage()は何を返しますか? – Gernot

+0

私はあなたがアンドロイドで 'SQLExceptions'を取得しないと確信しています。もしあなたが['SQLiteException'](https://developer.android.com/reference/android/database/sqlite/SQLiteException.html)を取得することになります。 – zapl

+0

Javaチュートリアルを読んでください。これは本当に基本的なものです。 –

答えて

2

例外は、2種類の取扱およびランタイムに来ます。

取扱例外はキャッチ(キャッチしてみてください)、またはスローする必要があります(スロー)

のSQLExceptionIOExeption

ランタイム例外をキャッチすることができますがスローされたとして、彼らは宣言する必要はありません。

例:OutOfMemoryExceptionIndexOutOfBoundsException。他の答えはあなたを宣言したように

SQLExceptionが処理した例外のいずれかの例外を処理するためのtry catchブロックでの通話を囲むか、あなたはそれをキャッチ再スローされますあなたの場合は

public void onClick(View v) throws SqlException { 

を宣言する必要がこれは、メソッドがスローされたと宣言しなければならないことを意味します。通常は、スローする必要がない限り、try catchのオブジェクトを敗北させます。エラーをログに記録して、静かに続行します。 ;これは文字通りレベルを上げて問題を投げているだけで、前に述べたようにする必要があります - メソッドがそれをスローすると宣言します新しいErrorをスローするのは実行時の例外なので宣言する必要はありませんそれを宣言する必要はありません。何かを試すことができる

throw new Error(sqle.getMessage()); 
4

私の「修正する方法のアイデア」である:研究、さらにアンドロイド/データベース作業を行う前に不可欠Javaの基本!

良い出発点はThe Java lesson about exceptionsです。あなたが見

、あなたのコードはに座っている方法は次のように宣言されていない:何がthrows節[

public void onClick(View v) { 

!まだ]

しかし、あなたがそのメソッド内

throws sql exception 

を配置したいです!それは単に動作することはできません!コンパイラは、あなたのコードがそのチェックされた例外を処理しなければならないことを伝えています。あなたは、そのメソッドのシグネチャにはスロー句は含まれておらず、両方を持つことはできません。いずれかの空スロー句、スローコールはありません。または呼び出しを投げる。しかし、メソッドのthrows節が必要になります!言い換えれば

:ちょうどそのキャッチされた例外

  1. を再スローのあなたのアイデアは
  2. は、単に間違っているのは意味がありません - 囲む方法がスローでチェック例外にあなたを許可していませんので、 onClickメソッドのthrows句にはリストされていません。

そしてもちろん:あなたはは、その方法をオーバーライドしているとして、あなたは、単に「アンドロイド」の人々として

@Override 
public void onClick(View v) throws SqlException 

にそれを変更することはできませんあなたのコードをチェックスローする必要はありません例外。

短いストーリー:その例外を盲目的に再実行するのではなく、他のの失敗を処理する方法を見つける必要があります。そしてそれをするために。あなたがしていることについてまず自分自身を教育すべきです。あなたのコードが今見ているように、あなたはアイデアを引っ張っているようです(おそらくこのようなサイトから)、何かがうまくいくことを望んでいます。そしてヒント:それはでなく、の仕事です。あるコンパイラエラーから次のコンパイラエラーに実行されます。あなたがコンパイルするものを取得しても、あなたのアプリケーションは常にクラッシュし続けます。なぜなら、言ったように、あなたは何をしているのか分かりません。それは常に災害への道です。データベースのトランザクションが終了するまで

1

はちょうどあなたのtry/catchを拡張:

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(); 
} 
+0

彼はすでにtry/catchを持っています。彼は**キャッチから**スローします。あなたの答えはお手伝いではなく、申し訳ありません。スロー句の追加について追加した部分は、**完全なナンセンスです**メソッドをオーバーライドすると**不可能です! – GhostCat

+0

@GhostCat:私はこの行を意味します。c = myDbHelper.query( "EMP_TABLE"、null、null、null、null、null、null);コード内の はtry catchでカバーされていません – Anands23

+0

次に、答えを修正して、何を意味するのかを説明してください。これまでのところ、彼は本当に彼の質問に関連していないし、**間違ったアドバイスを与える**。 – GhostCat