Java SQLite Android Studio中插入数据的问题

Java SQLite Android Studio中插入数据的问题,java,android,android-studio,android-fragments,android-sqlite,Java,Android,Android Studio,Android Fragments,Android Sqlite,我在Android Studio中的应用程序还有一个问题。我尝试在“SQLite”中添加数据,从我的观点来看,代码似乎是正确的,因为我刚刚开始编程java。似乎有问题,没有向我显示消息“Added successfuly”,并且“setText=”“”不起作用 主java文件-“MainFragment” 谢谢 试试这个。这是我的代码。你可以根据需要更换 package com.softarena.alarmapplication.Database; import android.content

我在Android Studio中的应用程序还有一个问题。我尝试在“SQLite”中添加数据,从我的观点来看,代码似乎是正确的,因为我刚刚开始编程java。似乎有问题,没有向我显示消息“Added successfuly”,并且“setText=”“”不起作用

主java文件-“MainFragment”


谢谢

试试这个。这是我的代码。你可以根据需要更换

package com.softarena.alarmapplication.Database;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.softarena.alarmapplication.Models.AlarmModel;
import com.softarena.alarmapplication.Models.DaysModel;
import com.softarena.alarmapplication.Models.Fvt_dest_model;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;


public class MainDatabase extends SQLiteOpenHelper {
    public static final String DATABASE_NAME = "alarmapp.db";
    public static final int DATABASE_VERSION = 5;
    public static final String TABLE_ALARM = "Alarm";
    public static final String TABLE_DAYS = "weekDays";
    public static final String TABLE_FVT_DEST = "fvt_destination";
    public static final String COLUMN_ID = "id";
    public static final String COLUMN_ALARM_TIME = "alarmtime";
    public static final String COLUMN_ALARM_NAME = "alarmname";
    public static final String COLUMN_ALARM_TUNE = "alarmtune";
    public static final String COLUMN_START_LOC = "startloc";
    public static final String COLUMN_START_LOC_LatLong = "startlatlong";
    public static final String COLUMN_END_LOC = "endloc";
    public static final String COLUMN_END_LOC_LatLong = "endlatlong";
    public static final String COLUMN_TIME_TO_REACH = "timetoreach";
    public static final String COLUMN_START_COUNTRY = "startcountry";
    public static final String COLUMN_END_COUNTRY = "endcountry";
    public static final String COLUMN_RADIUS = "radius";
    public static final String COLUMN_SNOOZE_STATUS = "status";
    public static final String COLUMN_LAST_RING_DATE = "ringdate";
    public static final String COLUMN_TRANSPORT_TYPE = "travel_by";

  public static final String CREATE_TABLE_ALARM =
            "CREATE TABLE " + TABLE_ALARM + "("
                    + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                    + COLUMN_ALARM_TIME + " TEXT,"
                    + COLUMN_ALARM_NAME + " TEXT,"
                    + COLUMN_ALARM_TUNE + " TEXT,"
                    + COLUMN_START_LOC + " TEXT,"
                    + COLUMN_START_LOC_LatLong + " TEXT,"
                    + COLUMN_END_LOC + " TEXT,"
                    + COLUMN_END_LOC_LatLong + " TEXT,"
                    + COLUMN_TIME_TO_REACH + " TEXT,"
                    + COLUMN_START_COUNTRY + " TEXT,"
                    + COLUMN_END_COUNTRY + " TEXT,"
                    + COLUMN_RADIUS + " TEXT,"
                    + COLUMN_SNOOZE_STATUS + " TEXT,"
                    + COLUMN_LAST_RING_DATE + " TEXT, "
                    + COLUMN_TRANSPORT_TYPE + " TEXT "
                    + ")";


    public MainDatabase(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(CREATE_TABLE_ALARM);

    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_ALARM);
        onCreate(sqLiteDatabase);
    }

 public boolean adddatainalarm(String alarmTime, String alarmName, String alarmtune, String startLoc, String startlatlong, String endLoc, String endlatlong, String timetoReach, String startCountry, String endCountry, String Radius, String Status, String date,String travelby) {
        SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        boolean add = false;

        contentValues.put(COLUMN_ALARM_TIME, alarmTime);
        contentValues.put(COLUMN_ALARM_NAME, alarmName);
        contentValues.put(COLUMN_ALARM_TUNE, alarmtune);
        contentValues.put(COLUMN_START_LOC, startLoc);
        contentValues.put(COLUMN_START_LOC_LatLong, startlatlong);
        contentValues.put(COLUMN_END_LOC, endLoc);
        contentValues.put(COLUMN_END_LOC_LatLong, endlatlong);
        contentValues.put(COLUMN_TIME_TO_REACH, timetoReach);
        contentValues.put(COLUMN_START_COUNTRY, startCountry);
        contentValues.put(COLUMN_END_COUNTRY, endCountry);
        contentValues.put(COLUMN_RADIUS, Radius);
        contentValues.put(COLUMN_SNOOZE_STATUS, Status);
        contentValues.put(COLUMN_LAST_RING_DATE, date);
        contentValues.put(COLUMN_TRANSPORT_TYPE, travelby);

        try {
            Long result = sqLiteDatabase.insert(TABLE_ALARM, null, contentValues);

            if (result == -1) {
                add = false;

            } else {
                add = true;
                Log.d("Database : ", "Data add successfully");
            }


        } catch (Exception e) {
            Log.d("Database error : ", "" + e);
        }
        return add;
    }
}



从外观上看,您应该像下面这样使用
数据库.prepareStatement
语句.bindString

SQLiteStatement语句=database.prepareStatement(sql);
语句。clearBindings();
报表.集合字符串(1,alegemarca);
语句.设置字符串(2,型号);
报表.设置字符串(3,caroserie);
声明.设置管柱(4,可燃物);
报表.固定管柱(5,culoare);
声明.固定管柱(6,制造商);
报表.设置字符串(7,pret);
语句.setBytes(8,读取文件(图像));
语句。executeInsert();

PS:请注意,我已将您的
bindBlob
更改为
setBytes
,正如所说的那样

在日志猫中查找可能来自add
onClick()中的
catch
的堆栈跟踪。我想指出的是,您试图绑定的参数比您的
INSERT
语句中的占位符
多出几个,所以这是一个问题,但我们需要堆栈跟踪来确定它是否是当前参数。显然,不建议在命令中使用此类关联参数。您应该阅读教程,按照OP的方式进行操作,并对每个参数使用问号(?)。
package com.example.licenta23;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteStatement;

import androidx.annotation.Nullable;

public class SQLiteHelper extends SQLiteOpenHelper {

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

public void queryData(String sql){
    SQLiteDatabase database = getWritableDatabase();
    database.execSQL(sql);
}

public void insertData(String alegemarca, String model, String caroserie, String combustibil, String culoare, String fabricatie, String pret, byte[] image) {
    SQLiteDatabase database = getWritableDatabase();
    String sql = "INSERT INTO CAR VALUES (NULL, ?, ?, ?, ?, ?, ?, ?)";

    SQLiteStatement statement = database.compileStatement(sql);
    statement.clearBindings();

    statement.bindString(1, alegemarca);
    statement.bindString(2, model);
    statement.bindString(3, caroserie);
    statement.bindString(4, combustibil);
    statement.bindString(5, culoare);
    statement.bindString(6, fabricatie);
    statement.bindString(7, pret);
    statement.bindBlob(8, image);

    statement.executeInsert();
}

public Cursor getData(String sql){
    SQLiteDatabase database = getReadableDatabase();
    return database.rawQuery(sql, null);

}

@Override
public void onCreate(SQLiteDatabase db) {

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}
package com.softarena.alarmapplication.Database;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.softarena.alarmapplication.Models.AlarmModel;
import com.softarena.alarmapplication.Models.DaysModel;
import com.softarena.alarmapplication.Models.Fvt_dest_model;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;


public class MainDatabase extends SQLiteOpenHelper {
    public static final String DATABASE_NAME = "alarmapp.db";
    public static final int DATABASE_VERSION = 5;
    public static final String TABLE_ALARM = "Alarm";
    public static final String TABLE_DAYS = "weekDays";
    public static final String TABLE_FVT_DEST = "fvt_destination";
    public static final String COLUMN_ID = "id";
    public static final String COLUMN_ALARM_TIME = "alarmtime";
    public static final String COLUMN_ALARM_NAME = "alarmname";
    public static final String COLUMN_ALARM_TUNE = "alarmtune";
    public static final String COLUMN_START_LOC = "startloc";
    public static final String COLUMN_START_LOC_LatLong = "startlatlong";
    public static final String COLUMN_END_LOC = "endloc";
    public static final String COLUMN_END_LOC_LatLong = "endlatlong";
    public static final String COLUMN_TIME_TO_REACH = "timetoreach";
    public static final String COLUMN_START_COUNTRY = "startcountry";
    public static final String COLUMN_END_COUNTRY = "endcountry";
    public static final String COLUMN_RADIUS = "radius";
    public static final String COLUMN_SNOOZE_STATUS = "status";
    public static final String COLUMN_LAST_RING_DATE = "ringdate";
    public static final String COLUMN_TRANSPORT_TYPE = "travel_by";

  public static final String CREATE_TABLE_ALARM =
            "CREATE TABLE " + TABLE_ALARM + "("
                    + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                    + COLUMN_ALARM_TIME + " TEXT,"
                    + COLUMN_ALARM_NAME + " TEXT,"
                    + COLUMN_ALARM_TUNE + " TEXT,"
                    + COLUMN_START_LOC + " TEXT,"
                    + COLUMN_START_LOC_LatLong + " TEXT,"
                    + COLUMN_END_LOC + " TEXT,"
                    + COLUMN_END_LOC_LatLong + " TEXT,"
                    + COLUMN_TIME_TO_REACH + " TEXT,"
                    + COLUMN_START_COUNTRY + " TEXT,"
                    + COLUMN_END_COUNTRY + " TEXT,"
                    + COLUMN_RADIUS + " TEXT,"
                    + COLUMN_SNOOZE_STATUS + " TEXT,"
                    + COLUMN_LAST_RING_DATE + " TEXT, "
                    + COLUMN_TRANSPORT_TYPE + " TEXT "
                    + ")";


    public MainDatabase(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(CREATE_TABLE_ALARM);

    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_ALARM);
        onCreate(sqLiteDatabase);
    }

 public boolean adddatainalarm(String alarmTime, String alarmName, String alarmtune, String startLoc, String startlatlong, String endLoc, String endlatlong, String timetoReach, String startCountry, String endCountry, String Radius, String Status, String date,String travelby) {
        SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        boolean add = false;

        contentValues.put(COLUMN_ALARM_TIME, alarmTime);
        contentValues.put(COLUMN_ALARM_NAME, alarmName);
        contentValues.put(COLUMN_ALARM_TUNE, alarmtune);
        contentValues.put(COLUMN_START_LOC, startLoc);
        contentValues.put(COLUMN_START_LOC_LatLong, startlatlong);
        contentValues.put(COLUMN_END_LOC, endLoc);
        contentValues.put(COLUMN_END_LOC_LatLong, endlatlong);
        contentValues.put(COLUMN_TIME_TO_REACH, timetoReach);
        contentValues.put(COLUMN_START_COUNTRY, startCountry);
        contentValues.put(COLUMN_END_COUNTRY, endCountry);
        contentValues.put(COLUMN_RADIUS, Radius);
        contentValues.put(COLUMN_SNOOZE_STATUS, Status);
        contentValues.put(COLUMN_LAST_RING_DATE, date);
        contentValues.put(COLUMN_TRANSPORT_TYPE, travelby);

        try {
            Long result = sqLiteDatabase.insert(TABLE_ALARM, null, contentValues);

            if (result == -1) {
                add = false;

            } else {
                add = true;
                Log.d("Database : ", "Data add successfully");
            }


        } catch (Exception e) {
            Log.d("Database error : ", "" + e);
        }
        return add;
    }
}