2017-04-15 120 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";