私は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)、コンパイル中:選択* '組織'
テーブルがないから起因する
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()方法で
は 'そのようなテーブルが:あなたのテーブルのinventoryorg' ...どれもinventoryorg''と命名されていないか、その名前 –
@ cricket_007ああ申し訳ありませんが、私を聞かせてダブルチェックしてテーブルを作成しませんでした。私はこれを修正しようとする変数とクラスの名前を変更し続けました。編集:inventoryorgは組織に変更され、確認されました。 – HolyMeow
ここに投稿したデータベースクラスの 'onCreate'メソッドがないようです。それはテーブルが作成されるところです –