2016-08-07 6 views
0

私はここでいくつかの異なるビデオや質問を見てきましたが、私のコードはうまくいくようですが、コンパイル時にエラーが発生する理由はわかりません。onデータベースのクラスを作成してください。onCreateデータベースが呼び出されたときにエラーが発生しました。 Android Studios

私は、データベースに行を作成して追加しようとしています。

これは、MainActivity

public class MainActivity extends AppCompatActivity { 
    EditText First, Last, Make, Model, Cost; 

Button Add; 
Context dx = this; 
DatabaseOps mydb; 


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

    mydb = new DatabaseOps(this); 

    First = (EditText) findViewById(R.id.First_Name); 
    Last = (EditText) findViewById(R.id.Last_Name); 
    Make = (EditText) findViewById(R.id.Car_Make); 
    Model = (EditText) findViewById(R.id.Car_Model); 
    Cost = (EditText) findViewById(R.id.Car_Cost); 
    Add = (Button) findViewById(R.id.add); 
    addData(); 

} 
public void addData() 
{ 
    Add.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) { 
      boolean ifInserted = mydb.InsertData(First.getText().toString(), 
        Last.getText().toString(), 
        Make.getText().toString(), 
        Model.getText().toString(), 
        Cost.getText().toString()); 
      if (ifInserted == true) { 
       Toast.makeText(getBaseContext(), "Successful entry", Toast.LENGTH_LONG).show(); 
      } else { 
       Toast.makeText(getBaseContext(), "UnSuccessful entry TRY AGAIN", Toast.LENGTH_LONG).show(); 
      } 
     } 


    }); 
} 

}

これは、私はそれがマニフェストファイルには、データベースクラスを初期化しないと問題になる可能性が考えていた

public class DatabaseOps extends SQLiteOpenHelper 
{ 

public static final String ID = "ID"; 
public static final String CUSTOMER_FIRST_NAME = "Customer First Name"; 
public static final String CUSTOMER_LAST_NAME = "Customer Last Name"; 
public static final String CAR_MAKE = "Car Make"; 
public static final String CAR_MODEL = "Car Model"; 
public static final String COST = "Cost"; 
public static final String DATABASE_NAME = "CAR_DEALER.db"; 
public static final String Table_name = "CUSTOMER_TABLE"; 
public static final String Table_create = "create table"+ Table_name + "(" + 
     ID + "INTEGER PRIMARY KEY AUTOINCREMENT"+ 
     CUSTOMER_FIRST_NAME +"TEXT" + 
     CUSTOMER_LAST_NAME +"TEXT" + 
     CAR_MAKE +"TEXT" + 
     CAR_MODEL +"TEXT" + 
     COST +"Integer" 
     +")"; 



public DatabaseOps(Context context) 
{ 
    super(context, DATABASE_NAME, null, 1); 

    Log.d("DatabaseOps", "Success Database created!"); 
} 

@Override 
public void onCreate(SQLiteDatabase db) 
{ 

    db.execSQL(Table_create); 
    Log.d("DatabaseOps", "Success Table created!"); 


} 

@Override 
public void onUpgrade(SQLiteDatabase db, int i, int i1) 
{ 
    db.execSQL("Drop Table IF Exists" +Table_name); 
    onCreate(db); 
} 

public boolean InsertData (String First, String Last, String Make, String Model, String Cost) 
{ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues cv = new ContentValues(); 
    cv.put(CUSTOMER_FIRST_NAME, First); 
    cv.put(CUSTOMER_LAST_NAME, Last); 
    cv.put(CAR_MAKE, Make); 
    cv.put(CAR_MODEL, Model); 
    cv.put(COST, Cost); 
    Long result = db.insert(Table_name, null, cv); 
    if(result == -1) 
    { 
     return false; 
    } 
    else 
    { 
     return true; 
    } 
} 


} 

Databaseクラスがありますマニフェストには、クラスにデフォルトのコンストラクタがないと言われています。

<?xml version="1.0" encoding="utf-8"?> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name="MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 




    </application> 

答えて

1

あなたの問題はTable_createの内容とあなたのカラム名と完全にあります。

まず、キーワードと値の間にスペースが必要です。 "create table" + Table_name"create tableCUSTOMER_TABLE"に解決されます。

第2に、列名にスペースを入れないでください。そのため、たとえば"Car Model"の代わりに"Car_Model"を使用します。

これは文字列を印刷するのに役立ちます。詳細については、create-table-stmtを参照してください。

+0

各タイプの後にカンマも必要です。 –

関連する問題