
我正在用sql开发一个简单的Android应用程序.
我按照以下指南 –
http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/
尝试打开数据库时出错.
这是我的DataBaseHelp.java类 –
public class DataBaseHelper extends sqliteOpenHelper{private static String DB_PATH = "/data/data/and.testDB/databases/";private static String DB_name = "MyData";private sqliteDatabase myDataBase; private final Context myContext;public DataBaseHelper(Context context) { super(context,DB_name,null,1); this.myContext = context;} public voID createDataBase() throws IOException{ boolean dbExist = checkDataBase(); if(dbExist){ //do nothing - database already exist }else{ this.getReadableDatabase(); try { copyDataBase(); } catch (IOException e) { throw new Error("Error copying database"); } }}private boolean checkDataBase(){ sqliteDatabase checkDB = null; try{ String myPath = DB_PATH + DB_name; checkDB = sqliteDatabase.openDatabase(myPath,sqliteDatabase.OPEN_Readonly); }catch(sqliteException e){ //database does't exist yet. } if(checkDB != null){ checkDB.close(); } return checkDB != null ? true : false;}private voID copyDataBase() throws IOException{ //Open your local db as the input stream inputStream myinput = myContext.getAssets().open(DB_name); // Path to the just created empty db String outfilename = DB_PATH + DB_name; //Open the empty db as the output stream OutputStream myOutput = new fileOutputStream(outfilename); //transfer bytes from the inputfile to the outputfile byte[] buffer = new byte[1024]; int length; while ((length = myinput.read(buffer))>0){ myOutput.write(buffer,length); } //Close the streams myOutput.flush(); myOutput.close(); myinput.close();}public voID openDataBase() { //Open the database String myPath = DB_PATH + DB_name; myDataBase = sqliteDatabase.openDatabase(myPath,sqliteDatabase.OPEN_Readonly);}@OverrIDe public synchronized voID close() { if(myDataBase != null) myDataBase.close(); super.close(); } @OverrIDe public voID onCreate(sqliteDatabase db) { } @OverrIDe public voID onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) { }}这是我的testDB.java类 –
public class testDB extends Activity {sqliteDatabase myDataBase;public String[] gur = new String[4];/** Called when the activity is first created. */@OverrIDepublic voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.main); DataBaseHelper myDbHelper = new DataBaseHelper(this); myDbHelper = new DataBaseHelper(this); try { myDbHelper.createDataBase();} catch (IOException ioe) { throw new Error("Unable to create database");}try { myDbHelper.openDataBase();// Here is the problem-Can't open the database/}catch(sqlException sqle){ throw sqle;} myDataBase = myDbHelper.getWritableDatabase(); Cursor c = myDataBase.rawquery("SELECT * FROM beer",null);if (c != null ) { if (c.movetoFirst()) { for(int x=0;x< 1;x++) { gur[x] = (c.getString(c.getColumnIndex("name"))); c.movetoNext(); }} Toast.makeText(this,gur[0],Toast.LENGTH_LONG).show();} } }我使用sqlite数据库浏览器创建了数据库,创建了一个名为“beer”的表,添加了2行并将其放在我项目的/ assests文件夹中.
请注意,我是sql的新手,也是我第一次使用它.我整天都在寻找答案而找不到答案.
谢谢!
最佳答案在sqlite数据库浏览器中打开数据库并添加一个名为“androID_Metadata”的新表,您可以执行以下SQL语句来执行此 *** 作:
CREATE table“androID_Metadata”(“locale”TEXT DEFAulT’en_US’)
现在在“androID_Metadata”表中插入一行文本“en_US”:
INSERT INTO“androID_Metadata”VALUES(‘en_US’)
然后,有必要将表的主ID字段重命名为“_ID”,以便AndroID知道绑定表的ID字段的位置.
现在将新数据库文件复制到您的项目资产文件夹中,它将工作…..
总结以上是内存溢出为你收集整理的无法打开数据库-Android全部内容,希望文章能够帮你解决无法打开数据库-Android所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)