Android 删除 SQLite table
Android Drop a SQLite table
我正在构建一个应用程序,我必须在 SQLite 数据库上创建多个 tables。
我能给出的最好的例子是我必须管理的一家商店,所以我正在为每个类别(葡萄酒、啤酒、牛奶等)创建一个 table我必须管理我销售的品牌的产品,但是,如果我停止销售其中一个类别,我希望能够删除该类别 table。
但是我试了很多网上的例子,都没有用。我总是遇到同样的错误。
因为我的 table 上有很多项目,所以我构建了一个自定义列表视图和一个自定义适配器,两者都运行良好,我可以毫无问题地删除或添加新项目,构建新的 tables,但同样的方法无法删除我构建的 tables.
我故意让我的数据库打开,直到我的 activity 被破坏,这样我就不必通过我的适配器打开它。
也许有人可以帮助我如何使用从字符串传递的名称删除 table,使用一个按钮,或者在这种情况下,使用我的适配器按钮真的很有帮助,因为我的想法是添加我的列表视图上的按钮。
为了清楚起见,如果我创建一个 editText 来键入我的 table 名称并使用按钮 运行 此代码,我可以删除 tables:
dataBase.execSQL("DROP TABLE IF EXISTS '" + tableName + "'");
或者如果我 运行 在执行方法 onCreate
期间使用此代码,并且我从 table 中给出了一个真正存在的名称。
dataBase.execSQL("DROP TABLE IF EXISTS 'test 1'");
所以我的问题不是如何处理 NullPointerException
而是如何从我的自定义适配器操作我的 SQLite 数据库。
谢谢!
这是我的适配器代码:
public class MyCustomAdapter extends BaseAdapter implements ListAdapter {
private ArrayList<String> list = new ArrayList<String>();
private Context context;
private SQLiteDatabase dataBase;
private String tableName;
public MyCustomAdapter(ArrayList<String> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int pos) {
return list.get(pos);
}
@Override
public long getItemId(int pos) {
//return list.get(pos).getId();
//just return 0 if your list items do not have an Id variable.
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.list_item_clickable, null);
}
//Handle TextView and display string from your list
TextView listItemText = (TextView)view.findViewById(R.id.list_item_textview);
listItemText.setText(list.get(position));
//Handle buttons and add onClickListeners
Button deleteBtn = (Button)view.findViewById(R.id.delete_btn);
deleteBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//criar alertDialog
AlertDialog.Builder dialog = new AlertDialog.Builder(context);
dialog.setTitle("Delete!");
dialog.setMessage("Do you wish to delete this ToDo list?");
dialog.setCancelable(false);
dialog.setIcon(android.R.drawable.ic_delete);
dialog.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(context, "No!", Toast.LENGTH_SHORT).show();
}
});
dialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
final String tableName= list.get( position ).toString();
try {
dataBase.execSQL("DROP TABLE IF EXISTS '" + tableName + "'");
//dataBase.execSQL("DROP TABLE IF EXISTS 'test 1'");
list.remove(position); //or some other task
Toast.makeText(context, "Tabela " + tableName + " removida com sucesso!", Toast.LENGTH_SHORT).show();
notifyDataSetChanged();
} catch (Exception e) {
e.printStackTrace();
}
}
});
dialog.create();
dialog.show();
}
});
listItemText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Toast.makeText(context, "Item position is: " + list.get(position), Toast.LENGTH_SHORT).show();
Intent intent = new Intent(context, MainActivity.class);
String tabelaNome = list.get( position ).toString();
intent.putExtra("tableName", tableName);
context.startActivity(intent);
}
});
return view;
}
Error message
请注意您的两个 SQL 语句之间的区别:
dataBase.execSQL("DROP TABLE IF EXISTS '" + tableName + "'");
dataBase.execSQL("DROP TABLE IF EXISTS teste 1");
你说的作品没有在 table 名字两边加引号。
我正在构建一个应用程序,我必须在 SQLite 数据库上创建多个 tables。
我能给出的最好的例子是我必须管理的一家商店,所以我正在为每个类别(葡萄酒、啤酒、牛奶等)创建一个 table我必须管理我销售的品牌的产品,但是,如果我停止销售其中一个类别,我希望能够删除该类别 table。
但是我试了很多网上的例子,都没有用。我总是遇到同样的错误。
因为我的 table 上有很多项目,所以我构建了一个自定义列表视图和一个自定义适配器,两者都运行良好,我可以毫无问题地删除或添加新项目,构建新的 tables,但同样的方法无法删除我构建的 tables.
我故意让我的数据库打开,直到我的 activity 被破坏,这样我就不必通过我的适配器打开它。
也许有人可以帮助我如何使用从字符串传递的名称删除 table,使用一个按钮,或者在这种情况下,使用我的适配器按钮真的很有帮助,因为我的想法是添加我的列表视图上的按钮。
为了清楚起见,如果我创建一个 editText 来键入我的 table 名称并使用按钮 运行 此代码,我可以删除 tables:
dataBase.execSQL("DROP TABLE IF EXISTS '" + tableName + "'");
或者如果我 运行 在执行方法 onCreate
期间使用此代码,并且我从 table 中给出了一个真正存在的名称。
dataBase.execSQL("DROP TABLE IF EXISTS 'test 1'");
所以我的问题不是如何处理 NullPointerException
而是如何从我的自定义适配器操作我的 SQLite 数据库。
谢谢!
这是我的适配器代码:
public class MyCustomAdapter extends BaseAdapter implements ListAdapter {
private ArrayList<String> list = new ArrayList<String>();
private Context context;
private SQLiteDatabase dataBase;
private String tableName;
public MyCustomAdapter(ArrayList<String> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int pos) {
return list.get(pos);
}
@Override
public long getItemId(int pos) {
//return list.get(pos).getId();
//just return 0 if your list items do not have an Id variable.
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.list_item_clickable, null);
}
//Handle TextView and display string from your list
TextView listItemText = (TextView)view.findViewById(R.id.list_item_textview);
listItemText.setText(list.get(position));
//Handle buttons and add onClickListeners
Button deleteBtn = (Button)view.findViewById(R.id.delete_btn);
deleteBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//criar alertDialog
AlertDialog.Builder dialog = new AlertDialog.Builder(context);
dialog.setTitle("Delete!");
dialog.setMessage("Do you wish to delete this ToDo list?");
dialog.setCancelable(false);
dialog.setIcon(android.R.drawable.ic_delete);
dialog.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(context, "No!", Toast.LENGTH_SHORT).show();
}
});
dialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
final String tableName= list.get( position ).toString();
try {
dataBase.execSQL("DROP TABLE IF EXISTS '" + tableName + "'");
//dataBase.execSQL("DROP TABLE IF EXISTS 'test 1'");
list.remove(position); //or some other task
Toast.makeText(context, "Tabela " + tableName + " removida com sucesso!", Toast.LENGTH_SHORT).show();
notifyDataSetChanged();
} catch (Exception e) {
e.printStackTrace();
}
}
});
dialog.create();
dialog.show();
}
});
listItemText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Toast.makeText(context, "Item position is: " + list.get(position), Toast.LENGTH_SHORT).show();
Intent intent = new Intent(context, MainActivity.class);
String tabelaNome = list.get( position ).toString();
intent.putExtra("tableName", tableName);
context.startActivity(intent);
}
});
return view;
}
Error message
请注意您的两个 SQL 语句之间的区别:
dataBase.execSQL("DROP TABLE IF EXISTS '" + tableName + "'");
dataBase.execSQL("DROP TABLE IF EXISTS teste 1");
你说的作品没有在 table 名字两边加引号。