【问题标题】:error when onCreate database is called. Android Studios调用 onCreate 数据库时出错。安卓工作室
【发布时间】:2016-08-07 20:07:19
【问题描述】:

我在这里查看了几个不同的视频和关于类似问题的问题,我的代码似乎很好,但无法弄清楚为什么在我的数据库类中编译 onCreate 时会出错。

我只是尝试在数据库中创建和添加一行。

这是主活动

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;
    }
}


}

我认为这可能是清单文件未初始化数据库类的问题,但是清单显示该类中没有默认构造函数。

<?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>

【问题讨论】:

    标签: android sql database sqlite android-studio


    【解决方案1】:

    您的问题完全在于 Table_create 的内容和您的列名。

    首先,关键字和值之间需要有空格。 "create table" + Table_name 解析为 "create tableCUSTOMER_TABLE"

    其次,您不应该在列名中添加空格。因此,不要使用"Car Model",例如使用"Car_Model"

    它有帮助,只是打印字符串。请参阅create-table-stmt 了解更多信息。

    【讨论】:

    • 每个类型后面还需要逗号。
    猜你喜欢
    • 1970-01-01
    • 2016-03-11
    • 2013-07-08
    • 2017-04-17
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多