问题
when trying to insert data into my sqlite db I receive a logcat error "unknown database logindata: , while compiling:". the error message sounds straight forward but I can locate where the issue is. in my DB class or the activity which is inserting the data.
error message:
unknown database logindata: , while compiling: create table if not exists logindata.db (_id integer primary key autoincrement,username text not null,password text not null);
database:
public class LoginDB extends SQLiteOpenHelper {
//Table attributes
public static final String DATABASE_NAME = "logindata.db";
public static final int DATABASE_VERSION = 1;
public static final String TABLE_NAME_INFOTABLE = "credentials";
// Data attributes
public static final String COLUMN_NAME_USERNAME = "username";
public static final String COLUMN_NAME_PASSWORD = "password";
private SQLiteOpenHelper DBHelper;
private SQLiteDatabase db;
public LoginDB(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
String sqlDataStore = "create table if not exists " +
DATABASE_NAME + " ("+ BaseColumns._ID + " integer primary key autoincrement,"
+ COLUMN_NAME_USERNAME + " text not null,"
+ COLUMN_NAME_PASSWORD + " text not null);";
db.execSQL(sqlDataStore);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
if(oldVersion == 1 && newVersion == 2){
//Upgrade the database
}
}
public boolean Login(String username, String password) throws SQLException
{
Cursor mCursor = db.rawQuery("SELECT * FROM " + DATABASE_NAME + " WHERE username=? AND password=?",
new String[]{username,password});
if(mCursor !=null) {
if(mCursor.getCount()>0)
{
return true;
}
}
return false;
}
public void open() {
// TODO Auto-generated method stub
db = DBHelper.getWritableDatabase();
}
public void close() {
DBHelper.close();
}
}
activity:
public class CredentialsActivity extends Activity implements OnClickListener{
private Button lReg;
private EditText lUname;
private EditText lPword;
private LoginDB loginDb = new LoginDB(CredentialsActivity.this);
@Override
protected void onCreate (Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.register);
lReg = (Button)findViewById(R.id.reg_button);
lReg.setOnClickListener(this);
}
public void onClick(View v) {
switch(v.getId()) {
case R.id.reg_button:
lUname = (EditText)findViewById(R.id.reg_uname);
lPword = (EditText)findViewById(R.id.reg_pswd);
String uname = lUname.getText().toString();
String pass = lPword.getText().toString();
boolean invalid = false;
if(uname.equals("")){
invalid = true;
Toast.makeText(getApplicationContext(), "Username Missing", Toast.LENGTH_SHORT).show();
}else if(pass.equals("")){
invalid = true;
Toast.makeText(getApplicationContext(), "Password Missing", Toast.LENGTH_SHORT).show();
}
if(invalid == false){
addEntry(uname, pass);
Intent i_register = new Intent(CredentialsActivity.this, LoginDB.class);
startActivity(i_register);
finish();
}}
}
public void onDestroy() {
super.onDestroy();
loginDb.close();
}
public void addEntry(String uname, String pass){
SQLiteDatabase db = loginDb.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("username", uname);
values.put("password", pass);
try{
db.insert(LoginDB.DATABASE_NAME, null, values);
Toast.makeText(getApplicationContext(), "Saved! Please login now", Toast.LENGTH_SHORT).show();
}catch(Exception err){
err.printStackTrace();
}
}
}
回答1:
logindata.db
is not a valid table name, use something without the .
e.g. just logindata
public static final String DATABASE_NAME = "logindata.db";
public static final String TABLE_NAME = "logindata";
// ...
String sqlDataStore = "create table if not exists " +
TABLE_NAME + "...
// replace other places where you use DATABASE_NAME too
来源:https://stackoverflow.com/questions/12014294/unknown-sqlite-db-error