Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.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数据库有什么问题?_Android_Sqlite_Cursor_Sqlitemanager - Fatal编程技术网

这个简单的java代码在Android中访问SQLite数据库有什么问题?

这个简单的java代码在Android中访问SQLite数据库有什么问题?,android,sqlite,cursor,sqlitemanager,Android,Sqlite,Cursor,Sqlitemanager,我使用SQLiteManager创建了一个数据库文件(.db),其中包含一个表TEstTable,并将其粘贴到/assets文件夹中。我想从Android应用程序对此数据库执行操作 为了做到这一点,我遵循了关于堆栈溢出的建议 添加了更多的代码来读取它,并将结果保存在字符串中并打印结果,准确地说,我只添加了一个rawquery 检查DatabaseHelper类的“我的代码”: public类DatabaseHelper扩展了SQLiteOpenHelper{ //应用程序数据库的Android默

我使用SQLiteManager创建了一个数据库文件(.db),其中包含一个表
TEstTable
,并将其粘贴到/assets文件夹中。我想从Android应用程序对此数据库执行操作

为了做到这一点,我遵循了关于堆栈溢出的建议

添加了更多的代码来读取它,并将结果保存在字符串中并打印结果,准确地说,我只添加了一个rawquery

检查DatabaseHelper类的“我的代码”:

public类DatabaseHelper扩展了SQLiteOpenHelper{
//应用程序数据库的Android默认系统路径。
私有静态最终字符串DB_PATH=“/data/data/com.example.sqlitemanagerexample/databases/”;
私有静态最终字符串DB_NAME=“managerSample”;
私有SQLiteDatabase-myDataBase;
私有最终上下文myContext;
/**
*构造函数获取并保留所传递上下文的引用,以便
*访问应用程序资产和资源。
* 
*@param上下文
*/
公共数据库助手(上下文){
super(上下文,DB_名称,null,1);
this.myContext=上下文;
}
/**
*在系统上创建一个空数据库,并用自己的数据库重写它
*数据库。
* */
public void createDataBase()引发IOException{
布尔值dbExist=checkDataBase();
if(dbExist){
//不执行任何操作-数据库已存在
}否则{
//通过调用此方法,空数据库将被创建到
//默认系统路径
//你的应用程序,所以我们可以覆盖它
//数据库与我们的数据库。
这是.getReadableDatabase();
试一试{
copyDataBase();
}捕获(IOE异常){
抛出新错误(“复制数据库时出错”);
}
}
}
/**
*检查数据库是否已存在,以避免每次重新复制文件
*打开应用程序的时间。
* 
*@如果存在则返回true,如果不存在则返回false
*/
私有布尔校验数据库(){
SQLiteDatabase checkDB=null;
试一试{
字符串myPath=DB_PATH+DB_NAME;
checkDB=SQLiteDatabase.openDatabase(myPath,null,
SQLiteDatabase.OPEN_READONLY);
}catch(sqlitee异常){
/*数据库还不存在*/
}
if(checkDB!=null){
checkDB.close();
}
return checkDB!=null?true:false;
}
/**
*将数据库从本地资产文件夹复制到刚创建的
*系统文件夹中的空数据库,从中可以访问和
*已处理。这是通过传输ByTestStream来完成的。
* */
私有void copyDataBase()引发IOException{
//打开本地数据库作为输入流
InputStream myInput=myContext.getAssets().open(DB_NAME);
//刚创建的空数据库的路径
字符串outFileName=DB_路径+DB_名称;
//打开空数据库作为输出流
OutputStream myOutput=新文件OutputStream(outFileName);
//将字节从输入文件传输到输出文件
字节[]缓冲区=新字节[1024];
整数长度;
而((长度=myInput.read(缓冲区))>0){
写入(缓冲区,0,长度);
}
//关闭溪流
myOutput.flush();
myOutput.close();
myInput.close();
}
public void openDataBase()引发SQLException{
//打开数据库
字符串myPath=DB_PATH+DB_NAME;
myDataBase=SQLiteDatabase.openDatabase(myPath,null,
SQLiteDatabase.OPEN_READONLY);
}
@凌驾
公共同步作废关闭(){
if(myDataBase!=null)
myDataBase.close();
super.close();
}
@凌驾
public void onCreate(SQLiteDatabase db){
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
}
公共字符串getEntries(){
游标c=myDataBase.rawQuery(“从TestTable中选择*”,null);
字符串结果=”;
for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){
result=result+c.getShort(0)+c.getString(1)+c.getString(2);
}
返回结果;
}
//添加公共助手方法以访问和获取
//数据库。
//您可以通过执行“returnmydatabase.query(..”)来返回游标,因此
//放轻松
//为您的视图创建适配器。
}
以及查看活动的代码:

公共类视图扩展活动{
文本视图电视;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.viewdb);
tv=(TextView)findViewById(R.id.textView1);
数据库助手myDbHelper;
myDbHelper=新的DatabaseHelper(此);
试一试{
myDbHelper.createDataBase();
}捕获(ioe异常ioe){
抛出新错误(“无法创建数据库”);
}
试一试{
myDbHelper.openDataBase();
}捕获(SQLException sqle){
抛出sqle;
}
tv.setText(myDbHelper.getEntries());
}
}
当我运行这段代码时,视图活动没有启动,应用程序被强制关闭。 Logcat说:

E/AndroidRuntime(1764):java.lan
private static final String DB_NAME = "managerSample";