- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在 Android 上使用 SQLite 时遇到问题。我能够解析一个 XML 文件,然后创建一个数据库来存储内容。创建、插入工作正常。我可以在文件资源管理器中看到 .db 文件
我最后一次调用 checkDataBase() 返回 false ?!为什么?
我正在模拟器上开发 Android 2.3。
我做错了什么吗?
Activity :
public class MTGDBActivity extends Activity{
String currentDBPath = "data/data/rudy.jaumain.mtgdb/databases/MTGCards";
MTGContainerData mtgcd;
MTGDatabase mtgdb;
Button buttonEditions, buttonCollection, buttonDecks;
View v;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
this.mtgcd = new MTGContainerData(this);
if (!this.checkDataBase()) {
System.out.println("FILE DOESN'T EXIST");
this.mtgdb = new MTGDatabase(this);
this.mtgdb.open();
this.mtgcd.loadCards(this.mtgdb);
System.out.println("CARDS LOADED");
this.mtgdb.close();
}
else{
System.out.println("FILE DOES EXIST");
}
} catch (Exception e) {
System.out.println("FAIL");
}
System.out.println(this.checkDataBase());
this.setContentView(R.layout.main);
this.initialize();
}
private boolean checkDataBase() {
SQLiteDatabase checkDB = null;
try {
checkDB = SQLiteDatabase.openDatabase(currentDBPath, null,
SQLiteDatabase.OPEN_READONLY);
checkDB.close();
} catch (SQLiteException e) {
System.out.println("DATABASE DOES NOT EXIST");
}
return checkDB != null ? true : false;
}
public void initialize(){
try{
v = (View)this.findViewById(R.id.mainLayout);
v.setBackgroundColor(Color.WHITE);
this.buttonEditions = (Button)findViewById(R.id.buttonEdition);
this.buttonEditions.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
System.out.println("CLICKED");
Intent i = new Intent(v.getContext(), MTGDBEditionsActivity.class);
startActivityForResult(i,0);
}
});
this.buttonCollection = (Button)findViewById(R.id.buttonCollection);
this.buttonCollection.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
System.out.println("CLICKED");
Intent i = new Intent(v.getContext(), MTGDBCollectionActivity.class);
startActivityForResult(i,0);
}
});
this.buttonDecks = (Button)findViewById(R.id.buttonDecks);
this.buttonDecks.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
System.out.println("CLICKED");
Intent i = new Intent(v.getContext(), MTGDBDecksActivity.class);
startActivityForResult(i,0);
}
});
}
catch(Exception e1){
e1.printStackTrace();
}
}
}
数据库:
public class MTGDatabase{
private static final String TABLE_CARDS = "table_cards";
private static final String COL_ID = "ID";
private static final int NUM_COL_ID = 0;
private static final String COL_NAME = "NAME";
private static final int NUM_COL_NAME = 1;
private static final String COL_EDITION = "EDITION";
private static final int NUM_COL_EDITION = 2;
private static final String COL_RARITY = "RARITY";
private static final int NUM_COL_RARITY = 3;
private static final String COL_MANACOST = "MANACOST";
private static final int NUM_COL_MANACOST = 4;
private static final String COL_NUMBER = "NUMBER";
private static final int NUM_COL_NUMBER = 5;
private static final String COL_COLOR = "COLOR";
private static final int NUM_COL_COLOR = 6;
public int VERSION_BDD = 1;
private SQLiteDatabase sqldb;
private MTGDatabaseAdapter mtgbdAdapter;
public MTGDatabase(Context c) {
mtgbdAdapter = new MTGDatabaseAdapter(c, "MTGCards.db", null, VERSION_BDD);
}
public void open(){
sqldb = mtgbdAdapter.getWritableDatabase();
}
public void close(){
sqldb.close();
}
public SQLiteDatabase getDatabase(){
return sqldb;
}
public long insertCard(MTGCard card){
ContentValues values = new ContentValues();
values.put(COL_NAME, card.getName());
values.put(COL_EDITION, card.getEdition());
values.put(COL_RARITY, card.getRarity());
values.put(COL_MANACOST, card.getManacost());
values.put(COL_NUMBER, card.getNumber());
values.put(COL_COLOR, card.getColor());
return sqldb.insert(TABLE_CARDS, null, values);
}
public int updateCard(int id, MTGCard card){
ContentValues values = new ContentValues();
values.put(COL_NAME, card.getName());
values.put(COL_EDITION, card.getEdition());
values.put(COL_RARITY, card.getRarity());
values.put(COL_MANACOST, card.getManacost());
values.put(COL_NUMBER, card.getNumber());
values.put(COL_COLOR, card.getColor());
return sqldb.update(TABLE_CARDS, values, COL_ID + " = " +id, null);
}
public int removeCardWithID(int id){
return sqldb.delete(TABLE_CARDS, COL_ID + " = " +id, null);
}
public MTGCard getCardWithName(String name){
Cursor c = sqldb.query(TABLE_CARDS, new String[] {COL_ID, COL_NAME, COL_EDITION, COL_RARITY, COL_MANACOST, COL_NUMBER, COL_COLOR}, COL_NAME + " LIKE \"" + name +"\"", null, null, null, null);
return cursorToCard(c);
}
private MTGCard cursorToCard(Cursor c){
if (c.getCount() == 0)
return null;
c.moveToFirst();
MTGCard card = new MTGCard();
card.setId(c.getInt(NUM_COL_ID));
card.setName(c.getString(NUM_COL_NAME));
card.setEdition(c.getString(NUM_COL_EDITION));
card.setRarity(c.getString(NUM_COL_RARITY));
card.setManacost(c.getString(NUM_COL_MANACOST));
card.setNumber(c.getString(NUM_COL_NUMBER));
card.setColor(c.getString(NUM_COL_COLOR));
c.close();
return card;
}
}
数据库适配器:
public class MTGDatabaseAdapter extends SQLiteOpenHelper {
private static final String TABLE_CARDS = "table_cards";
private static final String COL_ID = "_ID";
private static final String COL_NAME = "NAME";
private static final String COL_EDITION = "EDITION";
private static final String COL_RARITY = "RARITY";
private static final String COL_MANACOST = "MANACOST";
private static final String COL_NUMBER = "NUMBER";
private static final String COL_COLOR = "COLOR";
private static final String CREATE_BDD = "CREATE TABLE "
+ TABLE_CARDS
+ " (" + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ COL_NAME + " TEXT NOT NULL, "
+ COL_EDITION + " TEXT NOT NULL, "
+ COL_RARITY + " TEXT NOT NULL, "
+ COL_MANACOST + " TEXT NOT NULL, "
+ COL_NUMBER + " TEXT NOT NULL, "
+ COL_COLOR + " TEXT NOT NULL);";
public MTGDatabaseAdapter(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(CREATE_BDD);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE " + TABLE_CARDS + ";");
onCreate(db);
}
}
最佳答案
我建议您使用 SQLiteOpenHelper 类:http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html
如果数据库不存在,此类将创建数据库,为此它将执行 onCreate()
方法中的代码,如果您扩展 SQLiteOpenHelper 类,您可以覆盖该方法。
您可以通过调用 getReadableDatabase()
和 getWritableDatabase()
方法来检索数据库实例。
关于Android 如何在启动时创建不存在的数据库,然后在下一次启动时检索它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10199283/
我的问题是如何在 python 中创建一个简单的数据库。我的例子是: User = { 'Name' : {'Firstname', 'Lastname'}, 'Address' : {'Street
我需要创建一个与远程数据库链接的应用程序! mysql 是最好的解决方案吗? Sqlite 是唯一的本地解决方案吗? 我使用下面的方法,我想知道它是否是最好的方法! NSString *evento
给定两台 MySQL 服务器,一台本地,一台远程。两者都有一个包含表 bohica 的数据库 foobar。本地服务器定义了用户 'myadmin'@'%' 和 'myadmin'@'localhos
我有以下灵活的搜索查询 Select {vt:code},{vt:productcode},{vw:code},{vw:productcode} from {abcd AS vt JOIN wxyz
好吧,我的电脑开始运行有点缓慢,所以我重置了 Windows,保留了我的文件。因为我的大脑还没有打开,所以我忘记事先备份我的 MySQL 数据库。我仍然拥有所有原始文件,因此我实际上仍然拥有数据库,但
如何将我的 Access 数据库 (.accdb) 转换为 SQLite 数据库 (.sqlite)? 请,任何帮助将不胜感激。 最佳答案 1)如果要转换 db 的结构,则应使用任何 DB 建模工具:
系统检查发现了一些问题: 警告:?:(mysql.W002)未为数据库连接“默认”设置 MySQL 严格模式 提示:MySQL 的严格模式通过将警告升级为错误来修复 MySQL 中的许多数据完整性问题
系统检查发现了一些问题: 警告:?:(mysql.W002)未为数据库连接“默认”设置 MySQL 严格模式 提示:MySQL 的严格模式通过将警告升级为错误来修复 MySQL 中的许多数据完整性问题
我想在相同的 phonegap 应用程序中使用 android 数据库。 更多说明: 我创建了 phonegap 应用程序,但 phonegap 应用程序不支持服务,所以我们已经在 java 中为 a
Time Tracker function clock() { var mytime = new Date(); var seconds
我需要在现有项目上实现一些事件的显示。我无法更改数据库结构。 在我的 Controller 中,我(从 ajax 请求)传递了一个时间戳,并且我需要显示之前的 8 个事件。因此,如果时间戳是(转换后)
我有一个可以收集和显示各种测量值的产品(不会详细介绍)。正如人们所期望的那样,显示部分是一个数据库+建立在其之上的网站(使用 Symfony)。 但是,我们可能还会创建一个 API 来向第三方公开数据
我们将 SQL Server 从 Azure VM 迁移到 Azure SQL 数据库。 Azure VM 为 DS2_V2、2 核、7GB RAM、最大 6400 IOPS Azure SQL 数据
我正在开发一个使用 MongoDB 数据库的程序,但我想问在通过 Java 执行 SQL 时是否可以使用内部数据库进行测试,例如 H2? 最佳答案 你可以尝试使用Testcontainers Test
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭 9 年前。 此问题似乎与 a specific programming problem, a sof
我正在尝试使用 MSI 身份验证(无需用户名和密码)从 Azure 机器学习服务连接 Azure SQL 数据库。 我正在尝试在 Azure 机器学习服务上建立机器学习模型,目的是我需要数据,这就是我
我在我的 MySQL 数据库中使用这个查询来查找 my_column 不为空的所有行: SELECT * FROM my_table WHERE my_column != ""; 不幸的是,许多行在
我有那个基地:http://sqlfiddle.com/#!2/e5a24/2这是 WordPress 默认模式的简写。我已经删除了该示例不需要的字段。 如您所见,我的结果是“类别 1”的两倍。我喜欢
我有一张这样的 table : mysql> select * from users; +--------+----------+------------+-----------+ | userid
我有表: CREATE TABLE IF NOT EXISTS `category` ( `id` int(11) NOT NULL, `name` varchar(255) NOT NULL
我是一名优秀的程序员,十分优秀!