我有一个类Check的实例,我想从它存储的SQlite数据库中删除。我想知道这是否可能。 当我运行代码时,我得到一个例外:
android.database.sqlite.SQLiteException: unrecognized token: "8565f9b5" (code 1): , while compiling: DELETE FROM crimes WHERE uuid = 8565f9b5-5968-4e11-8d55-b7dcfd676023
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
at android.database.sqlite.SQLiteDatabase.delete(SQLiteDatabase.java:1499)
at nl.lekolkman.android.sportveldonderhoud.CheckLab.deleteCheck(CheckLab.java:40)
at nl.lekolkman.android.sportveldonderhoud.DeleteCheckDialogFragment$2.onClick(DeleteCheckDialogFragment.java:43)
这是我的代码:
public class DeleteCheckDialogFragment extends DialogFragment {
Check mCheck;
public static DeleteCheckDialogFragment newInstance(Check mCheck) {
DeleteCheckDialogFragment frag = new DeleteCheckDialogFragment();
frag.setCheck(mCheck);
return frag;
}
public void setCheck(Check check) {
this.mCheck = check;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_delete_check_dialog, container, false);
getDialog().setTitle("Verwijder controle");
Button annuleren = (Button) rootView.findViewById(R.id.annuleren_verwijderen);
annuleren.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
Button bevestigen = (Button) rootView.findViewById(R.id.bevestigen_verwijderen);
bevestigen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// verwijder check
CheckLab checkLab = CheckLab.get(getActivity());
checkLab.deleteCheck(mCheck);
}
});
return rootView;
}
}
和SQLite处理代码:
public void deleteCheck(Check c) {
String whereClause = "uuid = " + c.getId().toString();
mDatabase.delete(CheckDbSchema.CheckTable.NAME, whereClause , null);
}
答案 0 :(得分:0)
尝试
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/root_container"
android:fitsSystemWindows="true"
android:background="@drawable/splash_gradient">
</FrameLayout>
假设@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.root_container);
boolean b = getPermission();
if(b ==true){
HomeFragment fragment = new HomeFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.root_container, fragment).commit();
}
else getPermission();
}
存储在 public boolean getPermission() {
boolean f = false;
//Check for SDK Version if greater than 23 then seek user permission
if(Build.VERSION.SDK_INT>=23) {
//Check whether permission is already granted
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// Ask for user permission
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 404);
if(ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
!=PackageManager.PERMISSION_DENIED)
f = true;
}
else f = true;
}
return f;
}
类型,您需要在文字字符串周围加上单引号。