Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQLiteDatabase:Android studio自定义自动增量_Java_Android_Sql_Sqlite_Android Studio - Fatal编程技术网

Java SQLiteDatabase:Android studio自定义自动增量

Java SQLiteDatabase:Android studio自定义自动增量,java,android,sql,sqlite,android-studio,Java,Android,Sql,Sqlite,Android Studio,我对Android studio和SQLITE数据库非常陌生。我需要以下方面的帮助: 数据库已成功创建并可以显示值。但是,我尝试在创建时为每个患者创建一个自定义的唯一ID。ID应该在000000到999999之间(6位唯一ID) 该应用程序的工作方式是: 1. User can "add patient" 2. User enters firstName and lastName 3. User than selects a department from a spinner 4. once t

我对Android studio和SQLITE数据库非常陌生。我需要以下方面的帮助:

数据库已成功创建并可以显示值。但是,我尝试在创建时为每个患者创建一个自定义的唯一ID。ID应该在000000到999999之间(6位唯一ID)

该应用程序的工作方式是:

1. User can "add patient"
2. User enters firstName and lastName
3. User than selects a department from a spinner
4. once the user has completed the above steps, he/she can click "Add Patient"
5. Then the values are displayed in a TabbedView, however the textView is horizontal rather than vertical.
6. and its displayed in a ListView
我已经完成了上述所有步骤。我现在需要帮助为患者创建一个唯一的id。任何帮助都将不胜感激

请查看下面的代码:

PatientDbHelper.java // Creates the tables and database

package tanav.sharma;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

/**
 * Created by Tanav on 11/4/2016.
 */
public class PatientDbHelper extends SQLiteOpenHelper {


    private static final String DATABASE_NAME = "PATIENTINFO.db";
    private static final int DATABASE_VERSION = 1;

    private static final String CREATE_QUERY =
            "CREATE TABLE "+PatientInfo.NewPatientInfo.TABLE_NAME+" ("+ PatientInfo.NewPatientInfo.PATIENT_FNAME+ " TEXT,"+PatientInfo.NewPatientInfo.PATIENT_LNAME+" TEXT,"+PatientInfo.NewPatientInfo.PATIENT_DEPARTMENT+" TEXT);";

    public PatientDbHelper(Context context){

        super(context,DATABASE_NAME,null,DATABASE_VERSION);
        Log.e("DATABASE OPERATIONS","Database created / opened ...");
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_QUERY);
        Log.e("DATABASE OPERATIONS","Table created...");

    }

    public void addInformations(String fname, String lname, String department, SQLiteDatabase db){

        ContentValues contentValues = new ContentValues();
        contentValues.put(PatientInfo.NewPatientInfo.PATIENT_FNAME,fname);
        contentValues.put(PatientInfo.NewPatientInfo.PATIENT_LNAME,lname);
        contentValues.put(PatientInfo.NewPatientInfo.PATIENT_DEPARTMENT,department);

        db.insert(PatientInfo.NewPatientInfo.TABLE_NAME, null,contentValues);

        Log.e("DATABASE OPERATIONS","One in row inserted...");
    }

    public Cursor getInformations(SQLiteDatabase db){
        Cursor cursor;
        String[] projections = {PatientInfo.NewPatientInfo.PATIENT_FNAME, PatientInfo.NewPatientInfo.PATIENT_LNAME, PatientInfo.NewPatientInfo.PATIENT_DEPARTMENT};
        cursor = db.query(PatientInfo.NewPatientInfo.TABLE_NAME,projections,null,null,null,null,null);
        return cursor;
    }

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

    }
}
PatientInfo.java//这是列等的名称

package tanav.sharma;

/**
 * Created by Tanav on 11/4/2016.
 */
public class PatientInfo {

    public static abstract class NewPatientInfo{

        //public static final String PATIENT_ID = "patient_id";
        public static final String PATIENT_FNAME = "patient_fname";
        public static final String PATIENT_LNAME = "patient_lname";
        public static final String PATIENT_DEPARTMENT = "patient_department";

        public static final String TABLE_NAME = "patient_info";
    }
}
PatientInfoProvider.java

 package tanav.sharma;

    /**
     * Created by Tanav on 11/4/2016.
     */

public class PatientInfoProvider  {

        private String fname;
        private String lname;
        private String departments;

        public PatientInfoProvider(String fname, String lname, String departments){

            this.fname = fname;
            this.lname = lname;
            this.departments = departments;
        }

        public String getLname() {
            return lname;
        }

        public void setLname(String lname) {
            this.lname = lname;
        }

        public String getDepartments() {
            return departments;
        }

        public void setDepartments(String departments) {
            this.departments = departments;
        }

        public String getFname() {
            return fname;
        }

        public void setFname(String fname) {
            this.fname = fname;
        }
    }
以下文件用于在具有customText视图的listView中显示值

PatientAdapter.java

package tanav.sharma;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Tanav on 11/4/2016.
 */
public class PatientAdapter extends ArrayAdapter {

    List list = new ArrayList();


    public PatientAdapter(Context context, int resource) {
        super(context, resource);
    }

    static class LayoutHandler{
        TextView FNAME,LNAME,Department;
    }

    @Override
    public void add(Object object) {
        super.add(object);
        list.add(object);
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        LayoutHandler layoutHandler;
        if(row == null){
            LayoutInflater layoutInflater = (LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = layoutInflater.inflate(R.layout.display_all_patients,parent,false);

            layoutHandler = new LayoutHandler();
            layoutHandler.FNAME = (TextView)row.findViewById(R.id.patientNameFirst);
            layoutHandler.LNAME = (TextView)row.findViewById(R.id.patientNameLast);
            layoutHandler.Department = (TextView) row.findViewById(R.id.patientDepartment);

            row.setTag(layoutHandler);

        }else{
            layoutHandler = (LayoutHandler)row.getTag();

        }

        PatientInfoProvider patientInfoProvider = (PatientInfoProvider)this.getItem(position);
        layoutHandler.FNAME.setText(patientInfoProvider.getFname());
        layoutHandler.LNAME.setText(patientInfoProvider.getLname());
        layoutHandler.Department.setText(patientInfoProvider.getDepartments());

        return row;
    }
}

1-通过java中的random()类生成一个随机数。
2-如果此编号存在,则在数据库中搜索生成新编号如果不存在,则插入具有此编号的数据


注意:字段ID是主字段,但不是在自动递增中

自动增量的目的是防止重用以前删除的行的ID

PatientInfo.java ID列必须是表的第一列:

public static final String PATIENT_ID = "_id";
PatientDbHelper.java

private static final String CREATE_QUERY = "CREATE TABLE " + PatientInfo.NewPatientInfo.TABLE_NAME + " ("
+ PatientInfo.NewPatientInfo.PATIENT_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ PatientInfo.NewPatientInfo.PATIENT_FNAME+ " TEXT,"
+ PatientInfo.NewPatientInfo.PATIENT_LNAME+" TEXT,"
+ PatientInfo.NewPatientInfo.PATIENT_DEPARTMENT+" TEXT);";
补充资料()


PatientInfoProvider.java

private int id;

或/或更改构造函数

public PatientInfoProvider(int id, String fname, String lname, String departments){
this.id = id;
this.fname = fname;
this.lname = lname;
this.departments = departments; }
你必须在某个地方填写ID字段。如果需要,我可以将整个PatientInfoProvider.java

 package tanav.sharma;

    /**
     * Created by Tanav on 11/4/2016.
     */

public class PatientInfoProvider  {

        private String fname;
        private String lname;
        private String departments;

        public PatientInfoProvider(String fname, String lname, String departments){

            this.fname = fname;
            this.lname = lname;
            this.departments = departments;
        }

        public String getLname() {
            return lname;
        }

        public void setLname(String lname) {
            this.lname = lname;
        }

        public String getDepartments() {
            return departments;
        }

        public void setDepartments(String departments) {
            this.departments = departments;
        }

        public String getFname() {
            return fname;
        }

        public void setFname(String fname) {
            this.fname = fname;
        }
    }
好的,那么我的附加信息()会像这样吗

public void addInformations(int id, String fname, String lname, String department, SQLiteDatabase db){

        ContentValues contentValues = new ContentValues();
        if ( id != 0 ) contentValues.put(PatientInfo.NewPatientInfo.PATIENT_ID, id);
        contentValues.put(PatientInfo.NewPatientInfo.PATIENT_FNAME,fname);
        contentValues.put(PatientInfo.NewPatientInfo.PATIENT_LNAME,lname);
        contentValues.put(PatientInfo.NewPatientInfo.PATIENT_DEPARTMENT,department);


        db.insert(PatientInfo.NewPatientInfo.TABLE_NAME, null,contentValues);

        Log.e("DATABASE OPERATIONS","One in row inserted...");
    }
此外,它还提供了以下错误:

Error:(50, 28) error: method addInformations in class PatientDbHelper cannot be applied to given types;
required: int,String,String,String,SQLiteDatabase
found: String,String,String,SQLiteDatabase
reason: actual and formal argument lists differ in length
因此,我尝试通过在代码中应用以下行来修复它

public void addPatient(View view){

    int id; // Added this line
    String fname = PatientFirstName.getText().toString();
    String lname = PatientLastName.getText().toString();
    String dept = departments.getSelectedItem().toString();

    patientDbHelper = new PatientDbHelper(this);
    sqLiteDatabase = patientDbHelper.getWritableDatabase();
    patientDbHelper.addInformations(id,fname,lname,dept,sqLiteDatabase); //added 'id' in arguments..
    Toast.makeText(getBaseContext(),"Data Saved",Toast.LENGTH_LONG).show();
    patientDbHelper.close();

}
然而,addInformations中的'id'参数带有红色下划线,表示变量可能尚未初始化


我已经把一切都修好了:)

。选中_ID。您可以使用
BaseColumns.\u ID
并使其成为
INTEGER NOT NULL主键
我将把它放在哪里?在my PatientDbHelper?yes
“创建表”+PatientInfo.NewPatientInfo.TABLE_NAME+”(“+BaseColumns._ID+”整数非空主键,”…
好的。有没有办法我可以亲自给你发消息?我还有更多的问题。你可以加入stackoverflow上的聊天室。但是有一些规则需要遵守。你需要问一个新问题,可以吗?我真的需要帮助,我已经4天没有了。我需要另外两个文件才能确定。方法AddInformation()在某个地方调用。有创建新唯一ID的最佳位置。在创建新唯一ID之前,您需要知道当前的最大ID。我也需要此文件来帮助您。否则,您可以将整个项目发送给我。>但是,AddInformation中的“ID”参数带有红色下划线,表示变量可能不是初始变量izedYes,您需要初始化变量“id”。Lool,我最终找到了答案。非常感谢您的帮助
public void addPatient(View view){

    int id; // Added this line
    String fname = PatientFirstName.getText().toString();
    String lname = PatientLastName.getText().toString();
    String dept = departments.getSelectedItem().toString();

    patientDbHelper = new PatientDbHelper(this);
    sqLiteDatabase = patientDbHelper.getWritableDatabase();
    patientDbHelper.addInformations(id,fname,lname,dept,sqLiteDatabase); //added 'id' in arguments..
    Toast.makeText(getBaseContext(),"Data Saved",Toast.LENGTH_LONG).show();
    patientDbHelper.close();

}