2015-05-08 2 views
0

я пытаюсь показать данные в TextViews из базы данных в Android, но это шоу во время выполнения erroe .. я создать файл базы данных как ..показывают данные в TextView из SQLite базы данных в андроиде

package com.example.databasetest; 


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.provider.BaseColumns; 
import android.util.Log; 

public class DBHelper extends SQLiteOpenHelper{ 

    private static final int DATABASE_VERSION = 1; 
    private static final String DATABASE_NAME = "teacher"; 
    private static final String TABLE_NAME = "teacher_table"; 

    private static final String NAME = "teacher_name"; 
    private static final String FATHER_NAME = "father_name"; 
    private static final String MOTHER_NAME = "mother_name"; 

    SQLiteDatabase data=this.getWritableDatabase(); 

    Context ctx; 



    public DBHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     ctx=context; 
     Log.d("DATABASE OPERATION", "DATABASE CREATED"); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     data=db; 
      db.execSQL("CREATE TABLE " + TABLE_NAME + " (" 
        + BaseColumns._ID + " id INTEGER PRIMARY KEY AUTOINCREMENT, " 
        + NAME + " TEXT," 
        + FATHER_NAME + " TEXT," 
        + MOTHER_NAME + " TEXT," 
        + ");"); 
     Log.d("DATABASE OPERATION", "TABLE CREATED"); 


    } 
    public void open() throws SQLException 
    { 
     DBHelper db1 = new DBHelper(ctx); 
      data = db1.getWritableDatabase(); 
    } 

    public void close() 
    { 
     data.close(); 
    } 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXCEPTION EXISTS"); 
     onCreate(db);  
    } 
    public void onInsert(DBHelper db,String name,String f_name, String m_name) 
    { 
     SQLiteDatabase sql= db.getWritableDatabase(); 
     ContentValues cv=new ContentValues(); 
     cv.put("teacher_name",name); 
     cv.put("father_name", f_name); 
     cv.put("mother_name", m_name); 
     sql.insert(TABLE_NAME, null, cv); 
     Log.d("DATABASE OPERATION", "ONE ROW INSERTED....."); 
    } 

    public Cursor getInformation(DBHelper dop) 
    { 
     SQLiteDatabase SQ=dop.getReadableDatabase(); 
     String[] coloumns={NAME,FATHER_NAME,MOTHER_NAME}; 
     Cursor CR=SQ.query(TABLE_NAME, coloumns, null, null, null, null, null); 
     return CR; 

    } 


} 

и Java файл, как ...

package com.example.databasetest; 



import java.util.ArrayList; 
import java.util.List; 

import android.app.Activity; 
import android.content.Context; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.widget.TextView; 

public class ShowDetail extends Activity{ 
    TextView NAME,FATHERNAME,MOTHERNAME; 
    String name,fathername,mothername; 
    Context ctxx=this; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.show_data); 
     NAME=(TextView)findViewById(R.id.name); 
     FATHERNAME=(TextView)findViewById(R.id.father_name); 
     MOTHERNAME=(TextView)findViewById(R.id.mother_name); 
     List<String> list = new ArrayList<String>(); 
     DBHelper DB= new DBHelper(ctxx); 
     DB.open(); 
     Cursor CR=DB.getInformation(DB); 
     if (CR.moveToFirst()) { 
     do { 

      list.add(CR.getString(0)); 

      name=CR.getString(0); 

      fathername=CR.getString(1); 

      mothername=CR.getString(2); 



     } while (CR.moveToNext()); 
     } 
     if (CR != null && !CR.isClosed()) { 
     CR.close(); 
     } 
     if(DB!=null) 
     { 
      DB.close(); 
     } 

     NAME.setText(name); 
     FATHERNAME.setText(fathername); 
     MOTHERNAME.setText(mothername); 


    } 
} 

и войти Cate показать ошибку как .....

05-07 06:25:59.173: D/gralloc_goldfish(918): Emulator without GPU emulation detected. 
05-07 06:26:15.483: E/SQLiteLog(918): (1) AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY 
05-07 06:26:15.483: D/AndroidRuntime(918): Shutting down VM 
05-07 06:26:15.483: W/dalvikvm(918): threadid=1: thread exiting with uncaught exception (group=0x41465700) 
05-07 06:26:15.553: E/AndroidRuntime(918): FATAL EXCEPTION: main 
05-07 06:26:15.553: E/AndroidRuntime(918): android.database.sqlite.SQLiteException: AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY (code 1): , while compiling: CREATE TABLE teacher_table (_id id INTEGER PRIMARY KEY AUTOINCREMENT, teacher_name TEXT,father_name TEXT,mother_name TEXT,); 
05-07 06:26:15.553: E/AndroidRuntime(918): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
05-07 06:26:15.553: E/AndroidRuntime(918): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) 
05-07 06:26:15.553: E/AndroidRuntime(918): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500) 
05-07 06:26:15.553: E/AndroidRuntime(918): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
05-07 06:26:15.553: E/AndroidRuntime(918): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 
05-07 06:26:15.553: E/AndroidRuntime(918): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) 
05-07 06:26:15.553: E/AndroidRuntime(918): at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1672) 
05-07 06:26:15.553: E/AndroidRuntime(918): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1603) 
05-07 06:26:15.553: E/AndroidRuntime(918): at com.example.databasetest.DBHelper.onCreate(DBHelper.java:38) 
05-07 06:26:15.553: E/AndroidRuntime(918): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252) 
05-07 06:26:15.553: E/AndroidRuntime(918): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164) 
05-07 06:26:15.553: E/AndroidRuntime(918): at com.example.databasetest.DBHelper.<init>(DBHelper.java:23) 
05-07 06:26:15.553: E/AndroidRuntime(918): at com.example.databasetest.MainActivity$1.onClick(MainActivity.java:46) 
05-07 06:26:15.553: E/AndroidRuntime(918): at android.view.View.performClick(View.java:4240) 
05-07 06:26:15.553: E/AndroidRuntime(918): at android.view.View$PerformClick.run(View.java:17721) 
05-07 06:26:15.553: E/AndroidRuntime(918): at android.os.Handler.handleCallback(Handler.java:730) 
05-07 06:26:15.553: E/AndroidRuntime(918): at android.os.Handler.dispatchMessage(Handler.java:92) 
05-07 06:26:15.553: E/AndroidRuntime(918): at android.os.Looper.loop(Looper.java:137) 
05-07 06:26:15.553: E/AndroidRuntime(918): at android.app.ActivityThread.main(ActivityThread.java:5103) 
05-07 06:26:15.553: E/AndroidRuntime(918): at java.lang.reflect.Method.invokeNative(Native Method) 
05-07 06:26:15.553: E/AndroidRuntime(918): at java.lang.reflect.Method.invoke(Method.java:525) 
05-07 06:26:15.553: E/AndroidRuntime(918): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
05-07 06:26:15.553: E/AndroidRuntime(918): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
05-07 06:26:15.553: E/AndroidRuntime(918): at dalvik.system.NativeStart.main(Native Method) 

, пожалуйста, помогите мне исправить ошибку

+0

Удалите id перед INTEGER PRIMARY KEY AUTOINCREMENT, а также удалите запятую после последнего ТЕКСТА. –

+0

Мы уже говорили вам об этой ошибке в раннем вопросе – Moudiz

+0

все еще дают ошибку после исправления этой ошибки –

ответ

1

Ваше создание table sql command неправ. исправлены с ниже

db.execSQL("CREATE TABLE " + TABLE_NAME + " (" 
       + BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
       + NAME + " TEXT," 
       + FATHER_NAME + " TEXT," 
       + MOTHER_NAME + " TEXT" 
       + ");"); 
+1

Исправлена ​​запятая в последнем поле. –

+1

@DerGolem Ohhh Спасибо. Я не видел. 'У тебя глаз совы !!!!!' –

+1

Ничего. С удовольствием. «Hawk Eye» - мое имя среди Lakotas ...;) –

0

CREATE TABLE teacher_table (_id ID INTEGER PRIMARY KEY AUTOINCREMENT, TEACHER_NAME текст, текст, father_name mother_name ТЕКСТ,);

В вашем запросе есть ошибка.

db.execSQL("CREATE TABLE " + TABLE_NAME + " (" 
        + BaseColumns._ID + " id INTEGER PRIMARY KEY AUTOINCREMENT, " 
        + NAME + " TEXT," 
        + FATHER_NAME + " TEXT," 
        + MOTHER_NAME + " TEXT" 
        + ");"); 

Почему _id & идентификатор для первичного ключа? также вы добавили запятую (,) здесь

MOTHER_NAME + " TEXT," <-- which is not needed. 
+0

все еще показывает ошибку после исправления запроса. –

+0

@MonikaKrail. Поскольку вы изменили схему, вам нужно еще раз удалить и установить приложение или вам нужно увеличить версию базы данных, чтобы отразить это изменение, но вы необходимо реализовать метод onUpgrade, если вы попробуете второй метод. –

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