2017-04-15 115 views
-3
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:「Per」附近:語法錯誤(代碼1):,編譯時:INSERT INTO DIASTable(Tuition Per Credit,CourseId,Credit,Title)VALUES(?,? ??)插入SQLite Android錯誤

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) 
+0

你確定你的表已創建成功地 –

+0

是的,我相信@Nikhil – Dia

+0

通過您插入它應該是一樣的,你的順序創建表,所以我認爲你的情況下,你的訂單有問題, –

回答

0

android.database.sqlite.SQLiteException: near "Per": syntax error while compiling: INSERT INTO DIasTable(Tuition Per Credit,CourseId,Credit,Title) VALUES (?,?,?,?)

這個錯誤導致,因爲你正在使用空格之間您的 TUITION_PER_CREDIT列名稱。如果繼續使用的空間,那麼你必須使用方括號宣佈他們:

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

在插入查詢然後使用它。儘管最好不要在列名之間使用空格。您可以改爲使用下劃線

private static final String TUITION_PER_CREDIT = "Tuition_Per_Credit"; 

希望這會有所幫助。

+3

是的,它現在正在運行。非常感謝你@ TahsinRupam – Dia

+0

我試圖標記你的答案,但是我的名聲很差,因此我不能這麼做: – Dia

+0

您仍然可以點擊左側「0」下面的勾號。 :) – tahsinRupam

0

寫這樣

private static final String TUITION_PER_CREDIT = "Tuition_Per_Credit"; 

private static final String TUITION_PER_CREDIT = "TuitionPerCredit";