- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试创建一个包含 2 个不同表的数据库,一个可读,一个可写。用户将从可读表中获取信息并将他们的印象写入可写表(或者我希望如此)。日志类是由不同条目组成的日志。由于我希望预先填充可读数据库,因此我使用的是 SQLiteAssetHelper。我在 SQLite 数据库浏览器中创建了 2 个表(一个可读,一个可写)。每个都有与下面 Java 代码中相同的表和字段。我将 .zip 复制到 Assets /数据库文件夹中。但是,当我运行该应用程序时,我收到错误消息,提示写入数据库时出现问题。如何使用 AssetHelper 写入数据库?
提前致谢!
04-30 23:23:25.454: D/memalloc(30092): ion: Unmapping buffer base:0x536ba000 size:3768320
04-30 23:23:25.454: D/memalloc(30092): ion: Unmapping buffer base:0x53fd9000 size:3768320
04-30 23:23:25.454: D/memalloc(30092): ion: Unmapping buffer base:0x52823000 size:3768320
04-30 23:23:25.484: W/IInputConnectionWrapper(30092): showStatusIcon on inactive InputConnection
04-30 23:23:25.484: W/IInputConnectionWrapper(30092): InputConnection = com.android.internal.widget.EditableInputConnection@40f3d390, active client = false
04-30 23:23:25.494: D/OpenGLRenderer(30092): Flushing caches (mode 1)
04-30 23:23:33.472: D/dalvikvm(30931): GC_FOR_ALLOC freed 73K, 23% free 2943K/3807K, paused 36ms
04-30 23:23:33.482: I/dalvikvm-heap(30931): Grow heap (frag case) to 4.026MB for 1146096-byte allocation
04-30 23:23:33.542: D/dalvikvm(30931): GC_FOR_ALLOC freed 1K, 19% free 4060K/4963K, paused 15ms
04-30 23:23:33.612: D/libEGL(30931): loaded /system/lib/egl/libGLES_android.so
04-30 23:23:33.612: D/libEGL(30931): loaded /system/lib/egl/libEGL_adreno200.so
04-30 23:23:33.622: D/libEGL(30931): loaded /system/lib/egl/libGLESv1_CM_adreno200.so
04-30 23:23:33.622: D/libEGL(30931): loaded /system/lib/egl/libGLESv2_adreno200.so
04-30 23:23:33.642: I/Adreno200-EGLSUB(30931): <ConfigWindowMatch:2087>: Format RGBA_8888.
04-30 23:23:33.662: D/memalloc(30931): ion: Mapped buffer base:0x52823000 size:3768320 offset:0 fd:60
04-30 23:23:33.672: D/OpenGLRenderer(30931): Enabling debug mode 0
04-30 23:23:33.813: D/memalloc(30931): ion: Mapped buffer base:0x53122000 size:3768320 offset:0 fd:64
04-30 23:23:38.708: I/Adreno200-EGLSUB(30931): <ConfigWindowMatch:2087>: Format RGBA_8888.
04-30 23:23:38.718: D/memalloc(30931): ion: Mapped buffer base:0x536ba000 size:3768320 offset:0 fd:71
04-30 23:23:38.828: D/memalloc(30931): ion: Mapped buffer base:0x53fd9000 size:3768320 offset:0 fd:74
04-30 23:23:38.838: D/OpenGLRenderer(30931): Flushing caches (mode 0)
04-30 23:23:38.848: D/memalloc(30931): ion: Unmapping buffer base:0x52823000 size:3768320
04-30 23:23:38.848: D/memalloc(30931): ion: Unmapping buffer base:0x53122000 size:3768320
04-30 23:23:39.248: D/memalloc(30931): ion: Mapped buffer base:0x52823000 size:3768320 offset:0 fd:61
04-30 23:23:53.113: D/SqliteDatabaseCpp(30931): Registering sqlite logging func: /data/data/com.android.partyapp.main/databases/NewDb.sqlite
04-30 23:23:53.113: D/SqliteDatabaseCpp(30931): DB info: open db, path = /data/data/com.android.partyapp.main/databases , key = JesDf*wil, flag = 2, file size = 6144
04-30 23:23:53.113: D/SqliteDatabaseCpp(30931): DB info: path = /data/data/com.android.partyapp.main/databases , key = JesDf*wil, handle: 0x1ec29b8, type: w, r/w: (0,1), mode: truncate, disk free size: 1208 M
04-30 23:23:53.113: I/SQLiteAssetHelper(30931): successfully opened database NewDb.sqlite
04-30 23:23:53.123: I/SqliteDatabaseCpp(30931): sqlite returned: error code = 1, msg = no such table: TABLE_WRITEABLE
04-30 23:23:53.123: E/SQLiteDatabase(30931): Error inserting j_title=null j_rating=0.0 j_entry=null j_date=04/30/2014
04-30 23:23:53.123: E/SQLiteDatabase(30931): android.database.sqlite.SQLiteException: no such table: TABLE_WRITEABLE: , while compiling: INSERT INTO TABLE_WRITEABLE(j_title,j_rating,j_entry,j_date) VALUES (?,?,?,?)
04-30 23:23:53.123: E/SQLiteDatabase(30931): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
04-30 23:23:53.123: E/SQLiteDatabase(30931): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:68)
04-30 23:23:53.123: E/SQLiteDatabase(30931): at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:150)
04-30 23:23:53.123: E/SQLiteDatabase(30931): at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:368)
04-30 23:23:53.123: E/SQLiteDatabase(30931): at android.database.sqlite.SQLiteStatement.acquireAndLock(SQLiteStatement.java:272)
04-30 23:23:53.123: E/SQLiteDatabase(30931): at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:115)
04-30 23:23:53.123: E/SQLiteDatabase(30931): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1841)
04-30 23:23:53.123: E/SQLiteDatabase(30931): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1714)
04-30 23:23:53.123: E/SQLiteDatabase(30931): at com.android.partyapp.database.PartyDbHelper.insertNewEntry(PartyDbHelper.java:88)
04-30 23:23:53.123: E/SQLiteDatabase(30931): at com.android.partyapp.partyionaldatabaseapp.LogManager.insertLog(LogManager.java:45)
04-30 23:23:53.123: E/SQLiteDatabase(30931): at com.android.partyapp.partyionaldatabaseapp.LogManager.startNewLog(LogManager.java:38)
04-30 23:23:53.123: E/SQLiteDatabase(30931): at com.android.partyapp.partyionaldatabaseapp.LogFragment$1.onClick(LogFragment.java:72)
04-30 23:23:53.123: E/SQLiteDatabase(30931): at android.view.View.performClick(View.java:3538)
04-30 23:23:53.123: E/SQLiteDatabase(30931): at android.view.View$PerformClick.run(View.java:14319)
04-30 23:23:53.123: E/SQLiteDatabase(30931): at android.os.Handler.handleCallback(Handler.java:608)
04-30 23:23:53.123: E/SQLiteDatabase(30931): at android.os.Handler.dispatchMessage(Handler.java:92)
04-30 23:23:53.123: E/SQLiteDatabase(30931): at android.os.Looper.loop(Looper.java:156)
04-30 23:23:53.123: E/SQLiteDatabase(30931): at android.app.ActivityThread.main(ActivityThread.java:5045)
04-30 23:23:53.123: E/SQLiteDatabase(30931): at java.lang.reflect.Method.invokeNative(Native Method)
04-30 23:23:53.123: E/SQLiteDatabase(30931): at java.lang.reflect.Method.invoke(Method.java:511)
04-30 23:23:53.123: E/SQLiteDatabase(30931): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-30 23:23:53.123: E/SQLiteDatabase(30931): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-30 23:23:53.123: E/SQLiteDatabase(30931): at dalvik.system.NativeStart.main(Native Method)
04-30 23:23:53.163: D/memalloc(30931): ion: Mapped buffer base:0x52745000 size:196608 offset:0 fd:67
04-30 23:23:56.627: D/memalloc(30931): ion: Unmapping buffer base:0x52745000 size:196608
还有 Java:
import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;
public class PartyDbHelper extends SQLiteAssetHelper {
//Create database itself
private static final String DATABASE_NAME = "NewDb.sqlite";
//Set up column titles
//Create 2 tables within the database
private static final String TABLE_READABLE = "TABLE_READABLE";
//Create an id for each column
public static final String KEY_RID = "_id";
public static final String KEY_NAME = "party_name";
public static final String KEY_STATE = "party_college";
public static final String KEY_FB = "party_fb";
public static final String KEY_TWITTER = "party_twitter";
private static final String TABLE_WRITEABLE = "TABLE_WRITEABLE";
public static final String KEY_JDATE = "j_date";
public static final String KEY_JTITLE = "j_title";
public static final String KEY_JENTRY = "j_entry";
public static final String KEY_JRATING = "j_rating";
public static final String KEY_WID = "j_entry_id";
//Version 2014.1
private static final int DATABASE_VERSION = 1;
public PartyDbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
//OnCreate is called the first time the database is called. Otherwise we use update
/**@Override
//Set up database here
public void onCreate(SQLiteDatabase db) {
//We execute the database (db) and then set up our table
db.execSQL("CREATE TABLE " + TABLE_READABLE + " (" +
//Column name Type of variable
KEY_RID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
KEY_NAME + " TEXT NOT NULL, " +
KEY_STATE + " TEXT NOT NULL, " +
KEY_FB + " TEXT NOT NULL, " +
KEY_TWITTER + " TEXT NOT NULL);"
);
db.execSQL("CREATE TABLE " + TABLE_WRITEABLE + " (" +
KEY_WID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
KEY_JDATE + " INTEGER NOT NULL, " +
KEY_JTITLE + " TEXT NOT NULL, " +
KEY_JRATING + " FLOAT NOT NULL, " +
KEY_JENTRY + " TEXT NOT NULL);"
);
}**/
@Override
//This is where we look to edit the table
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_READABLE);
db.execSQL("DROP IF TABLE EXISTS " + TABLE_WRITEABLE);
onCreate(db);
}
public long insertNewEntry(LogClass logClass) {
ContentValues cv = new ContentValues();
cv.put(KEY_JDATE, logClass.getDate());
cv.put(KEY_JTITLE, logClass.getlTitle());
cv.put(KEY_JRATING, logClass.getlRatingBar());
cv.put(KEY_JENTRY, logClass.getlEntry());
return getWritableDatabase().insert(TABLE_WRITEABLE, null, cv);
}
////////////////Query Parties\\\\\\\\\\\\\\
//Get cursor that will display entries
public EntryCursor queryEntries() {
Cursor wrapped = getReadableDatabase().query
(TABLE_WRITEABLE, null, null, null, null, null, KEY_JDATE + " asc");
return new EntryCursor(wrapped);
}
/**
* The wrapped cursor returns rows from the Log table. The getLog() method will return an
//entire object readable instance for the current row
*/
public static class EntryCursor extends CursorWrapper {
public EntryCursor (Cursor c) {
super(c);
}
/**
* Returns a readable object for the current row, or null if the current row is invalid
*/
public LogClass getLog() {
if (isBeforeFirst() || isAfterLast())
return null;
LogClass logClass = new LogClass();
long logClassId = getLong(getColumnIndex(KEY_WID));
logClass.setEntryId(logClassId);
String enteredLogDate = getString(getColumnIndex(KEY_JDATE));
logClass.setDate((enteredLogDate));
String enteredLogEntry = getString(getColumnIndex(KEY_JENTRY));
logClass.setlEntry(enteredLogEntry);
String enteredLogTitle = getString(getColumnIndex(KEY_JTITLE));
logClass.setlTitle(enteredLogTitle);
float enteredLogRating = getFloat(getColumnIndex(KEY_JRATING));
logClass.setlRatingBar(enteredLogRating);
return logClass;
}
}
}
**编辑:添加代码**LogManager 应该处理将 LogClass 对象添加到数据库中。 LogClass 本身只是一系列的 getter 和 setter。由于空间原因,我省略了那个类。
日志类
import android.content.Context;
import android.content.SharedPreferences;
import com.android.partyapp.database.PartyDbHelper;
import com.android.partyapp.database.PartyDbHelper.EntryCursor;
public class LogManager {
private static final String PREFS_FILE = "logs";
private static final String PREF_CURRENT_LOG_ID = "LogManager.currentEntryId";
private static LogManager sLogManager;
private PartyDbHelper mHelper;
private Context mAppContext;
private SharedPreferences mPrefs;
private long mCurrentEntryId;
private String TAG1;
private String TAG;
//Use shared preferences to keep track of entry ID
private LogManager(Context appContext) {
mAppContext = appContext;
mHelper = new PartyDbHelper(mAppContext);
mPrefs = mAppContext.getSharedPreferences(PREFS_FILE, Context.MODE_PRIVATE);
mCurrentEntryId = mPrefs.getLong(PREF_CURRENT_LOG_ID, -1);
}
public static LogManager get(Context c) {
if (sLogManager == null) {
sLogManager = new LogManager(c.getApplicationContext());
}
return sLogManager;
}
public LogClass startNewLog(){
LogClass logClass = insertLog();
return logClass;
}
private LogClass insertLog() {
LogClass logClass = new LogClass();
logClass.setEntryId(mHelper.insertNewEntry(logClass));
return logClass;
}
//Goes to the SQL and finds the primitive text to input the row into a new instance of a log
public EntryCursor queryEntries() {
return mHelper.queryEntries();
}
}
最佳答案
你的建表sql被注释掉了。它找不到您指定的表,因为它尚未创建。
关于java - 使用 SQLiteAssetHelper 写入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23401850/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!