2013-09-19 6 views
0

Я новичок в android и пытаюсь научиться создавать и вставлять материал в базу данных. Мне удалось создать и приложение работает, но я получаю эту ошибку, когда я пытаюсь вставить материал в:Ошибка SQLite при попытке вставить значения

Error inserting trip type=Hi title=Beach destination=Gotham 
android.database.sqlite.SQLiteException near "type": synthax error(code 1):, while 
compiling: INSERT INTO trips(trip type, title, destination) VALUES (?,?,?) 

Это моя PlanTrip база деятельности часть:

private EditText editText1; 
private EditText editText2; 
private EditText editText3; 

DBAdapter db = new DBAdapter(this); 

try {   
    String destPath = "/data/data/" + getPackageName() + "/databases/Trips.db"; 
    File f = new File(destPath);    
    if (!f.exists()) {   
     CopyDB(getBaseContext().getAssets().open("db"), 
     new FileOutputStream(destPath)); 
    } 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
    } 

EditText titleTxt = (EditText)findViewById(R.id.editText1); 
EditText destinationTxt = (EditText)findViewById(R.id.editText2); 
EditText tripTypeTxt = (EditText)findViewById(R.id.editText3); 

db.open(); 
long id = db.insertRecord(titleTxt.getText().toString(), 
destinationTxt.getText().toString(), tripTypeTxt.getText().toString()); 
db.close(); 

И мой DBAdapter:

public class DBAdapter { 

public static final String KEY_TRIPID = "id"; 
public static final String KEY_TITLE = "title"; 
public static final String KEY_DESTINATION = "destination"; 
public static final String KEY_TRIP_TYPE = "trip type"; 
public static final String KEY_STARTDATE = "start date"; 
public static final String KEY_ENDDATE = "end date"; 
private static final String TAG = "DBAdapter"; 

private static final String DATABASE_NAME = "Trips.db"; 
private static final String DATABASE_TABLE = "trips"; 
private static final int DATABASE_VERSION = 1; 

// Database creation sql statement 
/*private static final String DATABASE_CREATE = 
     "create table if not exists trips (trip_id integer primary key autoincrement, " 
    + "title VARCHAR not null, destination VARCHAR not null, triptype VARCHAR not null," 
    + " startdate VARCHAR, enddate VARCHAR);";*/ 
private static final String DATABASE_CREATE = 
     "CREATE table if not exists " + DATABASE_TABLE + " (" + KEY_TRIPID 
     + " integer PRIMARY KEY autoincrement," + KEY_TITLE + "," 
     + KEY_DESTINATION + ", " + KEY_TRIP_TYPE + ");"; 

private final Context context; 

private DatabaseHelper DBHelper; 
private SQLiteDatabase db; 


public DBAdapter(Context ctx) { 
this.context = ctx; 
DBHelper = new DatabaseHelper(context); 
} 

private static class DatabaseHelper extends SQLiteOpenHelper 
{ 
    DatabaseHelper(Context context) 
    { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    public void onCreate(SQLiteDatabase db) 
    { 
     try 
     { 
      db.execSQL(DATABASE_CREATE); 
     } 
     catch (SQLException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    { 
     Log.w(TAG, "Upgrading database from version " + oldVersion + 
      " to " + newVersion + ", which will destroy all old data"); 
     db.execSQL("DROP TABLE IF EXISTS trips"); 
     onCreate(db); 
    } 
} 

//open db 
public DBAdapter open() throws SQLException 
{ 
    db = DBHelper.getWritableDatabase(); 
    return this; 
} 

//close db 
    public void close() 
{ 
    DBHelper.close(); 
} 

    //insert record into db 
    public long insertRecord(String title, String destination, String tripType) 
{ 
    ContentValues initialValues = new ContentValues(); 
    initialValues.put(KEY_TITLE, title); 
    initialValues.put(KEY_DESTINATION, destination); 
    initialValues.put(KEY_TRIP_TYPE, tripType); 
    Toast.makeText(context, "Record Added", Toast.LENGTH_SHORT).show(); 
    return db.insert(DATABASE_TABLE, null, initialValues); 
} 

//delete record 
public boolean deleteRecord(long rowId) 
{ 
    return db.delete(DATABASE_TABLE, KEY_TRIPID + "=" + rowId, null) > 0; 
} 

//get all records 
public Cursor getAllRecords() 
{ 
    return db.query(DATABASE_TABLE, new String[] {KEY_TRIPID, KEY_TITLE, KEY_DESTINATION, KEY_TRIP_TYPE}, 
      null, null, null, null, null); 
} 

//get specific record 
public Cursor getRecord(long rowId) throws SQLException 
{ 
    Cursor mCursor = 
     db.query(true, DATABASE_TABLE, new String[] {KEY_TRIPID, KEY_TITLE, KEY_DESTINATION, KEY_TRIP_TYPE}, 
       KEY_TRIPID + "=" + rowId, null, null, null, null, null); 
    if (mCursor != null) 
     mCursor.moveToFirst(); 
return mCursor; 
} 

//update record 
public boolean UpdateRecord (long rowId, String title, String destination, String tripType) 
    { 
    ContentValues args = new ContentValues(); 
    args.put(KEY_TITLE, title); 
    args.put(KEY_DESTINATION, destination); 
    args.put(KEY_TRIP_TYPE, tripType); 
    return db.update(DATABASE_TABLE, args, KEY_TRIPID + "=" + rowId, null) > 0; 
    } 
} 

ответ

1

кажется, у вас есть пробелы в именах столбцов БД, используйте '_' вместо:

public static final String KEY_TRIP_TYPE = "trip_type"; 
+0

теперь он начинает сходить, как «стол поездки не имеет колонки с именем trip_type» – user2793886

+0

кажется, что это работает, но теперь, когда дело происходит. :) Извините, я действительно новичок в этой вещи – user2793886

+0

вам нужно заново создать таблицу –

0

Тип поездки по названию столбца имеет пробел между ними. Это означает, что вам придется использовать «вокруг». Например. `тип поездки`. Или еще лучше, вместо пробелов, замените пробелы символами подчеркивания.

E.g. public static final String KEY_TRIP_TYPE = "trip_type";

Вы можете сделать это и с другими вашими колонками.

Примечание. Поскольку вы изменили имена столбцов, у вас могут быть точные данные или удалить, а затем переустановить приложение.

0

изменить это:

public static final String KEY_TRIPID = "_id"; 
public static final String KEY_TITLE = "title"; 
public static final String KEY_DESTINATION = "destination"; 
public static final String KEY_TRIP_TYPE = "trip_type"; 
public static final String KEY_STARTDATE = "start_date"; 
public static final String KEY_ENDDATE = "end_date"; 

больше берут выглядеть here. А также вам необходимо обновить структуру таблицы, используя обновление версии базы данных.

3
public static final String KEY_TRIP_TYPE = "trip type"; 

вместо

public static final String KEY_TRIP_TYPE = "trip_type"; 

, потому что пространство не позволяет в поле базы данных SQLite.

и если вы уже создали таблицу базы данных в папке активов БД, то не создать его в Java file.and, если вы не создаете таблицу внешне затем использовать это:

private static final String DATABASE_CREATE = 
     "create table if not exists trips (trip_id integer primary key autoincrement, " 
    + "title VARCHAR not null, destination VARCHAR not null, triptype VARCHAR not null," 
    + " startdate VARCHAR, enddate VARCHAR); 

если это анс полезно вы, пожалуйста, проголосуйте.

+0

@dipali ............ его право – Piyush

Смежные вопросы