2015-01-26 2 views
0

Я создал простой Android приложения, чтобы иметь дело с базой данных SQLite для вставки и извлечения данных из таблицы, но когда я пытаюсь вставить данные или получить исключение происходит ниже:Вставить в SQLite в Android Exception

01-26 15:48:30.930: E/AndroidRuntime(25783): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.androidhive.loginandregister/com.androidhive.loginandregister.LoginActivity}: android.database.sqlite.SQLiteException: near ")": syntax error (code 1): , while compiling: INSERT INTO info() VALUES (?) 

ниже мой код:

LoginActivity.java

package com.androidhive.loginandregister; 

import android.app.Activity; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

public class LoginActivity extends Activity { 
    DataHandler data; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.login); 

     data= new DataHandler(getBaseContext()); 
     data.open(); 
     long x = data.insertdata("a", "b", "c", "d", "e"); 

     Toast.makeText(getBaseContext(),"Insertion Completed", Toast.LENGTH_LONG).show(); 

     data.close(); 

     Button btn = (Button)findViewById(R.id.btnLogin); 

     btn.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 

       data = new DataHandler(getBaseContext()); 
       data.open(); 
       Cursor c = data.returndata(); 
       if(c.moveToFirst()) 
       { 
        do 
        { 
         Toast.makeText(getBaseContext(),c.getString(0)+ " "+ c.getString(1)+" "+c.getString(2) ,Toast.LENGTH_LONG).show(); 
        }while(c.moveToNext()); 


        } 
       data.close(); 
       } 

       }); 

    } 
} 

DataHandler.java

package com.androidhive.loginandregister; 

import android.content.ContentValues; 
import android.content.Context; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

public class DataHandler { 

    public static final String id =""; 
    public static final String name =""; 
    public static final String number =""; 
    public static final String email =""; 
    public static final String website =""; 
    public static final String table_name ="info"; 
    public static final String data_base_name ="bcb"; 
    public static final int database_version = 1; 
    public static final String table_create ="CREATE TABLE info(id TEXT,name TEXT,number TEXT,email TEXT,website TEXT);"; 

    databasehelper dbhelper; 
    Context ctx; 
    SQLiteDatabase db; 


    public DataHandler (Context ctx) 
    { 
     this.ctx=ctx; 
     dbhelper = new databasehelper(ctx); 
    } 

    private static class databasehelper extends SQLiteOpenHelper 
    { 

    public databasehelper(Context ctx) 
    { 
     super(ctx,data_base_name,null,database_version); 
    } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 

      try 
      { 
       db.execSQL(table_create); 
      } 

      catch (SQLException e) 
      { 
       e.printStackTrace(); 
      } 

     } 




     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

      db.execSQL("DROP TABLE IF EXISTS info"); 
      onCreate(db); 
     } 

    } 


    public DataHandler open() 
    { 
    db = dbhelper.getWritableDatabase(); 
    return this; 
    } 

    public void close() 
    { 
     dbhelper.close(); 

    } 

    public long insertdata(String ID, String NAME,String NUMBER,String EMAIL,String WEBSITE,String COMPANY,String PROFESSION,String COMMENTS,String STATUS) 
    { 
     ContentValues content = new ContentValues(); 
     content.put(id, ID); 
     content.put(name, NAME); 
     content.put(number,NUMBER); 
     content.put(email, EMAIL); 
     content.put(website, WEBSITE); 
     return db.insertOrThrow(table_name, null, content); 


    } 

    public Cursor returndata() 
    { 
     return db.query(table_name, new String [] {id,name,number,email,website}, null, null, null, null, null); 
    } 
} 

Цените свою помощь.

ответ

3

Я предполагаю, что они должны содержать ваши имена столбцов

public static final String id =""; 
public static final String name =""; 
public static final String number =""; 
public static final String email =""; 
public static final String website =""; 

, и именно поэтому вы получите пустой список столбцов в запросе вставки. Заполните их соответствующими значениями.

+0

Спасибо, сэр очень, он решил, но почему это должно быть заполнено именем столбцов? –

+2

Поскольку имена столбцов используются 'SqlLiteDatabase' (через' ContentValues') для генерации запроса на вставку. И вы используете эти значения в 'DataHandler' (при вызове, например,' content.put (id, ID) '). –

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