插入SQLite Android时出错

时间:2017-04-15 06:13:01

标签: android android-sqlite

public class HelperAdapter  {

    Helper helper;

    public HelperAdapter(Context context)
    {
        helper = new Helper(context);
    }

    public long insertData(String title, Integer credit, Integer tpc,String course_id)
    {
        SQLiteDatabase db = helper.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(Helper.TITLE,title);
        contentValues.put(Helper.CREDIT,credit);
        contentValues.put(Helper.TUITION_PER_CREDIT,tpc);
        contentValues.put(Helper.ID,course_id);

         long term= db.insert(helper.TABLE_NAME,null,contentValues);
        return term;
    }

    static class Helper extends SQLiteOpenHelper
    {
        private  static final String DATABASE_NAME = "DiasDatabase";
        private static final String TABLE_NAME= "DIasTable";
        private  static final int DATABASE_VERSION = 6;
        private  static final String UID = "_id";
        private  static final String TITLE = "Title";
        private  static final String CREDIT = "Credit";
        private  static final String TUITION_PER_CREDIT = "Tuition Per Credit";
        private  static final String ID = "CourseId";
        private static final String CREATE_TABLE = "CREATE TABLE "+TABLE_NAME+" ("+UID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+TITLE+" VARCHAR(100), "+CREDIT+" INTEGER DEFAULT 0, "+TUITION_PER_CREDIT+" INTEGER DEFAULT 0, "+ID+" VARCHAR(100))";
        private static final String DROP_TABLE = "DROP TABLE "+TABLE_NAME;
        private Context context;
        public Helper(Context context)
        {
            super(context,DATABASE_NAME, null, DATABASE_VERSION);
            this.context = context;
            Message.message(context, "Construtor created");
        }
        @Override
        public void onCreate(SQLiteDatabase sqLiteDatabase) {
            try {
                sqLiteDatabase.execSQL(CREATE_TABLE);
                Message.message(context, "Oncreate created");
            } catch (SQLException e) {
                Message.message(context,"" + e);
            }
        }

        @Override
        public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
            try {
                sqLiteDatabase.execSQL(DROP_TABLE);
                onCreate(sqLiteDatabase);
                Message.message(context, "Upgrade created");
            } catch (SQLException e) {
                Message.message(context, "" + e);
            }

        }
    }
}

这是我的Adapter类。我收到此错误:android.database.sqlite.SQLiteException:near“Per”:语法错误(代码1):,编译时:INSERT INTO DIASTable(每学分学费,CourseId,学分,标题)VALUES(?,?, ?,?)

public class MainActivity extends AppCompatActivity {
    HelperAdapter helper;
    EditText title, credit, tpc, id;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        title = (EditText)findViewById(R.id.editText3);
        credit = (EditText)findViewById(R.id.editText4);
        tpc = (EditText)findViewById(R.id.editText5);
        id = (EditText)findViewById(R.id.editText7);



        helper = new HelperAdapter(this);


    }

    public void addCourse(View view)
    {
        String titleSt = title.getText().toString();
        Integer creditSt = Integer.parseInt(credit.getText().toString());
        Integer tbpSt = Integer.parseInt(tpc.getText().toString());
        String idSt = id.getText().toString();
        long term = helper.insertData(titleSt,creditSt,tbpSt,idSt);
        if(term<0)
        {
            Message.message(this,"Unsuccessful");

        }
        else
            Message.message(this,"Successful");
    }
}

这是我的主要类,我从logcat获得的错误如下:

04-15 12:07:14.368 12759-12759/test.codertrust.com.sqlite3 E/SQLiteLog: (1) near "Per": syntax error
04-15 12:07:14.378 12759-12759/test.codertrust.com.sqlite3 E/SQLiteDatabase: Error inserting Tuition Per Credit=55000 CourseId=cse Credit=3 Title=soft
                                                                             android.database.sqlite.SQLiteException: near "Per": syntax error (code 1): , while compiling: INSERT INTO DIasTable(Tuition Per Credit,CourseId,Credit,Title) VALUES (?,?,?,?)
                                                                             #################################################################
                                                                             Error Code : 1 (SQLITE_ERROR)
                                                                             Caused By : SQL(query) error or missing database.
                                                                                (near "Per": syntax error (code 1): , while compiling: INSERT INTO DIasTable(Tuition Per Credit,CourseId,Credit,Title) VALUES (?,?,?,?))
                                                                             #################################################################
                                                                                 at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
                                                                                 at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1093)
                                                                                 at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:670)
                                                                                 at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
                                                                                 at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
                                                                                 at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
                                                                                 at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1607)
                                                                                 at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1479)
                                                                                 at test.codertrust.com.sqlite3.HelperAdapter.insertData(HelperAdapter.java:31)
                                                                                 at test.codertrust.com.sqlite3.MainActivity.addCourse(MainActivity.java:39)
                                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                                 at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                 at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
                                                                                 at android.view.View.performClick(View.java:5254)
                                                                                 at android.view.View$PerformClick.run(View.java:21179)
                                                                                 at android.os.Handler.handleCallback(Handler.java:739)
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                 at android.os.Looper.loop(Looper.java:145)
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:6837)
                                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                                 at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

2 个答案:

答案 0 :(得分:0)

  

android.database.sqlite.SQLiteException:接近“Per”:编译时语法错误:INSERT INTO DIASTable(每学分学费,CourseId,学分,标题)VALUES(?,?,?,?)

导致此错误,因为您正在使用空格 TUITION_PER_CREDIT列名称。如果您继续使用空格,则必须使用方括号来声明它们:

private  static final String TUITION_PER_CREDIT = "[Tuition Per Credit]";

然后在插入查询中使用它。尽管最好不要在列名之间使用空格。您可以改用下划线

private  static final String TUITION_PER_CREDIT = "Tuition_Per_Credit";

希望这有帮助。

答案 1 :(得分:0)

像这样写

private static final String TUITION_PER_CREDIT = "Tuition_Per_Credit";

private static final String TUITION_PER_CREDIT = "TuitionPerCredit";