Java 仅在Sqlite中创建和更新单个值
我想在我的Java 仅在Sqlite中创建和更新单个值,java,android,database,sqlite,sql-update,Java,Android,Database,Sqlite,Sql Update,我想在我的数据库中创建一个新表(这意味着我将有两个表)。在该表中,我将只有一个且唯一的值,使用该唯一的值,我将得到它,我将执行加法或减法,并再次插入/更新已减去或增加值的新值(基本上,它是一个整数值或布尔小数)。我还是sqlite的新手,也是android开发的初学者 我的问题是,在默认情况下,如何在表中只包含/插入一个值,以及如何获取和更新它。因为当我在活动本身或按钮/fab中添加INSERTquery时,每次打开片段本身或按下按钮/fab时,它都会添加新值。默认情况下,我将如何在其中只有一个
数据库中创建一个新表(这意味着我将有两个表)。在该表中,我将只有一个且唯一的值,使用该唯一的值,我将得到它,我将执行加法或减法,并再次插入/更新已减去或增加值的新值(基本上,它是一个整数
值或布尔
小数)。我还是sqlite的新手,也是android开发的初学者
我的问题是,在默认情况下,如何在表中只包含/插入一个值,以及如何获取和更新它。因为当我在活动本身或按钮/fab中添加INSERT
query时,每次打开片段本身或按下按钮/fab时,它都会添加新值。默认情况下,我将如何在其中只有一个数据,以及如何获取它,以便我可以向其中添加或减去值,并为新值更新它
我创建了两个表:
@Override
public void onCreate(SQLiteDatabase db) {
final String SQL_CREATE_CASHFLOW_TABLE = "CREATE TABLE " + ItemEntry.TABLE_NAME2 + " (" +
ItemEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
ItemEntry.COLUMN_INCOME + " INTEGER NOT NULL, " +
ItemEntry.COLUMN_SAVINGS + " INTEGER NOT NULL " +
");";
final String SQL_CREATE_ITEMLIST_TABLE = "CREATE TABLE " + ItemEntry.TABLE_NAME + " (" +
ItemEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
ItemEntry.COLUMN_LABEL + " TEXT NOT NULL, " +
ItemEntry.COLUMN_DETAIL + " TEXT, " +
ItemEntry.COLUMN_AMOUNT + " INTEGER NOT NULL, " +
ItemEntry.COLUMN_DATE + " TEXT " +
");";
db.execSQL(SQL_CREATE_ITEMLIST_TABLE);
db.execSQL(SQL_CREATE_CASHFLOW_TABLE);
}
我从bk7尝试的代码:
public void insertOrUpdateTheIncomeAndSavings(int income, int savings){
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
Cursor cursor = sqLiteDatabase.rawQuery("SELECT * from "+ItemEntry.TABLE_NAME2,null);
if(cursor.moveToNext()){
//update the values of first row here
//update income
Cursor cursor2 = sqLiteDatabase.rawQuery("UPDATE "+ItemEntry.TABLE_NAME2+" SET "+ItemEntry.COLUMN_INCOME+
" = "+ income + " WHERE "+ItemEntry._ID +" = 1",null);
}else{
//insert the value here
ContentValues cv = new ContentValues();
cv.put(ItemEntry.COLUMN_INCOME, 0);
cv.put(ItemEntry.COLUMN_SAVINGS, 0);
}
if(cursor!=null){
cursor.close();
}
sqLiteDatabase.close();
}
如何在java中实现这一点:
package com.example.admin.test2;
import android.content.Context;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
/**
* A simple {@link Fragment} subclass.
*/
public class Income extends Fragment {
public Income() {
// Required empty public constructor
}
private EditText textInput;
private FloatingActionButton fabPlus;
private FloatingActionButton fabMinus;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate (R.layout.fragment_income, container, false);
textInput = (EditText) view.findViewById(R.id.editText2);
fabPlus = (FloatingActionButton) view.findViewById(R.id.fabPlus);
fabMinus = (FloatingActionButton) view.findViewById(R.id.fabMinus);
fabPlus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
return view;
}
}
并从此编辑文本中获取值:
textInput = (EditText) view.findViewById(R.id.editText2);
我想在此文本视图中显示我在数据库中输入的输入,但它不起作用。。请检查代码:
public void getIncome() {
Cursor cur = mDatabase.rawQuery("SELECT " + ItemContract.ItemEntry.COLUMN_INCOME + " as Income FROM " + ItemContract.ItemEntry.TABLE_NAME2
, null);
if (cur.moveToFirst()) {
int incomeTotal = cur.getInt(cur.getColumnIndex("Income"));// get final total
income.setText("₱ " + incomeTotal);
}
如果第一行不存在,则插入第一行,如果第一行存在,则更新第一行
public void insertOrUpdateTheIncomeAndSavings(int income, int savings){
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
Cursor cursor = sqLiteDatabase.rawQuery("select * from "+ItemEntry.TABLE_NAME2,null);
if(cursor.moveToNext()){
//update the values of first row here
}else{
//insert the value here
}
if(cursor!=null){
cursor.close();
}
sqLiteDatabase.close();
}
编辑:将其添加到Onclick中
DBHelper dbhelper = new DBHelper(getActivity());
int income = Integer.valueOf(incomeEditText.getText().toString());
int savings = Integer.valueOf(savingsEditText.getText().toString());
dbhelper.insertOrUpdateTheIncomeAndSavings(income,savings);
您好@Joric Libiran,请分享到目前为止您已经实现的代码。@bk7我还没有尝试过任何东西,我想不出实现这个的方法。。这就是为什么我现在要问一个问题…好的,创建一个带有单列的表并共享代码,我会尽力帮助您。等等,我如何创建一个已经有值的列?因为我将只编辑/更新它?创建一个没有值的表我将把它放在dbhelper java中?或者在收入和储蓄方面。。他们在dbhelper中有单独的片段btwyes,并负责插入和更新我在commentshello中的值,如果正确,请查看代码。。它有insert,它会保持数据库只存储一行/值吗???我添加的代码正确吗?如何在java中实现它。。当我从EditText获得数据时,我在下一个问题的问题中添加了一些内容,我不知道该怎么办
public void updateEmployeeName(String empNo,String new_empname) {
Cursor cursor = null;
String empName = "";
try {
cursor = SQLiteDatabaseInstance_.rawQuery("SELECT EmployeeName
FROM Employee WHERE EmpNo=?", new String[] {empNo + ""});
if(cursor.getCount() > 0) {
cursor.moveToFirst();
empName = cursor.getString(cursor.getColumnIndex("EmployeeName"));
update(empname);
}else{
update(new_empname);
}
}finally {
cursor.close();
}
}
**Update single value use this query:-**
public void update(){
ContentValues cv = new ContentValues();
cv.put(ColumnName, newValue);
db.update(TABLE_NAME, cv, Column + "= ?", new String[] {rowId});
}
**delete single value use this query:-**
public void delete_singlevalue(String newValue) {
SQLiteDatabase db = getWritableDatabase();
db.execSQL("delete from TABLE_NAME where
ColumnName="+"'"+newValue+"'");
db.close();
}