简体   繁体   English

如何将数据从编辑文本插入sqlite数据库?

[英]How to insert data from edit text to sqlite database?

when i run the application,i get: skipped 90 frames. 当我运行该应用程序时,我得到:跳过了90帧。 app may be working too much work on its main thread. 应用可能在其主线程上工作过多。

Main code: 主要代码:

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 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);
    }

} }

Though, I am getting main activity page to insert values on emulator.. but if i insert values I get errors in logcat. 虽然,我正在主要活动页面上在仿真器上插入值..但是,如果我插入值,则会在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)
@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);
}

Your getting String at OnCreate Time that will Always givesa you empty String . 您在OnCreate时获取String,它将始终为您提供空String。 Write it into the onClick method will gives you perfect output. 将其写入onClick方法将为您提供完美的输出。

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

Replace This This Line With This 将此行替换为此

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

In onCreate() method , your EditTexts are blank, hence you are I suggest you to move your two lines to onClick() method. onCreate()方法中,您的EditTexts为空白,因此建议您将两行移至onClick()方法。

Change your onClick() method as follows, 如下更改您的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);
}

You SQL is wrong. 您的SQL错误。 The result of 的结果

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

is

CREATE TABLEStudentData(nameTEXT, cclassTEXT)

You need add spaces 您需要添加空格

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM