2014-04-02 152 views
1

當我運行應用程序,我得到:跳過了90幀。應用程序可能在其主線程上工作太多。如何從編輯文本插入數據到sqlite數據庫?

主要代碼:

public class Student_Data extends Activity implements OnClickListener { 
EditText studentName, StuClass; 
    Button b1; 
    String NameStudent; 
    String ClassStudent; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_student__data); 

     studentName= (EditText) findViewById(R.id.editText1); 
     StuClass= (EditText) findViewById(R.id.editText2);   
     NameStudent = studentName.getText().toString(); 
     ClassStudent = StuClass.getText().toString();   
     b1=(Button) findViewById(R.id.button1);     
     b1.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     //TODO Auto-generated method stub 
     insertData(NameStudent, ClassStudent); 
    } 

    private void insertData(String nameStudent2, String classStudent2) { 
     // TODO Auto-generated method stub 
     AndroidDbHelper helper = new AndroidDbHelper(this); 
     SQLiteDatabase database = helper.getWritableDatabase(); 
     ContentValues content = new ContentValues(); 
     content.put(AndroidDbHelper.COLUMN_NAME, NameStudent); 
     content.put(AndroidDbHelper.COLUMN_CLASS, ClassStudent); 

     database.insert(AndroidDbHelper.TABLE_NAME, null, content); 
    } 
} 

AndroidDbHelper.java

public class AndroidDbHelper extends SQLiteOpenHelper { 
    public static final String DB_NAME = "StudentData"; 
    public static final int DB_VERSION = 1; 

    public static final String TABLE_NAME = "student"; 
    public static final String COLUMN_NAME= "name"; 
    public static final String COLUMN_CLASS= "cclass"; 

    public AndroidDbHelper(Context context) { 
     super(context, DB_NAME, null, 1); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String CreateTable = "CREATE TABLE" + TABLE_NAME + "(" + COLUMN_NAME + "TEXT," + COLUMN_CLASS + "TEXT" + ");"; 
     // TODO Auto-generated method stub 
     db.execSQL(CreateTable); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     db.execSQL("DROP TABLE IF EXISTS " +TABLE_NAME);  
     onCreate(db); 
    } 

}

雖然,我得到的主要活動頁面上插入模擬器.. 值,但如果我插入值我在logcat中遇到錯誤。

04-02 11:31:08.095: E/AndroidRuntime(674): FATAL EXCEPTION: main 
04-02 11:31:08.095: E/AndroidRuntime(674): android.database.sqlite.SQLiteException: near "TABLEstudent": syntax error (code 1): , while compiling: CREATE TABLEstudent(nameTEXT,cclassTEXT); 
04-02 11:31:08.095: E/AndroidRuntime(674): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
04-02 11:31:08.095: E/AndroidRuntime(674): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882) 
04-02 11:31:08.095: E/AndroidRuntime(674): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493) 
04-02 11:31:08.095: E/AndroidRuntime(674): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
04-02 11:31:08.095: E/AndroidRuntime(674): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 
04-02 11:31:08.095: E/AndroidRuntime(674): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) 
04-02 11:31:08.095: E/AndroidRuntime(674): at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663) 
04-02 11:31:08.095: E/AndroidRuntime(674): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594) 
04-02 11:31:08.095: E/AndroidRuntime(674): at com.example.student_data.AndroidDbHelper.onCreate(AndroidDbHelper.java:25) 
04-02 11:31:08.095: E/AndroidRuntime(674): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252) 
04-02 11:31:08.095: E/AndroidRuntime(674): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164) 
04-02 11:31:08.095: E/AndroidRuntime(674): at com.example.student_data.Student_Data.insertData(Student_Data.java:41) 
04-02 11:31:08.095: E/AndroidRuntime(674): at com.example.student_data.Student_Data.onClick(Student_Data.java:36) 
04-02 11:31:08.095: E/AndroidRuntime(674): at android.view.View.performClick(View.java:4084) 
04-02 11:31:08.095: E/AndroidRuntime(674): at android.view.View$PerformClick.run(View.java:16966) 
04-02 11:31:08.095: E/AndroidRuntime(674): at android.os.Handler.handleCallback(Handler.java:615) 
04-02 11:31:08.095: E/AndroidRuntime(674): at android.os.Handler.dispatchMessage(Handler.java:92) 
04-02 11:31:08.095: E/AndroidRuntime(674): at android.os.Looper.loop(Looper.java:137) 
04-02 11:31:08.095: E/AndroidRuntime(674): at android.app.ActivityThread.main(ActivityThread.java:4745) 
04-02 11:31:08.095: E/AndroidRuntime(674): at java.lang.reflect.Method.invokeNative(Native Method) 
04-02 11:31:08.095: E/AndroidRuntime(674): at java.lang.reflect.Method.invoke(Method.java:511) 
04-02 11:31:08.095: E/AndroidRuntime(674): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
04-02 11:31:08.095: E/AndroidRuntime(674): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
04-02 11:31:08.095: E/AndroidRuntime(674): at dalvik.system.NativeStart.main(Native Method) 
+0

可以顯示logcat的錯誤。 –

+0

在主線程上進行密集計算(例如從數據庫插入或檢索數據)總是一個糟糕的主意。我建議你使用'AsyncTask'來完成工作! Logcat條目甚至告訴你,你不應該這樣做! ;) – Eric

回答

2
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_student__data); 

    studentName= (EditText) findViewById(R.id.editText1); 
    StuClass= (EditText) findViewById(R.id.editText2);   
    b1=(Button) findViewById(R.id.button1);     
    b1.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) 
{ 
    // TODO Auto-generated method stub 
    NameStudent = studentName.getText().toString(); 
    ClassStudent = StuClass.getText().toString();   
    insertData(NameStudent, ClassStudent); 
} 

你得到的字符串。將它寫入onClick方法將爲您提供完美的輸出。

String CreateTable = "CREATE TABLE" + TABLE_NAME + "(" + COLUMN_NAME + "TEXT," + COLUMN_CLASS + "TEXT" + ");";

更換這本符合這一

String CreateTable = "CREATE TABLE " + TABLE_NAME + " (" + COLUMN_NAME + " TEXT, " + COLUMN_CLASS + " TEXT" + ");";

+0

不,它沒有解決問題..同樣的事情發生。 – apurva

+0

你得到了錯誤或What.And請改變AndroidDbHelper.java因爲你在兩個文件中發佈相同的代碼。 –

+0

我認爲你的創建表有錯誤。發佈您的dbhelper類將有幫助 –

0

onCreate()方法,你EditTexts是空白的,因此你是我建議你到你的兩條線移動到的onClick()方法。

在OnCreate中時,將永遠givesa你空字符串更改onClick()方法如下,

@Override 
public void onClick(View v) 
{ 
    // TODO Auto-generated method stub 
    NameStudent = studentName.getText().toString(); //move these lines from onCreate() method to here 
    ClassStudent = StuClass.getText().toString(); 
    insertData(NameStudent, ClassStudent); 
} 
0

您SQL是錯誤的。的

String CreateTable = "CREATE TABLE" + TABLE_NAME + "(" + COLUMN_NAME + "TEXT," + COLUMN_CLASS + "TEXT" + ");"; 

結果是

CREATE TABLEStudentData(nameTEXT, cclassTEXT) 

您需要添加空格

String CreateTable = "CREATE TABLE " + TABLE_NAME + " (" + COLUMN_NAME + " TEXT, " + COLUMN_CLASS + " TEXT " + ");"; 
+0

謝謝。它解決了。 :) – apurva

相關問題