Sqlite not inserting data in 2nd table

浪子不回头ぞ 提交于 2020-01-17 07:44:10

问题


This code was working fine with one table....and was attaching file Now I want to create two tables first activity is inserting data in table1...but second activity is not inserting data....there is no log message........while calling attach it gives log as given below:

      E/SQLiteLog: (1)

My database class is

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();



}

}

I want to save data from 8 different activities in 8 different tables and read database in the end and send it through text file...Is there any other way of doing this?.

What I already tried , I created one table having 5 cloumns...1st activity was inserting data in first 3 columns and 2nd activity was inserting data in 4th and 5th columns........BUT it was creating two rows ,First row having last two columns with null values and Second row having first three columns with null values.....I want one row not two rows


回答1:


when you are inserting the data in same row , you should update the row instead of again calling insert. for eg:-

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

and then call update instead of insert

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

you can refer this




回答2:


This works fine now

  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; } 


来源:https://stackoverflow.com/questions/43434318/sqlite-not-inserting-data-in-2nd-table

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!