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)
答案 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";