有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java初级SQLite Android应用程序无打印结果

此应用程序可以运行,但无法打印数据库中的数据, 我也不知道数据是否可以插入

这是主要的活动。爪哇

package com.zikri.sqlitetuto3;
import 安卓.support.v7.app.AppCompatActivity;
import 安卓.os.Bundle;
import 安卓.view.View;
import 安卓.widget.Button;
import 安卓.widget.EditText;
import 安卓.widget.TextView;

public class MainActivity extends AppCompatActivity {

EditText dataET;
Button addB, delB;
TextView dataTV;
MyDBHandler dbHandler;
String getProduct;
Products products;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    startAndroidApp();
}

public void startAndroidApp(){
    dbHandler = new MyDBHandler(this,null,null,1);
    dataET = (EditText) findViewById(R.id.dataET);
    addB = (Button) findViewById(R.id.addB);
    delB = (Button) findViewById(R.id.delB);
    dataTV = (TextView) findViewById(R.id.dataTV);

    getProduct = dataET.getText().toString();

    PrintProduct();

    addB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AddProduct(getProduct);
        }
    });

    delB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            DelProduct(getProduct);
        }
    });


}

public void PrintProduct(){
    dataTV.setText(dbHandler.PrintProduct());
    dataET.setText("");
}

public void AddProduct(String p){
    products = new Products(p);
    dbHandler.AddProduct(products);
    PrintProduct();
}

public void DelProduct(String p){
    dbHandler.DelProduct(p);
    PrintProduct();
    }
}

这是MyDBHandler。爪哇

package com.zikri.sqlitetuto3;

import 安卓.content.ContentValues;
import 安卓.content.Context;
import 安卓.database.Cursor;
import 安卓.database.sqlite.SQLiteDatabase;
import 安卓.database.sqlite.SQLiteOpenHelper;


public class MyDBHandler extends SQLiteOpenHelper {

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "products.db";
private static final String PRODUCT_TABLE = "product";
private static final String COL_ID = "id";
private static final String COL_PRODUCTNAME = "product_name";

public MyDBHandler(Context context, 
String name,SQLiteDatabase.CursorFactory factory, int version) {
    super(context, name, factory, version);
}

@Override
public void onCreate(SQLiteDatabase db){
    String query = "CREATE TABLE "+PRODUCT_TABLE+" ("+
                    COL_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+
                    COL_PRODUCTNAME+" TEXT"+");";
    db.execSQL(query);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
    String query = "DROP IF EXIST "+PRODUCT_TABLE;
    db.execSQL(query);
    onCreate(db);
}

public void AddProduct(Products products){
    SQLiteDatabase db = getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(COL_PRODUCTNAME,products.get_productname());
    db.insert(PRODUCT_TABLE,null,values);
    db.close();
}

public void DelProduct(String product){
    SQLiteDatabase db = getWritableDatabase();
    String query = "DELETE FROM "+PRODUCT_TABLE+
                    "WHERE "+COL_PRODUCTNAME+" = "+product+";";
    db.execSQL(query);
    db.close();
}

public String PrintProduct(){
    SQLiteDatabase db = getWritableDatabase();
    String printproductstring = "";
    String query = "SELECT * FROM "+PRODUCT_TABLE+";";
    Cursor cur = db.rawQuery(query,null);

    cur.moveToFirst();

    while(cur.moveToNext()){
    printproductstring = 
    printproductstring+cur.getString(cur.getColumnIndex("product_name"));
    printproductstring = printproductstring + "\n";
    }
    db.close();
    return printproductstring;
    }
}

这是我们的产品。爪哇

package com.zikri.sqlitetuto3;

public class Products {

private int _ID;
private String _productname;

public Products() {}
public Products(String productname) {
    this._productname = productname;
}

public void set_ID(int _ID) {
    this._ID = _ID;
}
public int get_ID() {
    return _ID;
}

public void set_productname(String _productname) {
    this._productname = _productname;
}

public String get_productname() {
    return _productname;
}

}

这是我们的主要活动。xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:安卓=
"http://schemas.安卓.com/apk/res/安卓"
xmlns:tools="http://schemas.安卓.com/tools"
安卓:id="@+id/activity_main"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
安卓:paddingBottom="@dimen/activity_vertical_margin"
安卓:paddingLeft="@dimen/activity_horizontal_margin"
安卓:paddingRight="@dimen/activity_horizontal_margin"
安卓:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.zikri.sqlitetuto3.MainActivity">

<EditText
    安卓:layout_width="match_parent"
    安卓:layout_height="wrap_content"
    安卓:inputType="textPersonName"
    安卓:ems="10"
    安卓:layout_alignParentTop="true"
    安卓:layout_alignParentLeft="true"
    安卓:layout_alignParentStart="true"
    安卓:id="@+id/dataET" />

<Button
    安卓:text="INSERT"
    安卓:layout_width="match_parent"
    安卓:layout_height="wrap_content"
    安卓:layout_below="@+id/dataET"
    安卓:layout_alignParentLeft="true"
    安卓:layout_alignParentStart="true"
    安卓:id="@+id/addB" />

<Button
    安卓:text="Delete"
    安卓:layout_width="match_parent"
    安卓:layout_height="wrap_content"
    安卓:layout_below="@+id/addB"
    安卓:layout_alignParentLeft="true"
    安卓:layout_alignParentStart="true"
    安卓:id="@+id/delB" />

<TextView
    安卓:text="TextView"
    安卓:layout_width="wrap_content"
    安卓:layout_height="wrap_content"
    安卓:layout_centerVertical="true"
    安卓:layout_centerHorizontal="true"
    安卓:id="@+id/dataTV" />


共 (2) 个答案

  1. # 1 楼答案

    您应该在buttonclicked时进行输入,否则getProduct将始终为空

     addB.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getProduct = dataET.getText().toString();
                // ^^^ fetch value when button is clicked
                AddProduct(getProduct);
            }
        });
    

    并在删除时执行相同的操作

    delB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            getProduct = dataET.getText().toString();
            // ^^^ fetch value when button is clicked
            DelProduct(getProduct);
        }
    });
    

    此外,您可以通过^{}return value确认数据的成功插入,它是long类型,定义为

    the row ID of the newly inserted row, or -1 if an error occurred

    所以使用它

     long id = db.insert(PRODUCT_TABLE,null,values);
     // you can now check the value of id through Logs or Toast 
     db.close();
    
  2. # 2 楼答案

    在android中很难看到数据库是否被关闭,若并没有错误,你们可以在logcate上看到eror,这意味着它被存储了,但不是每次都被存储。如果你还想,你必须在Device manager中看到它很难找到另一个解决方案tack one root mobile and Intral root brouser转到android文件夹中的android文件夹转到android文件夹中的dada再次转到数据,然后是包名,然后是数据库,然后查看与数据库相关的任何文件将此文件复制到pc并下载sqllitebrouser。通过这个漫长的过程,您将有100%的机会获得数据库文件。如果它是创建的