SQLite不在第二表中插入数据 [英] Sqlite not inserting data in 2nd table
问题描述
此代码在一个表上工作正常....并附加了文件 现在我要创建两个表,第一个活动是在table1中插入数据...但是第二个活动是不插入数据....没有日志消息.....在调用attach时,它给出了如下所示的日志:
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)
我的数据库类是
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个不同的表中,最后读取数据库并通过文本文件发送它……还有其他方法吗?
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?.
我已经尝试过,我创建了一个包含5个cloumns的表...第一个活动是在前3列中插入数据,第二个活动是在第4列和第5列中插入数据........但是两行,第一行的最后两列为空值,第二行的前三列为空值.....我要一行而不是两行
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
推荐答案
现在可以正常使用
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; }
这篇关于SQLite不在第二表中插入数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!