我无法更新 SQLite 中的值
i cant update value in SQLite
我有这个 table 到 sqlite:
public static final String TABLA_PARA_SEGUIR =
"CREATE TABLE " + TABLA_SEGUIR + "(" +
ID_ELEMENTO + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
NOMBRE_MANGA + " TEXT NOT NULL, " +
URL_MANGA + " TEXT NOT NULL, " +
URL_IMAGEN + " TEXT NOT NULL, " +
CONTADOR_CAPITULOS + " TEXT NOT NULL, " +
BIT_SEGUIR_NO + " INTEGER);";
这是我 Update
值的方法:
private ContentValues mapaSiguiendo(SeguirManga sm){
ContentValues cv = new ContentValues();
cv.put(PaginasTabla.NOMBRE_MANGA, sm.getNombre());
cv.put(PaginasTabla.URL_MANGA, sm.getUrl());
cv.put(PaginasTabla.URL_IMAGEN, sm.getUrlImagen());
cv.put(PaginasTabla.CONTADOR_CAPITULOS, sm.getContador());
cv.put(PaginasTabla.BIT_SEGUIR_NO, sm.getValorSeguir());
return cv;
}
public void actualizar(SeguirManga sm, Context actividad) {
try{
this.openWriteableDB();
ContentValues cv = new ContentValues();
cv.put(PaginasTabla.BIT_SEGUIR_NO, sm.getValorSeguir());
db.update(PaginasTabla.TABLA_SEGUIR, cv, PaginasTabla.ID_ELEMENTO + " = ?", new String[]{String.valueOf(sm.getId())});
db.close();
Toast.makeText(actividad, "Modificado", Toast.LENGTH_SHORT).show();
}catch(Exception sqlException){
Toast.makeText(actividad, "Error: " + sqlException.getMessage(), Toast.LENGTH_SHORT).show();
}
}
然后我在 activity:
中添加了一个对象变量
private SeguirManga seguirManga = new SeguirManga();
所以,在 activity 中,我使用它通过更新方法更改值:
private void dejarMetodoDaato(){
PaginasSQL paginasSQL = new PaginasSQL(TMOnlineMangaSeleccion.this);
seguirManga.setValorSeguir(0);
paginasSQL.actualizar(seguirManga);
}
但这不起作用,因为当我按下按钮时:
dejarDato.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dejarMetodoDaato();
}
});
Class:
public class SeguirManga {
private int id;
private String nombre;
private String url;
private String urlImagen;
private String contador;
private int valorSeguir;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getContador() {
return contador;
}
public void setContador(String contador) {
this.contador = contador;
}
public int getValorSeguir() {
return valorSeguir;
}
public void setValorSeguir(int valorSeguir) {
this.valorSeguir = valorSeguir;
}
public String getUrlImagen() {
return urlImagen;
}
public void setUrlImagen(String urlImagen) {
this.urlImagen = urlImagen;
}
public SeguirManga(){}
public SeguirManga(int id, String nombre, String url, String urlImagen,String contador, int valorSeguir) {
this.id = id;
this.nombre = nombre;
this.url = url;
this.urlImagen = urlImagen;
this.contador = contador;
this.valorSeguir = valorSeguir;
}
}
没有任何反应,因为值一直是 (1) 1。我的代码有什么问题?
您必须指定要更新的行的 id
:
private void dejarMetodoDaato(){
PaginasSQL paginasSQL = new PaginasSQL(TMOnlineMangaSeleccion.this);
seguirManga.setId(5); // change 5 to the value of the id of the row
seguirManga.setValorSeguir(0);
paginasSQL.actualizar(seguirManga);
}
我有这个 table 到 sqlite:
public static final String TABLA_PARA_SEGUIR =
"CREATE TABLE " + TABLA_SEGUIR + "(" +
ID_ELEMENTO + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
NOMBRE_MANGA + " TEXT NOT NULL, " +
URL_MANGA + " TEXT NOT NULL, " +
URL_IMAGEN + " TEXT NOT NULL, " +
CONTADOR_CAPITULOS + " TEXT NOT NULL, " +
BIT_SEGUIR_NO + " INTEGER);";
这是我 Update
值的方法:
private ContentValues mapaSiguiendo(SeguirManga sm){
ContentValues cv = new ContentValues();
cv.put(PaginasTabla.NOMBRE_MANGA, sm.getNombre());
cv.put(PaginasTabla.URL_MANGA, sm.getUrl());
cv.put(PaginasTabla.URL_IMAGEN, sm.getUrlImagen());
cv.put(PaginasTabla.CONTADOR_CAPITULOS, sm.getContador());
cv.put(PaginasTabla.BIT_SEGUIR_NO, sm.getValorSeguir());
return cv;
}
public void actualizar(SeguirManga sm, Context actividad) {
try{
this.openWriteableDB();
ContentValues cv = new ContentValues();
cv.put(PaginasTabla.BIT_SEGUIR_NO, sm.getValorSeguir());
db.update(PaginasTabla.TABLA_SEGUIR, cv, PaginasTabla.ID_ELEMENTO + " = ?", new String[]{String.valueOf(sm.getId())});
db.close();
Toast.makeText(actividad, "Modificado", Toast.LENGTH_SHORT).show();
}catch(Exception sqlException){
Toast.makeText(actividad, "Error: " + sqlException.getMessage(), Toast.LENGTH_SHORT).show();
}
}
然后我在 activity:
中添加了一个对象变量private SeguirManga seguirManga = new SeguirManga();
所以,在 activity 中,我使用它通过更新方法更改值:
private void dejarMetodoDaato(){
PaginasSQL paginasSQL = new PaginasSQL(TMOnlineMangaSeleccion.this);
seguirManga.setValorSeguir(0);
paginasSQL.actualizar(seguirManga);
}
但这不起作用,因为当我按下按钮时:
dejarDato.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dejarMetodoDaato();
}
});
Class:
public class SeguirManga {
private int id;
private String nombre;
private String url;
private String urlImagen;
private String contador;
private int valorSeguir;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getContador() {
return contador;
}
public void setContador(String contador) {
this.contador = contador;
}
public int getValorSeguir() {
return valorSeguir;
}
public void setValorSeguir(int valorSeguir) {
this.valorSeguir = valorSeguir;
}
public String getUrlImagen() {
return urlImagen;
}
public void setUrlImagen(String urlImagen) {
this.urlImagen = urlImagen;
}
public SeguirManga(){}
public SeguirManga(int id, String nombre, String url, String urlImagen,String contador, int valorSeguir) {
this.id = id;
this.nombre = nombre;
this.url = url;
this.urlImagen = urlImagen;
this.contador = contador;
this.valorSeguir = valorSeguir;
}
}
没有任何反应,因为值一直是 (1) 1。我的代码有什么问题?
您必须指定要更新的行的 id
:
private void dejarMetodoDaato(){
PaginasSQL paginasSQL = new PaginasSQL(TMOnlineMangaSeleccion.this);
seguirManga.setId(5); // change 5 to the value of the id of the row
seguirManga.setValorSeguir(0);
paginasSQL.actualizar(seguirManga);
}