2014-03-13 34 views
0

在我的应用程序中,我试图维护2个数据库表,但是我的第二个表没有存储值,但它显示数据成功存储。这里是我DbHelper类,我的其他Java类和日志猫.....在单个Dbhelper类中维护2个数据库表

请帮我.....

import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

public class DbHelper extends SQLiteOpenHelper { 
private static final String DATABASE_NAME = "sri.db"; 
private static final int DATABASE_VERSION = 1; 
public static final String TABLE_NAME = "login"; 
private static final String TABLE_CREATE ="CREATE TABLE " + TABLE_NAME + "(" + 
"_id INTEGER PRIMARY KEY AUTOINCREMENT,"+ 
"username TEXT NOT NULL, password TEXT NOT NULL);"; 

private static final String DB_ADMIN = "INSERT INTO "+TABLE_NAME+"values(1, admin,  password);"; 

public static final String TABLE_NAME_SAVE="saveinfo"; 
public static final String KEY_ID="_id"; 
public static final String KEY_URL="surl"; 
public static final String KEY_UID="suid"; 
public static final String KEY_PASS="spassword"; 

public static final String SCRIPT="CREATE TABLE" + TABLE_NAME_SAVE + "(" + "_id  INTEGER PRIMARY KEY AUTOINCREMENT,"+ 
"surl TEXT NOT NULL, suid TEXT NOT NULL, spassword TEXT NOT NULL);"; 



public DbHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    System.out.println("In constructor"); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    try{ 
     //Create Database 
     db.execSQL(TABLE_CREATE); 
     //create admin account 
     db.execSQL(DB_ADMIN); 
     //System.out.println("In onCreate"); 
     db.execSQL(SCRIPT); 
    }catch(Exception e){ 
    e.printStackTrace(); 
    } 



} 


    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    onCreate(db); 

} 
    SQLiteDatabase db; 

    public Cursor getAllValues() { 
// TODO Auto-generated method stub 
SQLiteDatabase db = this.getWritableDatabase(); 
String[] clumns={KEY_ID,KEY_URL,KEY_UID,KEY_PASS}; 
return db.query(TABLE_NAME_SAVE, clumns, null, null, null, null, null); 
    } 

    void deleteAllRecords(){ 
    db.delete(TABLE_NAME_SAVE, null, null); 
} 

void deleteOneRecord(String rowid){ 
    db.delete(TABLE_NAME_SAVE, rowid +"="+KEY_ID, null); 
} 

public void openDatabase() { 
    // TODO Auto-generated method stub 

} 



    } 

这里是我的其他Java类userPageActivity.java类

public class UserpageActivity extends Activity implements OnClickListener { 
Button save,reset,cancle,history; 
EditText url,userid,password; 
DbHelper mHelper; 
    SQLiteDatabase dataBase; 
private String murl,muserid,mpass; 
//private boolean isUpdate; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_userpage); 

    save=(Button)findViewById(R.id.bsave); 
    reset=(Button)findViewById(R.id.breset); 
    cancle=(Button)findViewById(R.id.bcancle); 
    history=(Button)findViewById(R.id.viewsi); 

    save.setOnClickListener(this); 
    reset.setOnClickListener(this); 
    cancle.setOnClickListener(this); 
    history.setOnClickListener(this); 


    url=(EditText)findViewById(R.id.urled); 
    userid=(EditText)findViewById(R.id.userided); 
    password=(EditText)findViewById(R.id.passworded); 

    mHelper=new DbHelper(this); 

} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch(v.getId()){ 
    case R.id.bsave: 
    murl=url.getText().toString(); 
     muserid=userid.getText().toString(); 
     mpass=password.getText().toString(); 
     if(murl.length()>0 && muserid.length()>0 && password.length()>0) 
     { 
      saveData(); 
     } 
     else 
     { 
      AlertDialog.Builder alertBuilder=new  AlertDialog.Builder(UserpageActivity.this); 
      alertBuilder.setTitle("Invalid Data"); 
      alertBuilder.setMessage("Please, Enter valid data"); 
      alertBuilder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 

       public void onClick(DialogInterface dialog, int which) { 
         dialog.cancel(); 

       } 
      }); 
      alertBuilder.create().show(); 
     } 
     break; 
    case R.id.breset: 
     url.setText(""); 
     userid.setText(""); 
     password.setText(""); 
     break; 
    case R.id.bcancle: 
     Intent i=new Intent(getApplicationContext(),StartActivity.class); 
     startActivity(i); 
     finish(); 
     break; 
    case R.id.viewsi: 
     Intent ii= new Intent(getApplicationContext(),DisplayActivity.class); 
     startActivity(ii); 
     finish(); 
     break; 


    } 
} 

private void saveData() { 
    // TODO Auto-generated method stub 
    dataBase=mHelper.getWritableDatabase(); 
    ContentValues values=new ContentValues(); 

    values.put("surl",murl); 
    values.put("suid", muserid); 
    values.put("spassword", mpass); 

    dataBase.insert(DbHelper.TABLE_NAME_SAVE, null, values); 
    Toast.makeText(getApplicationContext(), "Successfully Data saved...", Toast.LENGTH_SHORT).show(); 
    dataBase.close(); 
    Intent i=new Intent(getApplicationContext(),UserpageActivity.class); 
    startActivity(i); 
    //finish(); 
} 



} 

这里是我的logcat .......当我跑UserPageActivity活性显示

03-13 02:29:42.667: E/SQLiteLog(797): (1) no such table: saveinfo 
03-13 02:29:42.687: E/SQLiteDatabase(797): Error inserting spassword=srikanth suid=www.srikanth.com surl=srikanth 
03-13 02:29:42.687: E/SQLiteDatabase(797): android.database.sqlite.SQLiteException: no such table: saveinfo (code 1): , while compiling: INSERT INTO saveinfo(spassword,suid,surl) VALUES (?,?,?) 
03-13 02:29:42.687: E/SQLiteDatabase(797): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
03-13 02:29:42.687: E/SQLiteDatabase(797): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) 
03-13 02:29:42.687: E/SQLiteDatabase(797): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500) 
03-13 02:29:42.687: E/SQLiteDatabase(797): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
03-13 02:29:42.687: E/SQLiteDatabase(797): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 
03-13 02:29:42.687: E/SQLiteDatabase(797): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) 
03-13 02:29:42.687: E/SQLiteDatabase(797): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1467) 
03-13 02:29:42.687: E/SQLiteDatabase(797): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339) 
03-13 02:29:42.687: E/SQLiteDatabase(797): at com.example.personal.UserpageActivity.saveData(UserpageActivity.java:104) 
03-13 02:29:42.687: E/SQLiteDatabase(797): at com.example.personal.UserpageActivity.onClick(UserpageActivity.java:58) 
03-13 02:29:42.687: E/SQLiteDatabase(797): at android.view.View.performClick(View.java:4438) 
03-13 02:29:42.687: E/SQLiteDatabase(797): at android.view.View$PerformClick.run(View.java:18422) 
03-13 02:29:42.687: E/SQLiteDatabase(797): at android.os.Handler.handleCallback(Handler.java:733) 
03-13 02:29:42.687: E/SQLiteDatabase(797): at android.os.Handler.dispatchMessage(Handler.java:95) 
03-13 02:29:42.687: E/SQLiteDatabase(797): at android.os.Looper.loop(Looper.java:136) 
03-13 02:29:42.687: E/SQLiteDatabase(797): at android.app.ActivityThread.main(ActivityThread.java:5017) 
03-13 02:29:42.687: E/SQLiteDatabase(797): at java.lang.reflect.Method.invokeNative(Native Method) 
03-13 02:29:42.687: E/SQLiteDatabase(797): at java.lang.reflect.Method.invoke(Method.java:515) 
03-13 02:29:42.687: E/SQLiteDatabase(797): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
03-13 02:29:42.687: E/SQLiteDatabase(797): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
03-13 02:29:42.687: E/SQLiteDatabase(797): at dalvik.system.NativeStart.main(Native Method) 
03-13 02:29:42.737: I/Choreographer(797): Skipped 48 frames! The application may be doing too much work on its main thread. 
03-13 02:29:44.187: I/System.out(797): In constructor 
03-13 02:29:44.597: I/Choreographer(797): Skipped 416 frames! The application may be doing too much work on its main thread. 
03-13 02:29:47.107: I/Choreographer(797): Skipped 33 frames! The application may be doing too much work on its main thread. 

这logcat的....,然后点击保存信息按钮...

出了什么问题?

回答

0

CREATE TABLE有语法问题:

public static final String SCRIPT="CREATE TABLE" + TABLE_NAME_SAVE + "(" + "_id  INTEGER PRIMARY KEY AUTOINCREMENT,"+ 
    "surl TEXT NOT NULL, suid TEXT NOT NULL, spassword TEXT NOT NULL);"; 

你需要TABLE与名称之间的空间,这样的:

public static final String SCRIPT="CREATE TABLE " + TABLE_NAME_SAVE + "(" + "_id  INTEGER PRIMARY KEY AUTOINCREMENT,"+ 
    "surl TEXT NOT NULL, suid TEXT NOT NULL, spassword TEXT NOT NULL);"; 

你不应该在onCreate()被捕获异常。当sqlite帮助程序onCreate()成功返回时,框架认为一切正常,并设置了表。

如上修复onCreate()之后,卸载您的应用程序,以便再次调用onCreate()

+0

嗨...感谢您的重播...再次替换您的答案后,我得到同样的问题。我知道发生了什么事请给我一些更多的指导 – user3239005

相关问题