Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.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 在Android应用程序中创建SQLite数据库中的两个表_Java_Android_Sqlite - Fatal编程技术网

Java 在Android应用程序中创建SQLite数据库中的两个表

Java 在Android应用程序中创建SQLite数据库中的两个表,java,android,sqlite,Java,Android,Sqlite,我试图在Android应用程序中的SQLite数据库中创建两个表,但它显示了以下错误。基本上,我试图创建的第二个表不会被创建。任何帮助都将不胜感激 这是我得到的错误: 02-22 09:16:33.005 22404-22404/proed.hotelbooking E/SQLiteLog: (1) no such table: room 02-22 09:16:33.007 22404-22404/proed.hotelbooking E/SQLiteDatabase: Error ins

我试图在Android应用程序中的SQLite数据库中创建两个表,但它显示了以下错误。基本上,我试图创建的第二个表不会被创建。任何帮助都将不胜感激

这是我得到的错误:

02-22 09:16:33.005 22404-22404/proed.hotelbooking E/SQLiteLog: (1) no such table: room 02-22 09:16:33.007 22404-22404/proed.hotelbooking
  E/SQLiteDatabase: Error inserting room_id=1 room_price=1000 room_type=Single hotel_id=1
  android.database.sqlite.SQLiteException: no such table: room (code 1): ,
    while compiling: INSERT INTO room(room_id,room_price,room_type,hotel_id) VALUES (?,?,?,?)
    at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
    at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
    at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
    at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
    at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
    at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1472)
    at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1343)
    at proed.hotelbooking.HotelDatabaseHelper.insertRoom(HotelDatabaseHelper.java:70)
    at proed.hotelbooking.RoomInfoActivity.onRoomButtonClick(RoomInfoActivity.java:42)
    at java.lang.reflect.Method.invoke(Native Method)
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
    at android.view.View.performClick(View.java:6256)
    at android.view.View$PerformClick.run(View.java:24701)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6541)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
这是我要插入数据的类:

public class RoomInfoActivity extends AppCompatActivity {
    HotelDatabaseHelper helper = new HotelDatabaseHelper(this);
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_room_info);
    }

    public void onRoomButtonClick(View v)
    {
        if (v.getId()==R.id.addRoom) {
            EditText id = findViewById(R.id.roomId);
            EditText type = findViewById(R.id.roomType);
            EditText price = findViewById(R.id.roomPrice);
            EditText hotel_id = findViewById(R.id.hotelID);

            String room_id = id.getText().toString();
            String room_type = type.getText().toString();
            String room_price = price.getText().toString();
            String hotelID = hotel_id.getText().toString();

            if (TextUtils.isEmpty(room_id) || TextUtils.isEmpty(room_type) || TextUtils.isEmpty(room_price) || TextUtils.isEmpty(hotelID)) {
                Toast.makeText(this, "Please do not leave any field blank! ", Toast.LENGTH_SHORT).show();
                return;
            } else {
                Hotels hotels = new Hotels();
                hotels.setRoom_id(room_id);
                hotels.setRoom_price(room_price);
                hotels.setRoom_type(room_type);
                hotels.setHotel_id(hotelID);

                helper.insertRoom(hotels);
                //Toast.makeText(this, "Data Added To The Database", Toast.LENGTH_SHORT).show();
            }
        }
    }

    public void onViewRoomButtonClick(View view)
    {
        if (view.getId()==R.id.viewRoom)
        {
            Intent intent = new Intent(RoomInfoActivity.this, ViewRoomContents.class);
            startActivity(intent);
        }
    }
}

我已经检查了你的DatabaseHelper,它没有问题。 你能展示init数据库的代码并插入数据吗?
问题可能来自初始步骤。

如果修改了数据库,例如添加/删除表/列,则需要 从模拟器/设备卸载应用程序,然后重新安装


如果不起作用,只需转到
文件
并单击
使缓存无效/重新启动

我已添加插入数据的代码。您能看一下并告诉我可能有什么问题吗?insert语句中没有问题。问题是varchar datatypevarchar不是问题。代码运行良好。我认为您需要删除所有应用程序数据,然后重试。如果您使用的是android M或更高版本,请添加android:allowBackup=false以显示并重新安装应用程序Qlite不支持VARCHAR数据类型请将其更改为TEXT我将其更改为TEXT,但仍不工作。虽然数据类型是VARCHAR,但是创建了第一个表“hotel”,并且工作正常。尝试创建第二个表“房间”时出现问题。在表中进行更改后是否增加了数据库的版本?@Ganesh确实如此。长度只是不强制执行。请注意,对于简单的数据库访问,不再建议使用SQLiteOpenHepler
public class RoomInfoActivity extends AppCompatActivity {
    HotelDatabaseHelper helper = new HotelDatabaseHelper(this);
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_room_info);
    }

    public void onRoomButtonClick(View v)
    {
        if (v.getId()==R.id.addRoom) {
            EditText id = findViewById(R.id.roomId);
            EditText type = findViewById(R.id.roomType);
            EditText price = findViewById(R.id.roomPrice);
            EditText hotel_id = findViewById(R.id.hotelID);

            String room_id = id.getText().toString();
            String room_type = type.getText().toString();
            String room_price = price.getText().toString();
            String hotelID = hotel_id.getText().toString();

            if (TextUtils.isEmpty(room_id) || TextUtils.isEmpty(room_type) || TextUtils.isEmpty(room_price) || TextUtils.isEmpty(hotelID)) {
                Toast.makeText(this, "Please do not leave any field blank! ", Toast.LENGTH_SHORT).show();
                return;
            } else {
                Hotels hotels = new Hotels();
                hotels.setRoom_id(room_id);
                hotels.setRoom_price(room_price);
                hotels.setRoom_type(room_type);
                hotels.setHotel_id(hotelID);

                helper.insertRoom(hotels);
                //Toast.makeText(this, "Data Added To The Database", Toast.LENGTH_SHORT).show();
            }
        }
    }

    public void onViewRoomButtonClick(View view)
    {
        if (view.getId()==R.id.viewRoom)
        {
            Intent intent = new Intent(RoomInfoActivity.this, ViewRoomContents.class);
            startActivity(intent);
        }
    }
}