2012-01-19 5 views
0

Когда я сначала создать свою базу данных вставить некоторые элементы в нем, но я получаю сообщение об ошибке, когда это делать, и я не знаю, почемуОшибки вставки элементов в SQLite базы данных

01-19 11:23:56.850: E/SQLiteDatabase(11243): Error inserting manufacturer_id=0 ball=Train name=900 Global 
01-19 11:23:56.850: E/SQLiteDatabase(11243): android.database.sqlite.SQLiteException: unrecognized token: ":": , while compiling: INSERT INTO content://com.tyczj.bowling.providers.balls/balls(manufacturer_id,ball,name) VALUES (?,?,?) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:146) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:367) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at android.database.sqlite.SQLiteStatement.acquireAndLock(SQLiteStatement.java:253) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:111) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1737) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1610) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at com.tyczj.bowling.providers.Manufacturers$DatabaseHelper.onCreate(Manufacturers.java:65) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:157) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at com.tyczj.bowling.providers.Manufacturers.onCreate(Manufacturers.java:226) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at android.content.ContentProvider.attachInfo(ContentProvider.java:955) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at android.app.ActivityThread.installProvider(ActivityThread.java:3981) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at android.app.ActivityThread.installContentProviders(ActivityThread.java:3736) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at and roid.app.ActivityThread.handleBindApplication(ActivityThread.java:3692) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at android.app.ActivityThread.access$1200(ActivityThread.java:122) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1065) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at android.os.Looper.loop(Looper.java:132) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at android.app.ActivityThread.main(ActivityThread.java:4126) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at java.lang.reflect.Method.invokeNative(Native Method) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at java.lang.reflect.Method.invoke(Method.java:491) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 
01-19 11:23:56.850: E/SQLiteDatabase(11243): at dalvik.system.NativeStart.main(Native Method) 

в моей базе данных OnCreate я получаю строку массив (список производителей) из ресурсов и на основе производителя, я вставляю элементы в другой элемент в другую базу данных. он не при вставке элементов на основе производителя

это моя база данных производителей OnCreate, где все происходит

@Override 
    public void onCreate(SQLiteDatabase db) 
    { 
     createTables(db); 
     String[] manufacturers = context.getResources().getStringArray(R.array.manufacturers); 
     ContentValues v = new ContentValues(); 
     for(int i = 0; i < manufacturers.length; i++){ 
      Log.d("Manufacturers",manufacturers[i]); 
      v.put(NAME,manufacturers[i]); 
      db.insert(MANUFACTURERS_TABLE,null,v); 
      String[] balls; 
      if(i == 0){ 
       balls = context.getResources().getStringArray(R.array.global); 
       for(int j = 0; j<balls.length;j++){ 
        Log.d("Manufacturers",balls[j]); 
        v.put(Balls.MANUFACTURER_ID,i); 
        v.put(Balls.BALL,balls[j]); 
        db.insert(Balls.CONTENT_URI.toString(),null,v); 
       } 
      }else if(i == 1){ 
       balls = context.getResources().getStringArray(R.array.amf); 
       for(int j = 0; j<balls.length;j++){ 
        Log.d("Manufacturers",balls[j]); 
        v.put(Balls.MANUFACTURER_ID,i); 
        v.put(Balls.BALL,balls[j]); 
        db.insert(Balls.CONTENT_URI.toString(),null,v); 
       } 

      }else if(i == 2){ 
       balls = context.getResources().getStringArray(R.array.brunswick); 
       for(int j = 0; j<balls.length;j++){ 
        Log.d("Manufacturers",balls[j]); 
        v.put(Balls.MANUFACTURER_ID,i); 
        v.put(Balls.BALL,balls[j]); 
        db.insert(Balls.CONTENT_URI.toString(),null,v); 
       } 
      }else if(i == 3){ 
       balls = context.getResources().getStringArray(R.array.columbia); 
       for(int j = 0; j<balls.length;j++){ 
        Log.d("Manufacturers",balls[j]); 
        v.put(Balls.MANUFACTURER_ID,i); 
        v.put(Balls.BALL,balls[j]); 
        db.insert(Balls.CONTENT_URI.toString(),null,v); 
       } 
      }else if(i == 4){ 
       balls = context.getResources().getStringArray(R.array.ebonite); 
       for(int j = 0; j<balls.length;j++){ 
        Log.d("Manufacturers",balls[j]); 
        v.put(Balls.MANUFACTURER_ID,i); 
        v.put(Balls.BALL,balls[j]); 
        db.insert(Balls.CONTENT_URI.toString(),null,v); 
       } 
      }else if(i == 5){ 
       balls = context.getResources().getStringArray(R.array.hammer); 
       for(int j = 0; j<balls.length;j++){ 
        Log.d("Manufacturers",balls[j]); 
        v.put(Balls.MANUFACTURER_ID,i); 
        v.put(Balls.BALL,balls[j]); 
        db.insert(Balls.CONTENT_URI.toString(),null,v); 
       } 
      }else if(i == 6){ 
       balls = context.getResources().getStringArray(R.array.morich); 
       for(int j = 0; j<balls.length;j++){ 
        Log.d("Manufacturers",balls[j]); 
        v.put(Balls.MANUFACTURER_ID,i); 
        v.put(Balls.BALL,balls[j]); 
        db.insert(Balls.CONTENT_URI.toString(),null,v); 
       } 
      }else if(i == 7){ 
       balls = context.getResources().getStringArray(R.array.rotogrip); 
       for(int j = 0; j<balls.length;j++){ 
        Log.d("Manufacturers",balls[j]); 
        v.put(Balls.MANUFACTURER_ID,i); 
        v.put(Balls.BALL,balls[j]); 
        db.insert(Balls.CONTENT_URI.toString(),null,v); 
       } 
      }else if(i == 8){ 
       balls = context.getResources().getStringArray(R.array.storm); 
       for(int j = 0; j<balls.length;j++){ 
        Log.d("Manufacturers",balls[j]); 
        v.put(Balls.MANUFACTURER_ID,i); 
        v.put(Balls.BALL,balls[j]); 
        db.insert(Balls.CONTENT_URI.toString(),null,v); 
       } 
      }else if(i == 9){ 
       balls = context.getResources().getStringArray(R.array.track); 
       for(int j = 0; j<balls.length;j++){ 
        Log.d("Manufacturers",balls[j]); 
        v.put(Balls.MANUFACTURER_ID,i); 
        v.put(Balls.BALL,balls[j]); 
        db.insert(Balls.CONTENT_URI.toString(),null,v); 
       } 
      }else if(i == 10){ 
       balls = context.getResources().getStringArray(R.array.motiv); 
       for(int j = 0; j<balls.length;j++){ 
        Log.d("Manufacturers",balls[j]); 
        v.put(Balls.MANUFACTURER_ID,i); 
        v.put(Balls.BALL,balls[j]); 
        db.insert(Balls.CONTENT_URI.toString(),null,v); 
       } 
      }else if(i == 11){ 
       balls = context.getResources().getStringArray(R.array.elite); 
       for(int j = 0; j<balls.length;j++){ 
        Log.d("Manufacturers",balls[j]); 
        v.put(Balls.MANUFACTURER_ID,i); 
        v.put(Balls.BALL,balls[j]); 
        db.insert(Balls.CONTENT_URI.toString(),null,v); 
       } 
      }else if(i == 12){ 
       balls = context.getResources().getStringArray(R.array.dv8); 
       for(int j = 0; j<balls.length;j++){ 
        Log.d("Manufacturers",balls[j]); 
        v.put(Balls.MANUFACTURER_ID,i); 
        v.put(Balls.BALL,balls[j]); 
        db.insert(Balls.CONTENT_URI.toString(),null,v); 
       } 
      } 
     } 

    } 

это моя вставка во вторую базу данных

@Override 
public Uri insert(Uri uri, ContentValues values) { 
    long rowID = db.insert(BALLS_TABLE,null, values); 
    if(rowID > 0){ 
     Uri _uri = ContentUris.withAppendedId(CONTENT_ID_URI_BASE,rowID); 
     getContext().getContentResolver().notifyChange(_uri,null); 
     return _uri; 
    }else{ 
     throw new SQLException("Failed to insert row into " + uri); 
    } 
} 

теперь я не видел нигде в моей вставке, где есть :, что это говорит о проблеме, поэтому я не знаю, что случилось. Могу ли я вставить это?

EDIT:

мой другой стол

private static final String DATABASE_NAME = "Balls"; 
private static final String BALLS_TABLE = "balls"; 
private static final int DATABASE_VERSION = 1; 
private static final String AUTHORITY = "com.tyczj.bowling.providers.balls"; 
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/balls"); 
public static final Uri CONTENT_ID_URI_BASE = Uri.parse("content://" + AUTHORITY + "/balls/"); 
private static final UriMatcher uriMatcher; 
public static final String BALL = "ball"; 
public static final String ID = "_id"; 
public static final String MANUFACTURER_ID = "manufacturer_id"; 

private static final HashMap<String, String> mMap; 
private DatabaseHelper DBHelper; 
private SQLiteDatabase db; 

и мой OnCreate для этой таблицы

@Override 
public boolean onCreate() { 
    Context context = getContext(); 
    DBHelper = new DatabaseHelper(context); 
    db = DBHelper.getWritableDatabase(); 
    return (db == null)? false:true; 
} 

EDIT 2: настольный

производители

private void createTables(SQLiteDatabase db){ 
     db.execSQL("CREATE TABLE " + MANUFACTURERS_TABLE + "(" + ID + " integer primary key autoincrement, " + 
       NAME + " TEXT);"); 
    } 

шары стол

private void createTables(SQLiteDatabase db){ 
     db.execSQL("CREATE TABLE " + BALLS_TABLE + "(" + ID + " integer primary key autoincrement, " + 
       MANUFACTURER_ID + " INTEGER, " + BALL + " TEXT);"); 
    } 

ответ

0

Вам нужно позвонить db.insert непосредственно передавая имя таблицы, а не Ури содержание

попробовать

 if(i == 0){ 
      balls = context.getResources().getStringArray(R.array.global); 
      for(int j = 0; j<balls.length;j++){ 
       Log.d("Manufacturers",balls[j]); 
       v.put(Balls.MANUFACTURER_ID,i); 
       v.put(Balls.BALL,balls[j]); 
       db.insert("balls",null,v); 
      } 
     } 
+0

попробовал это, дал мне сообщение об ошибке таблица не существует – tyczj

+0

можете ли вы разместить createTables (db); метод – iago

+0

, отредактированный с помощью этого кода – tyczj

0

Ну что я могу видеть ":" знак здесь:

содержание: // ком .tyczj.bowling.providers.balls/шарики (manufacturer_id, ball, name)

+0

хорошо да вот контент-провайдера URI – tyczj

+0

хорошо да, вы должны закодировать этот знак с% 3A или просто получить заголовок «content: //» из вашей строки, а когда вы его снова используете, добавьте его в строку базы данных – Cata

0

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

+0

, отредактированную с кодом из другой таблицы. – tyczj