无法将数据永久存储在数据库中
我试图将注册数据存储在数据库中。有两个表格 - geregistry3和getypes2。插入在getypes2中正常工作。但是,在将数据插入geregistry3时,如果不使用db.close()关闭数据库,它将不会被存储或只存储一个元组(如果太短暂,在重新启动该活动时会回到空)。任何日志和堆栈跟踪都不会显示异常或错误。无法将数据永久存储在数据库中
请帮忙!
GEDatabaseHandler.java
package com.example.akshayjk.attempt1.SQL; import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class GEDatabaseHandler extends SQLiteOpenHelper {
public GEDatabaseHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
private static final String datatbase="mydatabase.db";
private static final String table_name1="geregistry3";
private static final int database_version=1;
public static final String email="email_id";
public static final String group_name="group_name";
public static final String doe="doe";
public static final String timing="timing";
private static final String create_table1="CREATE TABLE " + table_name1 + "(" + email+" TEXT, "+group_name+" TEXT, "+doe+" NUMBER, "+timing+" TEXT "+ ");";
private static final String table_name2="getypes2";
public static final String group_name1="group_name";
public static final String timings="timing";
private static final String create_table2="CREATE TABLE "+ table_name2+"("+group_name1+" TEXT, "+timings+" TEXT, "+ doe+" NUMBER);";
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(create_table2);
db.execSQL(create_table1);
fillGetypes(db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + table_name2);
db.execSQL("DROP TABLE IF EXISTS " + table_name1);
// Create tables again
onCreate(db);
}
public void fillGetypes(SQLiteDatabase db){
String[] types={"Bodypump", "Barre", "Cycle 45"};
int[] times={1200,1230,1630,1700,1730,1745,1830,1900,1930};
String[]day={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
ContentValues values = new ContentValues();
values.put(group_name1,types[0]);
values.put(timings,times[0]);
values.put(doe,day[0]);
db.insert(table_name2, null, values);
values=new ContentValues();
values.put(group_name1,types[0]);
values.put(timings,times[4]);
values.put(doe,day[0]);
db.insert(table_name2, null, values);;
values=new ContentValues();
values.put(group_name1,types[0]);
values.put(timings,times[3]);
values.put(doe,day[1]);
db.insert(table_name2, null, values);;
values=new ContentValues();
values.put(group_name1,types[0]);
values.put(timings,times[4]);
values.put(doe,day[2]);
db.insert(table_name2, null, values);;
values=new ContentValues();
values.put(group_name1,types[0]);
values.put(timings,times[8]);
values.put(doe,day[3]);
db.insert(table_name2, null, values);;
values=new ContentValues();
values.put(group_name1,types[0]);
values.put(timings,times[0]);
values.put(doe,day[4]);
db.insert(table_name2, null, values);;
values=new ContentValues();
values.put(group_name1,types[0]);
values.put(timings,times[2]);
values.put(doe,day[4]);
db.insert(table_name2, null, values);;
values=new ContentValues();
values.put(group_name1,types[1]);
values.put(timings,times[0]);
values.put(doe,day[0]);
db.insert(table_name2, null, values);;
values=new ContentValues();
values.put(group_name1,types[1]);
values.put(timings,times[3]);
values.put(doe,day[1]);
db.insert(table_name2, null, values);;
values=new ContentValues();
values.put(group_name1,types[1]);
values.put(timings,times[6]);
values.put(doe,day[3]);
db.insert(table_name2, null, values);;
values=new ContentValues();
values.put(group_name1,types[1]);
values.put(timings,times[5]);
values.put(doe,day[4]);
db.insert(table_name2, null, values);;
values=new ContentValues();
values.put(group_name1,types[2]);
values.put(timings,times[4]);
values.put(doe,day[0]);
db.insert(table_name2, null, values);;
values=new ContentValues();
values.put(group_name1,types[2]);
values.put(timings,times[6]);
values.put(doe,day[0]);
db.insert(table_name2, null, values);;
values=new ContentValues();
values.put(group_name1,types[2]);
values.put(timings,times[0]);
values.put(doe,day[1]);
db.insert(table_name2, null, values);;
values=new ContentValues();
values.put(group_name1,types[2]);
values.put(timings,times[6]);
values.put(doe,day[1]);
db.insert(table_name2, null, values);;
values=new ContentValues();
values.put(group_name1,types[2]);
values.put(timings,times[3]);
values.put(doe,day[2]);
db.insert(table_name2, null, values);;
values=new ContentValues();
values.put(group_name1,types[2]);
values.put(timings,times[2]);
values.put(doe,day[3]);
db.insert(table_name2, null, values);;
values=new ContentValues();
values.put(group_name1,types[2]);
values.put(timings,times[0]);
values.put(doe,day[4]);
db.insert(table_name2, null, values);;
}
public void addRegister(GroupData groupData){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(email,groupData.getEmailId());
values.put(group_name,groupData.getgroup());
values.put(doe,groupData.getdOB());
values.put(timing,groupData.gettiming());
// Inserting Row
try {
db.execSQL("INSERT INTO "+table_name1+" VALUES(?,?,?,?)",new String[]{groupData.getEmailId(),groupData.getgroup(),groupData.getdOB(),String.valueOf(groupData.gettiming())});
db.close(); // Closing database connection
}catch (Exception e){
e.printStackTrace();
}
/*
*/
}
public boolean isTableExists(){
SQLiteDatabase db=this.getReadableDatabase();
Cursor cursor = db.rawQuery("select DISTINCT tbl_name from sqlite_master where tbl_name = '"+table_name1+"'", null);
if(cursor!=null) {
if(cursor.getCount()>0) {
cursor.close();
return true;
}
cursor.close();
}
return false;
}
public List<GroupData> getAllRegister(){
String[] columns = {
"*"
};
SQLiteDatabase db = this.getReadableDatabase();
List<GroupData> groupData=new ArrayList<>();
// query user table with condition
Cursor cursor = db.query(table_name1, //Table to query
columns, //columns to return
null, //columns for the WHERE clause
null, //The values for the WHERE clause
null, //group the rows
null, //filter by row groups
null); //The sort order
int cursorCount=0;
if(cursor.moveToFirst()){
do {
GroupData user = new GroupData();
user.setEmailId(cursor.getString(cursor.getColumnIndex(email)));
user.setDoB(cursor.getString(cursor.getColumnIndex(doe)));
user.settiming(Integer.parseInt(cursor.getString(cursor.getColumnIndex(timings))));
user.setgroup(cursor.getString(cursor.getColumnIndex(group_name1)));
// Adding user record to list
groupData.add(user);
} while (cursor.moveToNext());
}
if(cursor!=null && !cursor.isClosed()){
cursorCount=cursor.getCount();
cursor.close();
}
db.close();
return groupData;
}
public int checkcount(String exgroup, String Doe, int timing){
String[] columns = {
"*"
};
SQLiteDatabase db = this.getReadableDatabase();
// selection criteria
String selection = group_name+ " = ? AND "+doe+" = ? AND " +timings+" = ?";
// selection argument
String[] selectionArgs = {exgroup,Doe, String.valueOf(timing)};
// query user table with condition
Cursor cursor = db.query(table_name1, //Table to query
columns, //columns to return
selection, //columns for the WHERE clause
selectionArgs, //The values for the WHERE clause
null, //group the rows
null, //filter by row groups
null); //The sort order
int cursorCount=0;
if(cursor!=null && !cursor.isClosed()){
cursorCount=cursor.getCount();
cursor.close();
}
db.close();
return cursorCount;
}
public int checkexists(String email, String exgroup, String Doe, int timing){
String[] columns = {
"*"
};
SQLiteDatabase db = this.getReadableDatabase();
// selection criteria
String selection = this.email+" = ? AND "+group_name+ " = ? AND "+doe+" = ? AND " +timings+" = ?";
// selection argument
String[] selectionArgs = {email,exgroup,Doe, String.valueOf(timing)};
// query user table with condition
Cursor cursor = db.query(table_name1, //Table to query
columns, //columns to return
selection, //columns for the WHERE clause
selectionArgs, //The values for the WHERE clause
null, //group the rows
null, //filter by row groups
null); //The sort order
int cursorCount=0;
if(cursor!=null && !cursor.isClosed()){
cursorCount=cursor.getCount();
cursor.close();
}
db.close();
return cursorCount;
}
public List<GroupData> retTypes(String exgroup){
Date now=new Date();
int i;
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("EEEE");
String daynow=simpleDateFormat.format(now);
String[] day={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
for(i=0;i<day.length;i++){
if(day[i].equals(daynow))
break;
}
simpleDateFormat=new SimpleDateFormat("HH:mm");
Calendar calendar=Calendar.getInstance();
String time=simpleDateFormat.format(calendar.getTime());
String nowtime=time.replace(":","");
int timeNow= Integer.parseInt(nowtime);
nowtime="0"+new Integer(timeNow).toString();
String[] columns = {
"*"
};
List<GroupData> groupDataList=new ArrayList<GroupData>();
SQLiteDatabase db = this.getReadableDatabase();
// selection criteria
String selection = group_name1+" = ? AND " +doe+" IN (?,?,?)";
// selection argument
String[] selectionArgs = {exgroup,day[i%7],day[(i+1)%7],day[(i+2)%7]};
// query user table with condition
Cursor cursor = db.query(table_name2, //Table to query
columns, //columns to return
selection, //columns for the WHERE clause
selectionArgs, //The values for the WHERE clause
null, //group the rows
null, //filter by row groups
null); //The sort order
int cursorCount = cursor.getCount();
if (cursor.moveToFirst()) {
do {
GroupData user = new GroupData();
user.setgroup(cursor.getString(cursor.getColumnIndex(group_name1)));
user.settiming(Integer.parseInt(cursor.getString(cursor.getColumnIndex(timing))));
user.setDoB(cursor.getString(cursor.getColumnIndex(doe)));
// Adding user record to list
groupDataList.add(user);
} while (cursor.moveToNext());
}
if(cursor!=null && !cursor.isClosed())
cursor.close();
db.close();
return groupDataList;
}
public List<GroupData> retTypes(String exgroup, String chosenDay){
Date now=new Date();
int i;
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("EEEE");
String daynow=simpleDateFormat.format(now);
String[] day={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
for(i=0;i<day.length;i++){
if(day[i].equals(daynow))
break;
}
simpleDateFormat=new SimpleDateFormat("HH:mm");
Calendar calendar=Calendar.getInstance();
String time=simpleDateFormat.format(calendar.getTime());
String nowtime=time.replace(":","");
int timeNow= Integer.parseInt(nowtime);
nowtime=new Integer(timeNow+1000).toString();
String[] columns = {
"*"
};
List<GroupData> groupDataList=new ArrayList<GroupData>();
SQLiteDatabase db = this.getReadableDatabase();
// selection criteria
String selection = group_name1+" = ? AND " +doe+" = ?";
// selection argument
String[] selectionArgs = {exgroup,chosenDay};
// query user table with condition
Cursor cursor = db.query(table_name2, //Table to query
columns, //columns to return
selection, //columns for the WHERE clause
selectionArgs, //The values for the WHERE clause
null, //group the rows
null, //filter by row groups
null); //The sort order
int cursorCount = cursor.getCount();
if (cursor.moveToFirst()) {
do {
GroupData user = new GroupData();
user.setgroup(cursor.getString(cursor.getColumnIndex(group_name1)));
user.settiming(Integer.parseInt(cursor.getString(cursor.getColumnIndex(timing))));
user.setDoB(cursor.getString(cursor.getColumnIndex(doe)));
// Adding user record to list
groupDataList.add(user);
} while (cursor.moveToNext());
}
cursor.close();
db.close();
return groupDataList;
}
}
GE_Form.java
package com.example.akshayjk.attempt1.HFW_Activities; public class GE_Form extends AppCompatActivity{
public static GEDatabaseHandler gdb;
public List<GroupData> groupData=new ArrayList<GroupData>();
public Spinner spTypes,spDays,spTimings;
public Button button;
@Override
public void onBackPressed() {
super.onBackPressed();
Intent intent = new Intent(GE_Form.this, HFW.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
finish();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_geform);
Bundle bundle = getIntent().getExtras();
final String email = bundle.getString("email");
button = findViewById(R.id.button_registerge);
gdb = new GEDatabaseHandler(GE_Form.this, null, null, 4);
String[] types = {"Bodypump", "Barre", "Cycle 45"};
String[] days;
String[] timings;
ArrayAdapter<String> adapter1;
final ArrayList<String> s1 = new ArrayList<>();
final ArrayList<String> s2 = new ArrayList<String>();
final String[] s3;
final String[] s4;
spTypes = findViewById(R.id.ge_sp1);
adapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, types);
spTypes.setAdapter(adapter1);
spDays = findViewById(R.id.ge_sp2);
spTimings = findViewById(R.id.ge_sp3);
final TextView textView = findViewById(R.id.test2);
spTypes.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
final String group = spTypes.getSelectedItem().toString().trim();
groupData = gdb.retTypes(group);
s1.clear();
for (GroupData g : groupData) {
s1.add(g.getdOB());
textView.append(g.getdOB() + " " + g.getgroup() + " " + g.gettiming() + "\n");
}
Set<String> hs = new HashSet<>();
hs.addAll(s1);
s1.clear();
s1.addAll(hs);
ArrayAdapter<String> adapter2;
adapter2 = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item, s1);
adapter2.notifyDataSetChanged();
spDays.setAdapter(adapter2);
spDays.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String days = spDays.getSelectedItem().toString().trim();
s2.clear();
groupData = gdb.retTypes(group, days);
for (GroupData g : groupData) {
s2.add(String.valueOf(g.gettiming()));
}
Set<String> hs = new HashSet<>();
hs.addAll(s2);
s2.clear();
s2.addAll(hs);
ArrayAdapter<String> adapter3;
adapter3 = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item, s2);
adapter3.notifyDataSetChanged();
spTimings.setAdapter(adapter3);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
if (groupData.isEmpty()) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm");
Calendar calendar = Calendar.getInstance();
String time = simpleDateFormat.format(calendar.getTime());
String nowtime = time.replace(":", "");
int timeNow = Integer.parseInt(nowtime);
nowtime = "0" + new Integer(timeNow).toString();
Toast.makeText(getApplicationContext(), nowtime, Toast.LENGTH_LONG).show();
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String edex = spTypes.getSelectedItem().toString().trim();
String eddoe = spDays.getSelectedItem().toString().trim();
int edtime = Integer.parseInt(spTimings.getSelectedItem().toString().trim());
GroupData gd = new GroupData();
if (gdb.checkexists(email, edex, eddoe, edtime) != 0) {
Toast.makeText(getApplicationContext(), "Already Registered", Toast.LENGTH_LONG).show();
} else {
if (gdb.checkcount(edex, eddoe, edtime) < 5) {
gd.setEmailId(email);
gd.setDoB(eddoe);
gd.setgroup(edex);
gd.settiming(edtime);
gdb.addRegister(gd);
textView.setText("");
}
List<GroupData> groupData1 = gdb.getAllRegister();
if (groupData1.isEmpty())
textView.append("Not writing into table");
for (GroupData d : groupData1) {
textView.append("\n" + d.getEmailId() + " " + d.getgroup() + " " + d.getdOB() + " " + d.gettiming());
}
if (gdb.isTableExists()) {
textView.append("Exists");
} else
textView.append("Does not exist");
}
}
});
}
}
回答:
如果您查看文档,你会发现通过null
作为数据库名,创建内存数据库,这意味着它不会被持续。 Here
因此,当您创建GEDatabaseHandler
时,请尝试传递任何数据库名称(只是任意字符串)。
之后,检查您的数据是否保持正确。
以上是 无法将数据永久存储在数据库中 的全部内容, 来源链接: utcz.com/qa/258605.html