2015-05-12 119 views
-1

我的DataHandler活動代碼retriving從表中的數據是eroors在SQLite數據庫occourd在安卓

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; 

public class DataHandlerDairy { 

public static final String DATE = "date"; 
public static final String DAIRY = "dairy"; 
private static final String DATA_BASE_NAME = "mydairy"; 
private static final String TABLE_NAME = "table_dairy"; 
private static final int DATABASE_VERSION = 1; 
private static final String TABLE_CREATE="create table table_diary  (date text primary key," + "dairy text not null);"; 

DataBaseHelper1 dbhelper1; 
Context ct; 
SQLiteDatabase db; 

public DataHandlerDairy(Context ct) 
{ 
    this.ct=ct; 
    dbhelper1 = new DataBaseHelper1(ct); 

} 

private static class DataBaseHelper1 extends SQLiteOpenHelper 
{ 

public DataBaseHelper1(Context ct) 
{ 
    super(ct,DATA_BASE_NAME,null, DATABASE_VERSION); 
} 


    @Override 
public void onCreate(SQLiteDatabase db) { 
    // TODO Auto-generated method stub 
    try 
    { 
     db.execSQL(TABLE_CREATE); 
    } 
    catch(SQLException e) 
    { 
     e.printStackTrace(); 
    } 
    } 



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

    db.execSQL("DROP TABLE IF EXISTS table_dairy "); 
    onCreate(db); 
} 

} 

public DataHandlerDairy open() 
{ 
db = dbhelper1.getWritableDatabase(); 
return this; 
} 

public void close() 
{ 
    dbhelper1.close(); 
} 

public long insertData(String date,String dairy) 
{ 
    ContentValues content = new ContentValues(); 
    content.put(DATE, date); 
    content.put(DAIRY, dairy); 
    return db.insertOrThrow(TABLE_NAME, null, content); 
} 

public Cursor returnData(String date1) throws SQLException 
{ 
    Cursor c = db.query(true, TABLE_NAME, new String[] { DATE, DAIRY}, DATE + "=" + date1, null, null, null, null, null); 
    if(c!=null) 
    { 
     c.moveToFirst(); 
    } 
    return c; 
} 
} 

,當我嘗試使用保存操作即insertData()方法在DataHandler的活動。並使用Intents存儲從其他活動獲得日期的日期。

用於將數據保存到數據庫中的代碼是

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.EditText; 
import android.widget.ImageButton; 
import android.widget.Toast; 

public class Write_Dairy extends Activity { 

EditText et1; 
ImageButton correct,wrong; 
DataHandlerDairy handler2; 
String getdate; 



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




    et1 = (EditText) findViewById(R.id.writediary); 
    correct=(ImageButton) findViewById(R.id.correct1); 
    wrong=(ImageButton) findViewById(R.id.wrong1); 


    Bundle bundle = getIntent().getExtras(); 
    getdate = bundle.getString("message"); 


    correct.setOnClickListener(new OnClickListener() { 


     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 


      String getdairy = et1.getText().toString(); 
      handler2 = new DataHandlerDairy(getBaseContext()); 
      handler2.open(); 
      long id = handler2.insertData(getdate,getdairy); 
      Toast.makeText(getBaseContext(), "your dairy is saved successfully", Toast.LENGTH_LONG).show(); 
      handler2.close(); 

      Intent ijk = new Intent(Write_Dairy.this,PickYourDate.class); 
      startActivity(ijk); 

     } 
    }); 

    wrong.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      Toast.makeText(getBaseContext(), "please write your dairy again", Toast.LENGTH_LONG).show(); 
      et1.setText(""); 

     } 
    }); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_write__dairy, menu); 
    return true; 
} 

} 

和用於retriving數據我已經使用的時間作爲我用它作爲在兩個SQL和Java串主鍵。對於retriveing數據的代碼是

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.graphics.Typeface; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ImageButton; 
import android.widget.TextView; 

public class Read_Dairy extends Activity { 


String date1; 
TextView tv1; 
ImageButton imgb1; 
Button bt1; 
DataHandlerDairy handler3; 
String getdata=" "; 

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



    tv1=(TextView) findViewById(R.id.readme); 
    imgb1=(ImageButton) findViewById(R.id.tick); 
    bt1=(Button) findViewById(R.id.ready); 

    Bundle bundle = getIntent().getExtras(); 
    date1 = bundle.getString("kanna"); 



    bt1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      handler3 = new DataHandlerDairy(getBaseContext()); 
      handler3.open(); 
      Cursor c = handler3.returnData(date1); 
      if(c.moveToFirst()) 
      { 
       do 
       { 
       getdata=c.getString(1); 

       }while(c.moveToNext());    
       } 
      handler3.close(); 

      if(getdata==null) 
      { 
       tv1.setText("no data exists for this date"); 
      } 
      else 
      { 
      tv1.setText(c.getString(1)); 
      } 

     } 

    }); 


    imgb1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      Intent ks = new Intent(Read_Dairy.this,PickYourDate.class); 
      startActivity(ks); 

     } 
    }); 

    Typeface font = Typeface.createFromAsset(getAssets(), "Strato-linked.ttf"); 
    tv1.setTypeface(font); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_read__dairy, menu); 
    return true; 
} 

} 

堆棧跟蹤,而我試圖存儲的數據是

E/SQLiteLog(16724): (1) no such table: table_dairy 
D/AndroidRuntime(16724): Shutting down VM 
E/AndroidRuntime(16724): FATAL EXCEPTION: main 
E/AndroidRuntime(16724): Process: simple.smile.my_dairy, PID: 16724 
E/AndroidRuntime(16724): android.database.sqlite.SQLiteException: no such table: table_dairy (code 1): , while compiling: INSERT INTO table_dairy(date,dairy) VALUES (?,?) 
E/AndroidRuntime(16724): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
E/AndroidRuntime(16724): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) 
E/AndroidRuntime(16724): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500) 
E/AndroidRuntime(16724): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
E/AndroidRuntime(16724): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 
E/AndroidRuntime(16724): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) 
E/AndroidRuntime(16724): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469) 
E/AndroidRuntime(16724): at android.database.sqlite.SQLiteDatabase.insertOrThrow(SQLiteDatabase.java:1367) 
E/AndroidRuntime(16724): at simple.smile.my_dairy.DataHandlerDairy.insertData(DataHandlerDairy.java:79) 
E/AndroidRuntime(16724): at simple.smile.my_dairy.Write_Dairy$1.onClick(Write_Dairy.java:48) 
E/AndroidRuntime(16724): at android.view.View.performClick(View.java:4832) 
E/AndroidRuntime(16724): at android.view.View$PerformClick.run(View.java:19839) 
E/AndroidRuntime(16724): at android.os.Handler.handleCallback(Handler.java:739) 
E/AndroidRuntime(16724): at android.os.Handler.dispatchMessage(Handler.java:95) 
E/AndroidRuntime(16724): at android.os.Looper.loop(Looper.java:211) 
E/AndroidRuntime(16724): at android.app.ActivityThread.main(ActivityThread.java:5315) 
E/AndroidRuntime(16724): at java.lang.reflect.Method.invoke(Native Method) 
E/AndroidRuntime(16724): at java.lang.reflect.Method.invoke(Method.java:372) 
AndroidRuntime(16724):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941) 
E/AndroidRuntime(16724): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:736) 

請問誰能告訴什麼是錯誤,我已經做了,如何能在錯誤得到解決。 在此先感謝。

回答

2

你的表名不匹配:

private static final String TABLE_NAME = "table_dairy"; // DAIRY????? 

private static final String TABLE_CREATE="create table table_diary (date text primary key," + "dairy text not null);"; 

return db.insertOrThrow(TABLE_NAME, null, content); 

試圖插入table_dairy,當你創建table_diary
所以,它正確地告訴你,table_dairy不存在。

+1

正確答案。如果您更改表格,因爲需要清除數據庫,我會添加以記住卸載並重新安裝應用程序。 –

+0

...或者簡單地增加常量'DATABASE_VERSION'的值,以使'onUpgrade()'事件觸發。 –

+1

是的,這是另一種方式 –