我正在尝试使用SQLite创建数据库,但出现此错误。我不知道原因。
这是我的代码:
MainActivity.java。
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private final String TAG = "de.lecture.hska";
EditText et_Name, et_Age;
MySQLiteOpenHelper mySQLiteOpenHelper;
MySQLAdapter mySQLAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_Name = (EditText) findViewById(R.id.Name);
et_Age = (EditText) findViewById(R.id.Age);
mySQLAdapter = new MySQLAdapter(this);
}
public void addData(View view) {
//SQLiteDatabase db = mySQLiteOpenHelper.getWritableDatabase();
String tmp = et_Name.getText().toString();
long ok = mySQLAdapter.addMyData(tmp);
Toast.makeText(this, String.valueOf(ok), Toast.LENGTH_LONG).show();
}
public void viewAllData (View view){
String tmp = mySQLAdapter.showAll();
Toast.makeText(this, tmp, Toast.LENGTH_LONG).show();
}
}
MySQLAdapter:
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;
/**
* Created by caju1013 on 09.12.2015.
*/
public class MySQLAdapter {
MySQLiteOpenHelper mySQLiteOpenHelper;
MySQLAdapter(Context context) {
mySQLiteOpenHelper = new MySQLiteOpenHelper(context);
}
public long addMyData (String Name){
ContentValues cv = new ContentValues();
cv.put(MySQLiteOpenHelper.TABLECOLUMN_NAME, "Probandoooo");
SQLiteDatabase db = mySQLiteOpenHelper.getWritableDatabase();
return db.insert(MySQLiteOpenHelper.TABLE_NAME, null, cv);
}
public String showAll(){
SQLiteDatabase db = mySQLiteOpenHelper.getWritableDatabase();
String [] array = {"Name"};
Cursor cursor = db.query(MySQLiteOpenHelper.TABLE_NAME, null, MySQLiteOpenHelper.TABLECOLUMN_NAME+" = Name", null, null, null, null);
db.close();
int index = cursor.getColumnIndex(MySQLiteOpenHelper.TABLECOLUMN_NAME);
StringBuffer stringBuffer = new StringBuffer();
while (cursor.moveToNext()) {
String tempo = cursor.getString(index);
stringBuffer.append(tempo+"\n");
}
return stringBuffer.toString();
}
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
private final static String TAG = "de.lecture.hska";
private final static String DATABASE_NAME = "mydatabase.db";
private final static int DATABASE_VERSION = 1;
private final static String TABLE_NAME = "MYTABLE";
private final static String TABLECOLUMN_UID = "_id";
private final static String TABLECOLUMN_NAME = "Name";
private final static String TABLECOLUMN_AGE = "Age";
private final static String CREATETABLE = "CREATE TABLE " + TABLE_NAME + "(" + TABLECOLUMN_UID + " INTEGER PRIMARY KEY AUTOINCREMENT , " + TABLECOLUMN_NAME + " VARCHAR(255), " + TABLECOLUMN_AGE + " VARCHAR(255));";
private final static String DROPTABLE = "DROP TABLE IF EXIST " + TABLE_NAME;
private Context mycontext;
public MySQLiteOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.mycontext = context;
Toast.makeText(mycontext, "constructor called",Toast.LENGTH_LONG).show();
Log.i(TAG, "Constructor called");
}
public void onCreate(SQLiteDatabase sqLiteDatabase) {
try {
sqLiteDatabase.execSQL(CREATETABLE);
Toast.makeText(mycontext, "onCreate",Toast.LENGTH_LONG).show();
Log.i(TAG, "onCreate");
} catch (SQLException e) {
Toast.makeText(mycontext, e.toString(),Toast.LENGTH_LONG).show();
Log.i(TAG, Log.getStackTraceString(e));
}
}
public void onUpgrade (SQLiteDatabase sqLiteDatabase, int i, int i1){
try {
sqLiteDatabase.execSQL(DROPTABLE);
onCreate(sqLiteDatabase);
Toast.makeText(mycontext, "OnUpgrade",Toast.LENGTH_LONG).show();
Log.i(TAG, "onUpgrade");
} catch (SQLException e) {
Toast.makeText(mycontext, e.toString(),Toast.LENGTH_LONG).show();
Log.i(TAG, Log.getStackTraceString(e));
}
}
}
}
MySQLiteOpenHelper:
import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;
/**
* Created by caju1013 on 09.12.2015.
*/
class MySQLiteOpenHelper extends SQLiteOpenHelper {
private final static String TAG = "de.lecture.hska";
private final static String DATABASE_NAME = "mydatabase.db";
private final static int DATABASE_VERSION = 1;
private final static String TABLE_NAME = "MYTABLE";
private final static String TABLECOLUMN_UID = "_id";
private final static String TABLECOLUMN_NAME = "Name";
private final static String TABLECOLUMN_AGE = "Age";
private final static String CREATETABLE = "CREATE TABLE " + TABLE_NAME + "(" + TABLECOLUMN_UID + " INTEGER PRIMARY KEY, " + TABLECOLUMN_NAME + " VARCHAR(255), " + TABLECOLUMN_AGE + " VARCHAR(255));";
private final static String DROPTABLE = "DROP TABLE IF EXIST " + TABLE_NAME;
private Context mycontext;
public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.mycontext = context;
Toast.makeText(mycontext, "constructor called",Toast.LENGTH_LONG).show();
Log.i(TAG, "Constructor called");
}
public void onCreate(SQLiteDatabase sqLiteDatabase) {
try {
sqLiteDatabase.execSQL(CREATETABLE);
Toast.makeText(mycontext, "onCreate",Toast.LENGTH_LONG).show();
Log.i(TAG, "onCreate");
} catch (SQLException e) {
Toast.makeText(mycontext, e.toString(),Toast.LENGTH_LONG).show();
Log.i(TAG, Log.getStackTraceString(e));
}
}
public void onUpgrade (SQLiteDatabase sqLiteDatabase, int i, int i1){
try {
sqLiteDatabase.execSQL(DROPTABLE);
onCreate(sqLiteDatabase);
Toast.makeText(mycontext, "OnUpgrade",Toast.LENGTH_LONG).show();
Log.i(TAG, "onUpgrade");
} catch (SQLException e) {
Toast.makeText(mycontext, e.toString(),Toast.LENGTH_LONG).show();
Log.i(TAG, Log.getStackTraceString(e));
}
}
}
activity_main.xml中:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Name"
android:id="@+id/Name"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Age"
android:id="@+id/Age"
android:layout_below="@+id/Name"
android:layout_alignStart="@+id/Name"
android:layout_marginTop="64dp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add Data"
android:id="@+id/button"
android:layout_below="@+id/Name"
android:layout_centerHorizontal="true"
android:onClick="addData"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="View all data"
android:id="@+id/button2"
android:layout_below="@+id/Age"
android:layout_centerHorizontal="true"
android:layout_marginTop="37dp"
android:onClick="viewAllData"/>
</RelativeLayout>
答案 0 :(得分:-1)
你在这一行中的问题::
private final static String CREATETABLE = "CREATE TABLE " + TABLE_NAME + "(" + TABLECOLUMN_UID + " INTEGER PRIMARY KEY, " + TABLECOLUMN_NAME + " VARCHAR(255), " + TABLECOLUMN_AGE + " VARCHAR(255));";
因为SQLITE不支持varchar将其更改为TEXT而不需要定义长度。
应该是这样的:
private final static String CREATETABLE = "CREATE TABLE " + TABLE_NAME + "(" + TABLECOLUMN_UID + " INTEGER PRIMARY KEY, " + TABLECOLUMN_NAME + " TEXT, " + TABLECOLUMN_AGE + " TEXT);";