static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE IF NOT EXISTS `invoice` (`invoice_id` VARCHAR, "
+ "`terminal_no` VARCHAR NOT NULL, `cashier_name` TEXT, PRIMARY KEY(`invoice_id`))");
}
};
Room.databaseBuilder(context.getApplicationContext(),
POSDatabase.class,
"pos_database").addMigrations(MIGRATION_1_2).build();
package com.example.qrreceipt;
import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity(tableName = "item")
public class Item {
@PrimaryKey
@NonNull
@ColumnInfo(name = "item_id")
private String item_id;
@ColumnInfo(name = "description")
private String description;
@ColumnInfo(name = "price")
private double price;
public Item() { }
@NonNull
public String getItem_id() {
return item_id;
}
public String getDescription() {
return description;
}
public double getPrice() {
return price;
}
public void setItem_id(@NonNull String item_id) {
this.item_id = item_id;
}
public void setDescription(String description) {
this.description = description;
}
public void setPrice(double price) {
this.price = price;
}
}
itemdao.java
package com.example.qrreceipt;
import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;
import java.util.List;
@Dao
public interface ItemDao {
@Insert
void insertItem(Item item);
@Update
void updateItem(Item item);
@Query("SELECT * FROM item WHERE item_id = :item_id")
List<Item> findItem(String item_id);
@Query("SELECT * FROM item")
List<Item> getAllItems();
@Query("DELETE FROM item WHERE item_id = :item_id")
void deleteItem(String item_id);
}
posDatabase.java
package com.example.qrreceipt;
import android.content.Context;
import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
import androidx.room.migration.Migration;
import androidx.sqlite.db.SupportSQLiteDatabase;
@Database(entities = {Item.class, Invoice.class}, version = 2, exportSchema = false)
public abstract class POSDatabase extends RoomDatabase {
public abstract ItemDao getItemDAO();
public abstract InvoiceDao getInvoiceDAO();
private static POSDatabase INSTANCE;
static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE IF NOT EXISTS `invoice` (`invoice_id` VARCHAR, "
+ "`terminal_no` VARCHAR NOT NULL, `cashier_name` TEXT, PRIMARY KEY(`invoice_id`))");
}
};
static POSDatabase getDatabase(final Context context) {
if (INSTANCE == null) {
synchronized (POSDatabase.class) {
if (INSTANCE == null) {
INSTANCE =
Room.databaseBuilder(context.getApplicationContext(),
POSDatabase.class,
"pos_database").addMigrations(MIGRATION_1_2).build();
}
}
}
return INSTANCE;
}
}
invoice.java
package com.example.qrreceipt;
import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity(tableName = "invoice")
public class Invoice {
@PrimaryKey
@NonNull
@ColumnInfo(name = "invoice_id")
private String invoice_id;
//private Date date;
@ColumnInfo(name = "terminal_no")
private String terminal_no;
@ColumnInfo(name = "cashier_name")
private String cashier_name;
public Invoice() { }
@NonNull
public String getInvoice_id() {
return invoice_id;
}
public String getTerminal_no() {
return terminal_no;
}
public String getCashier_name() {
return cashier_name;
}
public void setInvoice_id(@NonNull String invoice_id) {
this.invoice_id = invoice_id;
}
public void setTerminal_no(String terminal_no) {
this.terminal_no = terminal_no;
}
public void setCashier_name(String cashier_name) {
this.cashier_name = cashier_name;
}
}
package com.example.qrreceipt;
import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;
import java.util.List;
@Dao
public interface InvoiceDao {
@Insert
void insertInvoice(Invoice invoice);
@Update
void updateInvoice(Invoice invoice);
@Query("SELECT * FROM invoice WHERE invoice_id = :invoice_id")
List<Item> findInvoice(String invoice_id);
@Query("SELECT * FROM invoice")
List<Item> getAllInvoices();
@Query("DELETE FROM invoice WHERE invoice_id = :invoice_id")
void deleteInvoice(String invoice_id);
}
错误:错误:查询返回的列在com.example.qrreceipt.Item中没有字段[item_id,price],即使它们被注释为非空或原语。查询返回的列:[invoice_id,terminal_no,cashier_name]
您当前的问题是,您正试图从发票表中获取项目。
这就是下面所说的:-
错误:查询返回的列在com.example.qrreceipt.Item中没有字段[item_id,price],即使它们被注释为非空或原语。查询返回的列:[invoice_id,terminal_no,cashier_name]
@Query("SELECT * FROM invoice WHERE invoice_id = :invoice_id")
List<Invoice> findInvoice(String invoice_id);
@Query("SELECT * FROM invoice")
List<Invoice> getAllInvoices();
使用:-
database.execSQL("CREATE TABLE IF NOT EXISTS `invoice` (`invoice_id` TEXT NOT NULL, "
+ "`terminal_no` TEXT NOT NULL, `cashier_name` TEXT, PRIMARY KEY(`invoice_id`))");
连同:-
@Entity(tableName = "invoice")
public class Invoice {
@PrimaryKey
@NonNull
@ColumnInfo(name = "invoice_id")
private String invoice_id;
//private Date date;
@NonNull
@ColumnInfo(name = "terminal_no")
private String terminal_no;
@ColumnInfo(name = "cashier_name")
private String cashier_name;
public Invoice() { }
@NonNull
public String getInvoice_id() {
return invoice_id;
}
public String getTerminal_no() {
return terminal_no;
}
public String getCashier_name() {
return cashier_name;
}
public void setInvoice_id(@NonNull String invoice_id) {
this.invoice_id = invoice_id;
}
public void setTerminal_no(String terminal_no) {
this.terminal_no = terminal_no;
}
public void setCashier_name(String cashier_name) {
this.cashier_name = cashier_name;
}
}
应该管用。
我定义了多个记录器,如下所示(com.xyz和org.xyz)。Log4j2忽略了第一个记录器定义,只加载第二个。在示例中,org.xyz未加载。 在log4j2调试消息下方查找。 我的配置正确吗?
问题内容: jQuery是否有任何语法方法来定义多个CSS属性,而无需像这样将所有内容都放在右边: 如果您有20条这样的代码,那么您将很难阅读,有什么解决方案吗? 例如,通过jQuery API,jQuery可以理解并返回正确的值 和 请注意,对于DOM表示法,属性名称周围的引号是 可选的 ,但对于CSS表示法,由于名称中的连字符,因此 必须 使用引号。 问题答案: 即使您有1个或更多,也最好只使
我们正在使用PACT库进行合同测试。当前项目依赖于junit5集成。我必须扩展一个测试,使用2个提供者,而不是1: 当前版本: 我查看了发布说明,没有发现任何更新。是否有其他方法如何定义另一个提供程序?如: 或者在这种情况下junit5集成不是一个好的选择?
我需要实现我的自定义DefaultComboxModel。这样做的原因是每次我打电话给 或者 或者 我看到它自动触发一个项目状态更改事件。这会导致一些随机项目自动从列表中选择。这不是我想要的,因为它用随机选择的项目填充可编辑的JTextField。 这是我在使用我的自定义Itemlistener中的Thread.dumpStack()进行调试时看到的stacktrace,它是我在调用上述方法时看到
类是用于描述事物的的属性和行为的,而 Go 语言中的结构体正好可以用于描述事物的属性和行为 所以在 Go 语言中我们使用结构体来定义一个类型 type Person struct { name string // 人的属性 age int // 人的属性 } // 人的行为 func (p Person)Say() { fmt.Println("my name