Reputation: 3349
So I created a database, which I did wrong because of the error below, but I'm not sure what is causing the error. I know it is in my DATABASE_CREATE variable, but I don't know what I'm formatting incorrectly. Any help would be appreciated. Here is my error
06-01 19:41:11.943: E/SQLiteLog(15521): (1) no such table: YCDB
06-01 19:41:11.948: E/SQLiteDatabase(15521): Error inserting users=john password=mavsman
06-01 19:41:11.948: E/SQLiteDatabase(15521): android.database.sqlite.SQLiteException: no such table: YCDB (code 1): , while compiling: INSERT INTO YCDB(users,password) VALUES (?,?)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1118)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:691)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1589)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1461)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at yc.android.yourchallenger.DBAdapter.insertContact(DBAdapter.java:81)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at yc.android.yourchallenger.MainActivity.onCreate(MainActivity.java:27)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at android.app.Activity.performCreate(Activity.java:5372)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2362)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at android.app.ActivityThread.access$700(ActivityThread.java:168)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1329)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at android.os.Handler.dispatchMessage(Handler.java:99)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at android.os.Looper.loop(Looper.java:137)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at android.app.ActivityThread.main(ActivityThread.java:5493)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at java.lang.reflect.Method.invokeNative(Native Method)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at java.lang.reflect.Method.invoke(Method.java:525)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025)
06-01 19:41:11.948: E/SQLiteDatabase(15521): at dalvik.system.NativeStart.main(Native Method)
06-01 19:41:12.188: D/libEGL(15521): loaded /system/lib/egl/libEGL_mali.so
06-01 19:41:12.193: D/libEGL(15521): loaded /system/lib/egl/libGLESv1_CM_mali.so
06-01 19:41:12.203: D/libEGL(15521): loaded /system/lib/egl/libGLESv2_mali.so
06-01 19:41:12.218: E/(15521): Device driver API match
06-01 19:41:12.218: E/(15521): Device driver API version: 23
06-01 19:41:12.218: E/(15521): User space API version: 23
06-01 19:41:12.218: E/(15521): mali: REVISION=Linux-r3p2-01rel3 BUILD_DATE=Wed Oct 9 21:05:57 KST 2013
06-01 19:41:12.473: D/OpenGLRenderer(15521): Enabling debug mode 0
Here is the database class package yc.android.yourchallenger;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DBAdapter {
static final String KEY_ROWID = "id";
static final String KEY_USER = "user";
static final String KEY_PASSWORD = "password";
static final String TAG = "DBAdapter";
static final String DATABASE_NAME = "YCDB";
static final String KEY_NAME = "users";
static final int DATABASE_VERSION = 1;
static final String DATABASE_CREATE =
"create table contact " + KEY_USER + KEY_PASSWORD;
final Context context;
DatabaseHelper DBHelper;
SQLiteDatabase db;
public DBAdapter (Context ctx)
{
this.context = ctx;
DBHelper = new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper
{
DatabaseHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(DATABASE_CREATE);
}
catch(SQLException e){
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version " + oldVersion + " to " +
newVersion + ", which will " +
"destroy all old data");
db.execSQL("DROP TABLE IF EXISTS contacts");
onCreate(db);
}
}
//opens db database
public DBAdapter open() throws SQLException
{
db = DBHelper.getWritableDatabase();
return null;
}
//closes the database
public void close()
{
DBHelper.close();
}
//insert contacts
public long insertContact(String user, String password )
{
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_NAME, user);
initialValues.put(KEY_PASSWORD, password);
return db.insert(DATABASE_NAME, null, initialValues);
}
//deletes contact
/*public boolean deleteContact(long rowId)
{
return db.delete(DATABASE_NAME, KEY_ROWID + "+" + rowId, null) > 0;
}
//retrieve contacts
public Cursor getAllContacts()
{
return db.query(DATABASE_NAME, new String[]{KEY_ROWID, KEY_NAME,
KEY_PASSWORD}, null, null, null, null, null);
}
//retrieve specified contact
public Cursor getContact(long rowId) throws SQLException
{
Cursor mCursor =
db.query(true, DATABASE_NAME, new String[] {KEY_ROWID,
KEY_NAME, KEY_PASSWORD}, KEY_ROWID + "=" + rowId, null,
null, null, null, null);
if(mCursor!= null){
mCursor.moveToFirst();
}
return mCursor;
}
public Boolean updatContact(long rowId, String user, String password)
{
ContentValues args = new ContentValues();
args.put(KEY_USER, user);
args.put(KEY_PASSWORD, password);
return db.update(DATABASE_NAME, args, KEY_ROWID + "=" + rowId, null) > 0;
}*/
}
And here is my MainActivity, just in case package yc.android.yourchallenger;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button insert = (Button) findViewById(R.id.insert_contact);
final String john = "john";
final String pass = "mavsman";
final DBAdapter db = new DBAdapter(this);
db.open();
if(db.open() == null)
{
Toast.makeText(this, "database not open", Toast.LENGTH_LONG).show();
}
db.insertContact(john, pass);
db.close();
insert.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View arg0)
{
}
});
}
};
Upvotes: 0
Views: 5069
Reputation: 38098
As Code-Guru pointed out, you're inserting the data in the WRONG table.
But the CORRECT table will never be created:
This statement:
static final String DATABASE_CREATE = "create table contact " + KEY_USER + KEY_PASSWORD;
will produce the wrong command
"create table contact userpassword"
which will fail creating the table.
You need to write:
static final String DATABASE_CREATE = "create table contact (" + KEY_USER + " TEXT, " + KEY_PASSWORD + " TEXT)";
which will produce the right command:
"create table contact (user TEXT, password TEXT)"
Upvotes: 2
Reputation: 83557
static final String DATABASE_CREATE =
"create table contact " + KEY_USER + KEY_PASSWORD;
When executed, this will create a table named "contact", but you are trying to insert into a table named "YCDB". The later is the name of the database which is very different from the name of a table in that database. I suggest you create a TABLE_NAME
variable to use when appropriate.
Upvotes: 1