SQLite 在 "CREATE" 附近给我一个错误:语法错误(代码 1)
SQLite give me an error near "CREATE": syntax error (code 1)
我创建了 DbManger Class 来处理 Sqlite 数据库操作,我尝试在数据库中插入值但出现错误
E/SQLiteDatabase(6729): android.database.sqlite.SQLiteException: near "CREATE": syntax error (code 1): , while compiling: INSERT INTO CREATE TABLE relations(_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT NOT NULL, age TEXT NOT NULL, location TEXT NOT NULL);(email,name,age,location) VALUES (?,?,?,?)
DbManager Class
public class DBManager {
int rowsAffected;
// Database and version
private static final String DB_NAME = "familyHistory";
private static final int DB_VERSION = 1;
private static final String TABLE_INFO = "familyTable";
private static final String _ROWID = "_id";
private static final String _NAME = "name";
private static final String _EMAIL = "email";
private static final String _AGE = "age";
private static final String _LOCATIONs = "location";
private static final String CREATE_PRO = "CREATE TABLE " + TABLE_INFO + "(" +
_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
_NAME + " TEXT NOT NULL, " +
_EMAIL + " TEXT NOT NULL, " +
_AGE + " TEXT NOT NULL, " +
_LOCATIONs + " TEXT NOT NULL);";
private final Context ourContext;
private static DBHelper ourDBHelper;
private SQLiteDatabase ourDatabase;
public DBManager(Context ctx) {
this.ourContext = ctx;
Log.i("db", "DBManager(Context ctx)");
}
private static class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {
// SQLiteOpenHelper Constructor Creating database
super(context, DB_NAME, null, DB_VERSION);
Log.i("db", "DBHelper(Context context)");
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_PRO);
Log.e(">>>>>", CREATE_PRO);
// db.execSQL(CREATE_TRVLBOK);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVer, int newVer) {
Log.w("Nomad", "Upgrading database from version " + oldVer + " to " + newVer
+ ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + TABLE_INFO);
// db.execSQL("DROP TABLE IF EXISTS " + TABLE_TRAVELBOK);
onCreate(db);
Log.i("db", "onUpgrade)");
}
}
public DBManager open() throws SQLException {
ourDBHelper = new DBHelper(ourContext);
ourDatabase = ourDBHelper.getWritableDatabase();
Log.i("db", "open()");
return this;
}
public void close() {
ourDBHelper.close();
Log.i("db", "close()");
}
public long insertFamRec(String UserName, String Email, String age, String location) {
ContentValues cv = new ContentValues();
cv.put(_NAME, UserName);
cv.put(_EMAIL, Email);
cv.put(_AGE, age);
cv.put(_LOCATIONs, location);
Log.i("db", "insertLocRec");
return ourDatabase.insert(CREATE_PRO, null, cv);
}
}
从插入 class 我添加了这些行但仍然出错
DBManager db = new DBManager(NewRelation.this);
db.open();
long i = db.insertFamRec("strfullName", "stremail", "strage", "strlocation");
db.close();
if (i > 0) {
ShowMessage.Message(NewRelation.this, "data is added");
} else {
Toast.makeText(getApplicationContext(), "data is failed", Toast.LENGTH_SHORT).show();
}
如果有人给问题打分,请说明原因。
问题似乎出在您调用 ourDatabase.insert
的地方,您在 table 名称的位置传递了查询字符串。您希望通过此行实现什么:return ourDatabase.insert(CREATE_PRO, null, cv);
?
将行更改为:
return ourDatabase.insert(TABLE_INFO, null, cv);
请注意,我传递的不是 CREATE_PRO
,而是 TABLE_INFO
,这是您要插入的 table 的名称。
我希望这可以解决您的问题。如果有帮助,请告诉我。
我创建了 DbManger Class 来处理 Sqlite 数据库操作,我尝试在数据库中插入值但出现错误
E/SQLiteDatabase(6729): android.database.sqlite.SQLiteException: near "CREATE": syntax error (code 1): , while compiling: INSERT INTO CREATE TABLE relations(_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT NOT NULL, age TEXT NOT NULL, location TEXT NOT NULL);(email,name,age,location) VALUES (?,?,?,?)
DbManager Class
public class DBManager {
int rowsAffected;
// Database and version
private static final String DB_NAME = "familyHistory";
private static final int DB_VERSION = 1;
private static final String TABLE_INFO = "familyTable";
private static final String _ROWID = "_id";
private static final String _NAME = "name";
private static final String _EMAIL = "email";
private static final String _AGE = "age";
private static final String _LOCATIONs = "location";
private static final String CREATE_PRO = "CREATE TABLE " + TABLE_INFO + "(" +
_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
_NAME + " TEXT NOT NULL, " +
_EMAIL + " TEXT NOT NULL, " +
_AGE + " TEXT NOT NULL, " +
_LOCATIONs + " TEXT NOT NULL);";
private final Context ourContext;
private static DBHelper ourDBHelper;
private SQLiteDatabase ourDatabase;
public DBManager(Context ctx) {
this.ourContext = ctx;
Log.i("db", "DBManager(Context ctx)");
}
private static class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {
// SQLiteOpenHelper Constructor Creating database
super(context, DB_NAME, null, DB_VERSION);
Log.i("db", "DBHelper(Context context)");
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_PRO);
Log.e(">>>>>", CREATE_PRO);
// db.execSQL(CREATE_TRVLBOK);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVer, int newVer) {
Log.w("Nomad", "Upgrading database from version " + oldVer + " to " + newVer
+ ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + TABLE_INFO);
// db.execSQL("DROP TABLE IF EXISTS " + TABLE_TRAVELBOK);
onCreate(db);
Log.i("db", "onUpgrade)");
}
}
public DBManager open() throws SQLException {
ourDBHelper = new DBHelper(ourContext);
ourDatabase = ourDBHelper.getWritableDatabase();
Log.i("db", "open()");
return this;
}
public void close() {
ourDBHelper.close();
Log.i("db", "close()");
}
public long insertFamRec(String UserName, String Email, String age, String location) {
ContentValues cv = new ContentValues();
cv.put(_NAME, UserName);
cv.put(_EMAIL, Email);
cv.put(_AGE, age);
cv.put(_LOCATIONs, location);
Log.i("db", "insertLocRec");
return ourDatabase.insert(CREATE_PRO, null, cv);
}
}
从插入 class 我添加了这些行但仍然出错
DBManager db = new DBManager(NewRelation.this);
db.open();
long i = db.insertFamRec("strfullName", "stremail", "strage", "strlocation");
db.close();
if (i > 0) {
ShowMessage.Message(NewRelation.this, "data is added");
} else {
Toast.makeText(getApplicationContext(), "data is failed", Toast.LENGTH_SHORT).show();
}
如果有人给问题打分,请说明原因。
问题似乎出在您调用 ourDatabase.insert
的地方,您在 table 名称的位置传递了查询字符串。您希望通过此行实现什么:return ourDatabase.insert(CREATE_PRO, null, cv);
?
将行更改为:
return ourDatabase.insert(TABLE_INFO, null, cv);
请注意,我传递的不是 CREATE_PRO
,而是 TABLE_INFO
,这是您要插入的 table 的名称。
我希望这可以解决您的问题。如果有帮助,请告诉我。