请帮助,错误是“sqlite返回:错误代码= 1,msg =接近”端口“:语法错误,HELP请”:
此代码强行停止我的应用,请帮助纠正错误。
public static String DATABASENAME = "ftpdb";
public static String FTPTABLE = "fAccounts";
public static String colId = "id";
public static String colNmae = "name";
public static String colUserName = "username";
public static String colPassword = "password";
public static String colPort = "port";
public static String colHost = "host";
private ArrayList<FTPModel> ftpList = new ArrayList<FTPModel>();
Context c;
public DatabaseHelper(Context context) {
super(context, DATABASENAME, null, 33);
c = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE if not exists ftpAccounts(id INTEGER PRIMARY KEY AUTOINCREMENT,"
+ "name" + " TEXT ," + "username" + " TEXT," + "password" + " TEXT)" + "port" + " TEXT)" + "host" + " TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS" + FTPTABLE );
onCreate(db);
}
public void addProduct(FTPModel fm) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("name", fm.name);
contentValues.put("username", fm.username);
contentValues.put("password", fm.password);
contentValues.put("port", fm.port);
contentValues.put("host", fm.host);
db.insert("ftpAccounts", null, contentValues);
db.close();
}
public void removeProduct(String name, String username, String password, String port, String host) {
try {
String[] args = { name };
getWritableDatabase().delete("ftpAccounts", "name=?", args);
} catch (Exception e) {
}
}
public ArrayList<FTPModel> getAccounts() {
ftpList.clear();
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery("select * from ftpAccounts", null);
if (cursor.getCount() != 0) {
if (cursor.moveToFirst()) {
do {
FTPModel item = new FTPModel();
item.name = cursor.getString(cursor
.getColumnIndex("name"));
item.username = cursor.getString(cursor
.getColumnIndex("username"));
item.password= cursor.getString(cursor
.getColumnIndex("password"));
item.port= cursor.getString(cursor
.getColumnIndex("port"));
item.host= cursor.getString(cursor
.getColumnIndex("host"));
ftpList.add(item);
} while (cursor.moveToNext());
}
}
cursor.close();
db.close();
return ftpList;
}
}
请帮助纠正代码,非常感谢
答案 0 :(得分:2)
改变这个:
db.execSQL("CREATE TABLE if not exists ftpAccounts(id INTEGER PRIMARY KEY AUTOINCREMENT,"
+ "name" + " TEXT ," + "username" + " TEXT," + "password" + " TEXT)" + "port" + " TEXT)" + "host" + " TEXT)");
对此:
db.execSQL("CREATE TABLE if not exists ftpAccounts(" + colId + "INTEGER PRIMARY KEY AUTOINCREMENT,"
+ colName + " TEXT ," + colUserName + " TEXT," + colPassword + " TEXT," + colPort + " TEXT," + colHost + " TEXT)");
你有一些额外的括号而不是逗号。 完全忘记你想使用变量作为列的名称。
答案 1 :(得分:1)
如果您 曾 发现自己有SQL语法错误,您应该(暂时)在执行之前以某种方式将其打印出来。
这几乎总能告诉你 完全 问题所在。如果你在这种情况下对你的查询这样做了,你会看到类似的东西:
CREATE TABLE if not exists ftpAccounts(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT ,username TEXT,password TEXT)port TEXT)host TEXT)
(稍微重新格式化以使阅读更容易):
CREATE TABLE if not exists ftpAccounts(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT ,
username TEXT,
password TEXT)port TEXT)host TEXT)
现在看到了吗?它应该 即时 可以识别问题所在。在password
和port
列说明符的末尾有逗号括号的末尾括号。
而且,顺便说一句,我并不完全确定你认为通过连接所有这些字符串而获得的收益。如果你想要可读的代码,这是一个足够好的理由,但我会建议它做得更好:
db.execSQL("CREATE TABLE if not exists ftpAccounts(" +
" id INTEGER PRIMARY KEY AUTOINCREMENT," +
" name TEXT," +
" username TEXT," +
" password TEXT," +
" port TEXT," +
" host TEXT)"
);
因此您可以在易于区分的部分中看到声明组件。
您可能想要了解的另一件事是port
作为文本项目的适用性。它可能更好地存储为整数类型。