2017-04-16 37 views
0

此代碼工作正常使用一個表中沒有插入數據....並附加文件 現在我要創建兩個表的第一項活動是在插入表1數據...但第二個活動是不插入sqlite的第二屆中表

 E/SQLiteLog: (1) 

我的數據庫類是

public class DatabaseHelper extends SQLiteOpenHelper { 
public static final String DATABASE_NAME="GEOTAG.db"; 
public static final String TABLE_NAME1="Coordinates_table"; 
public static final String TABLE_NAME2="Form1_table"; 
public static final String CoL_1="ID"; 
public static final String CoL_2="LATITUDE"; 
public static final String CoL_3="LONGITUDE"; 
public static final String CoL_4="IDForm1"; 
public static final String CoL_5="Residence"; 
public static final String CoL_6="Gender"; 
public static final int DATABASE_VERSION = 3; 
public static Context c; 
Intent intent =null,chooser=null; 
File file =null; 
String myFile="Data"; 
String fpath; 
String fileName; 
FileOutputStream fileOutputStream=null; 

public DatabaseHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    c=context; 

} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    try { 
     db.execSQL("CREATE TABLE " + TABLE_NAME1 + " (" + CoL_1 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + CoL_2 +" TEXT,"+ CoL_3 +" TEXT)"); 
     db.execSQL("CREATE TABLE " + TABLE_NAME2 + " (" + CoL_4 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + CoL_5 +" NTEXT,"+ CoL_6 +" NTEXT)"); 
    } catch (SQLException e) { 
     Log.e("HEY","Error creating"); 
     e.printStackTrace(); 
    } 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    try{ 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME1); 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME2); 
    onCreate(db);} 
    catch (SQLException e){ 
     e.printStackTrace(); 
    } 

} 




public boolean insertData (String lat,String lng){ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues contentValues =new ContentValues(); 
    contentValues.put(CoL_2,lat); 
    contentValues.put(CoL_3,lng); 

    long res =db.insert(TABLE_NAME1,null,contentValues); 
    db.close(); 
    return res != -1; 



} 

public boolean insertForm1 (String a,String b){ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues contentValues =new ContentValues(); 
    contentValues.put(CoL_5,a); 
    contentValues.put(CoL_6,b); 


    long res =db.insert(TABLE_NAME2,null,contentValues); 
    db.close(); 
    return res != -1; 



} 


public void Attach() 
{ 
    int id ; 
    String latitude ; 
    String longitude ; 
    String residence ; 
    String gender ; 
    SQLiteDatabase db =this.getWritableDatabase(); 
    String[] columns={CoL_1, CoL_2, CoL_3,CoL_5,CoL_6}; 
    Cursor cursor1,cursor2; 
    cursor1 = db.query(TABLE_NAME1,columns,null,null,null,null,null); 
    cursor2 = db.query(TABLE_NAME2,columns,null,null,null,null,null); 

    fileName= myFile+"." +"txt"; 
    // writing file on external storage 
    try { 
     File sdCard = Environment.getExternalStorageDirectory(); 
     File dir = new File(sdCard.getAbsolutePath() + "/Files"); 
     dir.mkdirs(); 
     if (dir.isDirectory()) { 
      String[] children = dir.list(); 
      for (int i = 0; i < children.length; i++) { 
       new File(dir, children[i]).delete(); 
      } 
     } 
     file = new File(dir, fileName); 
    } 
    catch (Exception e){ 
     e.printStackTrace(); 
    } 



    try { 
     fileOutputStream = new FileOutputStream(file); 
     fpath = file.toString(); 

    while (cursor1.moveToNext()) { 
     int index1 = cursor1.getColumnIndex(CoL_1); 
     int index2 = cursor1.getColumnIndex(CoL_2); 
     int index3 = cursor1.getColumnIndex(CoL_3); 
     int index4 = cursor2.getColumnIndex(CoL_5); 
     int index5 = cursor2.getColumnIndex(CoL_6); 
     id = cursor1.getInt(index1); 
     latitude = cursor1.getString(index2); 
     longitude = cursor1.getString(index3); 
     residence = cursor2.getString(index4); 
     gender = cursor2.getString(index5); 


      String text1 = Integer.toString(id) + " "; 
      String text2 = latitude + " "; 
      String text3 = longitude + " "; 
      String text4 = residence + " "; 
      String text5 = gender + "\n"; 

      fileOutputStream.write(text1.getBytes()); 
      fileOutputStream.write(text2.getBytes()); 
      fileOutputStream.write(text3.getBytes()); 
      fileOutputStream.write(text4.getBytes()); 
      fileOutputStream.write(text5.getBytes()); 




     Toast.makeText(c,"Wait while the file is being attached", Toast.LENGTH_LONG).show(); 


    } 
     Toast.makeText(c,"Ready to Send", Toast.LENGTH_LONG).show(); 

     fileOutputStream.flush(); 
     fileOutputStream.close(); 
    } catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} finally { 
    try { 
     fileOutputStream.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 





} 


public void SendData(){ 
    if(fpath!= null) { 
    File targetFile = new File(fpath); 
    Uri docUri = Uri.fromFile(targetFile); 
     intent = new Intent(Intent.ACTION_SEND); 
     intent.putExtra(Intent.EXTRA_STREAM, docUri); 
     intent.setType("text/plain"); 
     intent.putExtra(Intent.EXTRA_TEXT, "Attached Data.txt"); 
     chooser = Intent.createChooser(intent, "Send Email...."); 
     c.startActivity(chooser); 
    } 
    else 
    { 
     Toast.makeText(c,"Please attach file before Sending", Toast.LENGTH_LONG).show(); 
    } 
} 


public void reset(){ 
    SQLiteDatabase db =this.getWritableDatabase(); 
    db.delete(TABLE_NAME1,null,null); 
    db.delete(TABLE_NAME2,null,null); 
    Toast.makeText(c,"Resetting Database", Toast.LENGTH_LONG).show(); 



} 

} 

我要救:下面給出的數據....沒有日誌消息........同時呼籲重視它給日誌來自8個不同表格的8個不同活動的數據並最終讀取數據庫併發送粗糙的文本文件...有沒有其他的方式來做到這一點?

我已經嘗試過,我創建了具有5個cloumns一個表...第一活性將在第一3列和第2活性插入在第4和第5列中的數據的數據........但它是創建兩行,具有空值排和第二排爲空值前三列最後兩列第一行.....我想一排沒有兩行

當你插入在同一行中的數據

回答

0

這工作得很好,現在

public boolean update(String Res, String Gen){ SQLiteDatabase db = 
    this.getWritableDatabase(); ContentValues contentValues =new 
    ContentValues(); contentValues.put(CoL_4,Res); contentValues.put(CoL_5,Gen); 
db.update(TABLE_NAME,contentValues, "Residence = ?",new String[] { "A" }); 
return true; } 
0

,你應該更新行而不是再次調用插入。 爲如: -

ContentValues cv = new ContentValues(); 
cv.put("Field1","value"); //These Fields should be your String values of 

,然後調用更新,而不是插入

myDB.update(TableName, cv, "_id="+id, null); 

可以refer this

+0

這是對的方法,我更早嘗試過? – Shazil

+0

當你輸入數據時,對於已經有數據而不是insert的行使用update,所以你不會有空值。 –

+0

非常感謝你的時間讓我試試 – Shazil