2016-04-18 13 views
0

私はAndroidスタジオとデータベースの初心者です。しかし、ビデオとガイドの後、私は基本的なものを設定することができました。AndroidでSQLiteデータベースを設定する方法は?

これを実行した後、2つの追加テーブルを作成するために展開したかったのです。しかし後で後者のテーブルにデータを入力しようとすると、アプリケーションがクラッシュし、問題のあるものが見つからないようです。私は構文に異なるフォーマットを試みましたが、同じイベントでクラッシュし続けます(テーブルにデータを送信しようとすると)。

//Following is the DatabaseHelper class that set up the database. 
public class DatabaseHelper extends SQLiteOpenHelper{ 

//contacts 
private static final String TABLE_CONTACTS = "contacts"; 
private static final String COLUMN_ID = "id"; 
private static final String COLUMN_NAME = "name"; 
private static final String COLUMN_EMAIL = "email"; 
private static final String COLUMN_PHONENUMBER = "phonenumber"; 
private static final String COLUMN_UNAME = "uname"; 
private static final String COLUMN_PASS = "pass"; 

//inventory 
private static final String TABLE_ORGANIZATIONS = "organizations"; 
private static final String COLUMN_ORGANIZATION_ITEMID = "itemid"; 
private static final String COLUMN_ORGANIZATION_ITEMNAME = "itemname"; 
private static final String COLUMN_ORGANIZATION_PRICE = "price"; 
private static final String COLUMN_ORGANIZATION_QUANTITY = "quantity"; 
private static final String COLUMN_ORGANIZATION_DESCRIPTION = "description"; 

//management 
private static final String TABLE_MANAGEMENTS = "managements"; 
private static final String COLUMN_MANAGEMENT_EVENTID = "eventid"; 
private static final String COLUMN_MANAGEMENT_EVENTNAME = "eventname"; 
private static final String COLUMN_MANAGEMENT_EVENTDATE = "eventdate"; 


private static final int DATABASE_VERSION = 1; 
private static final String DATABASE_NAME = "inventstory.db"; 

//decare database variable 
SQLiteDatabase db; 

//create a table for to hold values. 
private static final String TABLE_CREATE_CONTACTS = "create table " + TABLE_CONTACTS + "(" 
     + COLUMN_ID + " integer primary key, " 
     + COLUMN_NAME + " text not null , " 
     + COLUMN_EMAIL + " text not null , " 
     + COLUMN_PHONENUMBER + " text not null , " 
     + COLUMN_UNAME + " text not null , " 
     + COLUMN_PASS + " text not null" + ");"; 

//create a table for to hold values. 
private static final String TABLE_CREATE_ORGANIZATIONS = "create table " + TABLE_ORGANIZATIONS + "(" 
     + COLUMN_ORGANIZATION_ITEMID + " integer primary key autoincrement, " 
     + COLUMN_ORGANIZATION_ITEMNAME + " text not null , " 
     + COLUMN_ORGANIZATION_PRICE + " text not null , " 
     + COLUMN_ORGANIZATION_QUANTITY + " text not null , " 
     + COLUMN_ORGANIZATION_DESCRIPTION + " text not null " + ");"; 

//create a table for to hold values. 
private static final String TABLE_CREATE_MANAGEMENTS = " create table " + TABLE_MANAGEMENTS + "(" 
     + COLUMN_MANAGEMENT_EVENTID + " integer primary key, " 
     + COLUMN_MANAGEMENT_EVENTNAME + " text not null , " 
     + COLUMN_MANAGEMENT_EVENTDATE + " text not null " + ");"; 

//constructor 
public DatabaseHelper(Context context) 
{ 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

    public void insertOrganization(inventoryorg c){ 

    //to insert to the database, use 'getWrite...' to make connection 
    db = this.getWritableDatabase(); 
    //create content values 
    ContentValues values = new ContentValues(); 

    // '*' means everything 
    // fetch the data 


    String query = " select * from 'organizations' "; 
    Cursor cursor = db.rawQuery(query, null); 
    int count = cursor.getCount(); //what does this do 

// values.put(COLUMN_ORGANIZATION_ITEMID, count); // should this be changed to 'c.getItemid()' 
    values.put(COLUMN_ORGANIZATION_ITEMNAME, c.getItemname()); 
    values.put(COLUMN_ORGANIZATION_PRICE, c.getPrice()); 
    values.put(COLUMN_ORGANIZATION_QUANTITY, c.getQuantity()); 
    values.put(COLUMN_ORGANIZATION_DESCRIPTION, c.getDescription()); 

    db.insert(TABLE_ORGANIZATIONS, null, values); 

} 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
    //change 
    //db.execSQL(TABLE_CREATE_CONTACTS); 
    //db.execSQL(TABLE_CREATE_ORGANIZATIONS); 
    //db.execSQL(TABLE_CREATE_MANAGEMENTS); 
    db.execSQL(TABLE_CREATE_CONTACTS+TABLE_CREATE_ORGANIZATIONS+TABLE_CREATE_MANAGEMENTS); 
    this.db = db; 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
// db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS); 
    // db.execSQL("DROP TABLE IF EXISTS " + TABLE_ORGANIZATIONS); 
    //db.execSQL("DROP TABLE IF EXISTS " + TABLE_MANAGEMENTS); 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS 
      + " DROP TABLE IF EXISTS " + TABLE_ORGANIZATIONS 
      + " DROP TABLE IF EXISTS " + TABLE_MANAGEMENTS); //same result 
    this.onCreate(db); 

} 

この次のコードは、(Databasehelper.javaにdecalred)テーブルにデータを挿入する(OrgInsert.javaから)関数です。 android.database.sqlite.SQLiteException:そのようなテーブル:組織(コード1)、コンパイル中:選択* '組織'

  1. テーブルがないから起因する

    public void onClickOrgSubmitButton(View v){ 
    
        if(v.getId()==R.id.BSubmitButton){ 
         //we read data from signup 
         EditText itemname = (EditText) findViewById(R.id.TFitemname); 
         EditText price = (EditText) findViewById(R.id.TFprice); 
         EditText quantity = (EditText) findViewById(R.id.TFquantity); 
         EditText description = (EditText) findViewById(R.id.TFdescription); 
    
         //convert them to string values 
         String itemnamestr = itemname.getText().toString(); 
         String pricestr = price.getText().toString(); 
         String quantitystr = quantity.getText().toString(); 
         String descriptionstr = description.getText().toString(); 
    
         //insert to the database 
         inventoryorg inv = new inventoryorg(); 
         inv.setItemname(itemnamestr); 
         inv.setPrice(pricestr); 
         inv.setQuantity(quantitystr); 
         inv.setDescription(descriptionstr); 
    
           //this one needs to be enforced. 
         helper.insertOrganization(inv); 
    
         //popup message. 
         Toast pass = Toast.makeText(OrgInsert.this, "Successfully created.", Toast.LENGTH_LONG); 
         pass.show(); 
    
         //'starting new activity.' To start, we need to make object of Intent class 
         //This takes back to the 'Organization' after new data is inserted. 
         Intent i = new Intent(OrgInsert.this, Organization.class); 
         startActivity(i); 
        } 
    } 
    

    作成中の 容疑者:アンドロイドのためのメソッドを実行できませんでした:onClickの
    //'数' value.putからの

    //java.lang.IllegalStateException ItemIDを

    のために // com.example.edward.inventstoryreformat.OrgInsert.onSubmitButton(OrgInsert.java:51)で

私は思う:51 helper.insertOrganization(inv)です。

上記の情報は、私が回避しようとしたいくつかのエラーメッセージです。 「連絡先」が問題なく作成されるため、これは「SignUp.java」によって行われるため、これは私にとっては紛らわしいものです。 SQLite Managerを使用してデータベースをチェックし、それらが作成されて保存されていることを確認しました。あなたのinsertOrganization()方法で

+0

は 'そのようなテーブルが:あなたのテーブルのinventoryorg' ...どれもinventoryorg''と命名されていないか、その名前 –

+0

@ cricket_007ああ申し訳ありませんが、私を聞かせてダブルチェックしてテーブルを作成しませんでした。私はこれを修正しようとする変数とクラスの名前を変更し続けました。編集:inventoryorgは組織に変更され、確認されました。 – HolyMeow

+0

ここに投稿したデータベースクラスの 'onCreate'メソッドがないようです。それはテーブルが作成されるところです –

答えて

0

は、あなたのSELECT文で、「組織組織に変更します。

UPDATE(2016年4月20日):約束どおり

、SQL文で引用符に関するいくつかの情報:

[S]イングル引用符があるため、[S] SQLクエリでトリングリテラル。組織はすでに作成されているため、すでにDBのテーブルオブジェクトです。したがって、この場合は一重引用符は使用されません。

[D]不確かな引用符は[D]データベースの予約済みキーワード用です。テーブルの名前がの場合、の場合は、SELECT * FROM "insert"を使用してください。二重引用符を使用することもできますが、同じエラーが発生します。それにもかかわらず、データベース内の既存のオブジェクトを参照するときは、一重引用符を使用しないでください。

また、再びあなたのコードと更新をチェックした後、私はあなたがダブルチェックすべきいくつかのことに気づいた:

  1. あなたTABLE_CREATE_ORGANIZATIONSをごCOLUMN_ORGANIZATION_ITEMIDが自動インクリメントであることを述べています。つまり、そのテーブルのidカラムを明示的に設定する必要はありません。また、デシベルで、それを開いた後、データベースをクローズすることを忘れないでください

    String query = " select * from 'organizations' "; 
    Cursor cursor = db.rawQuery(query, null); 
    int count = cursor.getCount(); //what does this do 
    
  2. :だから、あなたは、すべて実際にポイントを引き起こし、現在のエラーは、あなたのINSERTコード、中に以下の行を必要としません。 。閉じる()。この場合、insertOrganization()、onCreate()およびonUpdate()メソッドの最後の行にある必要があります。

  3. 最後に、すべてのTABLE_CREATE_XXX文字列定数で、CREATE TABLE IF NOT EXISTSあなたが何かを上書きしていないことを確認してください。

このいずれかが役立つ場合はお知らせください。そうでない場合は、SQLiteOpenHelperクラスを拡張する別の方法を提供します。

+0

onCreateが追加されました –

+0

ありがとうございます。**組織**に変更しましたが、動作しませんでした。 – HolyMeow

0

試してみてください!

public void insertOrganization(inventoryorg c){ 

//to insert to the database, use 'getWrite...' to make connection 
db = this.getWritableDatabase(); 
//create content values 
ContentValues values = new ContentValues(); 
// values.put(COLUMN_ORGANIZATION_ITEMID, count); // should this be changed to 'c.getItemid()' 
values.put(COLUMN_ORGANIZATION_ITEMNAME, c.getItemname()); 
values.put(COLUMN_ORGANIZATION_PRICE, c.getPrice()); 
values.put(COLUMN_ORGANIZATION_QUANTITY, c.getQuantity()); 
values.put(COLUMN_ORGANIZATION_DESCRIPTION, c.getDescription()); 

db.insert(TABLE_ORGANIZATIONS, null, values); 
db.close(); 

} 
+0

ありがとう、試しましたが動作しませんでした。 – HolyMeow

+0

試してみてください!アプリをアンインストールしてアプリを再起動してください! –

+0

@okしかし、私はエミュレータを再実行すると自動的にそれをしませんか? – HolyMeow

関連する問題