2013-05-06 44 views
0

這是數據庫不能創造數據庫表錯誤

package com.example.sama; 

import android.app.Activity; 
import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.DatabaseErrorHandler; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 
import android.database.sqlite.SQLiteOpenHelper; 

public class Database extends Activity { 

public static final String KEY_ROWID ="_id"; 
public static final String KEY_NAME ="Bills_name"; 
public static final String KEY_MAXAMOUNT ="_"; 
public static final String KEY_REMAIN ="what_is_left"; 
private static final String DATABASE_NAME ="SAMA"; 
private static final String DATABASE_TABLE ="gg"; 
private static final int DATABASE_VERSION = 1; 
private DBhelper ourHelper; 
private final Context ourContext; 
private SQLiteDatabase ourDatabase; 



public static class DBhelper extends SQLiteOpenHelper{ 

    public DBhelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     db.execSQL("CREATE TABLE " + DATABASE_TABLE +" (" + 
     KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
       KEY_NAME + " TEXT NOT NULL, " + 
     KEY_MAXAMOUNT + " INTEGER NOT NULL , " + 
     KEY_REMAIN + " INTEGER);" 
    ); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); 
     onCreate(db); 

    } 



} 

public Database(Context c){ 
ourContext = c ; 

} 
public Database open() throws SQLException 
{ 
ourHelper = new DBhelper(ourContext); 
ourDatabase = ourHelper.getWritableDatabase(); 
return this; 

} 
public void close(){ 
ourHelper.close(); 
} 
public long creatEntry(String name, String maxamount) { 
// TODO Auto-generated method stub 
ContentValues cv = new ContentValues(); 
cv.put(KEY_NAME, name); 
cv.put(KEY_MAXAMOUNT, maxamount); 
return ourDatabase.insert(DATABASE_TABLE, null, cv); 

} 
public String getData() { 
// TODO Auto-generated method stub 
String[] columns = new String[]{KEY_ROWID, KEY_NAME ,KEY_MAXAMOUNT,KEY_REMAIN }; 
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null); 
String result =""; 
int iROW =c.getColumnIndex(KEY_ROWID); 
int iNAME =c.getColumnIndex(KEY_NAME); 
int iMAXAMOUNT =c.getColumnIndex(KEY_MAXAMOUNT); 
int iREMAIN =c.getColumnIndex(KEY_REMAIN); 

for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){ 
    result = result + c.getString(iROW) + " " + c.getString(iNAME) + " " +c.getString(iMAXAMOUNT) + " " + c.getString(iREMAIN) +"\n "; 

} 

return result; 
} 


} 

,這是新的域代碼,當我嘗試添加一些東西從我創建它的應用程序數據庫中說,它無法創建表時,代碼假設被它本身創建表的人知道什麼是錯了,請,謝謝您的時間

`package com.example.sama; 

import android.app.Activity; 
import android.app.Dialog; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class newfield extends Activity implements OnClickListener { 
Button save,cancel; 
EditText maxAmount,FieldName; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.newfield); 
    maxAmount = (EditText) findViewById(R.id.maxAmount); 
    FieldName = (EditText) findViewById(R.id.FieldName); 
    save = (Button) findViewById(R.id.SQLsave); 
    cancel = (Button) findViewById(R.id.SQLcancel); 
    save.setOnClickListener(this); 
    cancel.setOnClickListener(this); 
} 

@Override 
public void onClick(View arg0) { 
    // TODO Auto-generated method stub 
    switch (arg0.getId()){ 
    case R.id.SQLsave: 
      boolean didItWork = true ; 
      try{ 
      String name = FieldName.getText().toString(); 
      String maxamount = maxAmount.getText().toString(); 

      Database entry = new Database(newfield.this); 
      entry.open(); 
      entry.creatEntry(name, maxamount); 
      entry.close(); 
      }catch (Exception e){ 
       didItWork = false ; 
       Dialog d = new Dialog(newfield.this); 
       d.setTitle("doneeee !"); 
       TextView tv =new TextView(newfield.this); 
       tv.setText("sucsses"); 
       d.setContentView(tv); 
       d.show(); 
      }finally{ 
       if (didItWork){ 
        Dialog d = new Dialog(newfield.this); 
        d.setTitle("done !"); 
        TextView tv =new TextView(newfield.this); 
        tv.setText("sucsses"); 
        d.setContentView(tv); 
        d.show(); 
        Intent i = new Intent (newfield.this,MainActivity.class); 
        startActivity(i);      

       } 
      } 

     break; 
    case R.id.SQLcancel: 
     finish(); 
     break; 
    } 

} 

} 
+0

什麼是錯誤信息? – 2013-05-06 19:38:06

+1

問題可能與'KEY_MAXAMOUNT =「_」'的定義有關。我不確定只是一個下劃線是一個有效的列名稱。這會導致「CREATE TABLE」失敗。嘗試爲列使用不同的名稱。 – 2013-05-06 20:00:17

+0

@DavidWasser - 這應該可能是一個答案,而不是評論。 – GreyBeardedGeek 2013-05-07 00:32:44

回答

0

問題可能是與KEY_MAXAMOUNT = "_"定義。我不確定只是一個下劃線是一個有效的列名稱。這會導致CREATE TABLE失敗。嘗試爲列使用不同的名稱。