i try to learn sqlite with very simple project, i create a class with name database with this codes:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class database extends SQLiteOpenHelper {
public final String path = "data/data/com.example.testfor/databases/";
public final String Name = "dataofstorys";
public SQLiteDatabase mydb;
private final Context mycontext;
public database(Context context) {
super(context, "dataofstorys", null, 1);
mycontext = context;
}
@Override
public void onCreate(SQLiteDatabase arg0) {
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
}
public void useable() {
boolean checkdb = checkdb();
if (checkdb) {
} else {
this.getReadableDatabase();
try {
copydatabase();
}
catch (IOException e) {
}
}
}
public void open() {
mydb = SQLiteDatabase.openDatabase(path + Name, null, SQLiteDatabase.OPEN_READWRITE);
}
@Override
public void close() {
mydb.close();
}
public boolean checkdb() {
SQLiteDatabase db = null;
try {
db = SQLiteDatabase.openDatabase(path + Name, null, SQLiteDatabase.OPEN_READONLY);
}
catch (SQLException e) {
}
return db != null ? true : false;
}
public void copydatabase() throws IOException {
OutputStream myOutput = new FileOutputStream(path + Name);
byte[] buffer = new byte[1024];
int lenght;
InputStream myInput = mycontext.getAssets().open(Name);
while ((lenght = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, lenght);
}
myInput.close();
myOutput.flush();
myOutput.close();
}
public Integer shomaresh_field(String table,String field){
Cursor Cursor = mydb.rawQuery("SELECT * FROM "+table+" group by "+field, null);
int i = Cursor.getCount();
return i ;
}
public String namayesh_fasl(String table , int row){
Cursor Cursor = mydb.rawQuery("SELECT * FROM "+table+" group by season", null);
Cursor.moveToPosition(row);
String s = Cursor.getString(4);
return s ;
}
public Integer shomaresh_dastan (String table , String season){
Cursor Cursor = mydb.rawQuery("SELECT * FROM "+table+" where season='"+season+"' group by name", null);
int s = Cursor.getCount();
return s;
}
}
and i want to show a ListView from database database in MainActivity. MainActivity code:
import android.app.ListActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class MainActivity extends ListActivity {
private database db;
private String[] Name;
private String[] Teedad;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
db = new database(this);
refresher();
setListAdapter(new AA());
}
class AA extends ArrayAdapter<String>{
public AA(){
super(MainActivity.this,R.layout.raw_seasone,Name);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater in = getLayoutInflater();
View row = in.inflate(R.layout.raw_seasone, parent,false);
TextView name = (TextView) row.findViewById(R.id.name_season);
TextView teedad = (TextView) row.findViewById(R.id.teedad_dastan);
name.setText(Name [position]);
teedad.setText(Teedad [position]);
return (row);
}
}
private void refresher(){
db.open();
int save = db.shomaresh_field("datastorys", "season");
Name = new String[save];
Teedad = new String[save];
for (int i = 0; i <save; i++) {
Name[i] = db.namayesh_fasl("datastorys", i);
Teedad[i] = db.shomaresh_dastan("datastorys", Name[i].toString())+"";
}
db.close();
}
}
but it is not working, i do not have any error but i have force close. logcat :
03-13 10:49:51.916: E/SQLiteLog(28408): (14) cannot open file at line 30210 of [00bb9c9ce4]
03-13 10:49:51.916: E/SQLiteLog(28408): (14) os_unix.c:30210: (2) open(//data/data/com.example.testfor/databases/dataofstorys) -
03-13 10:49:51.927: E/SQLiteDatabase(28408): Failed to open database 'data/data/com.example.testfor/databases/dataofstorys'.
03-13 10:49:51.927: E/SQLiteDatabase(28408): android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
03-13 10:49:51.927: E/SQLiteDatabase(28408): at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:829)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:814)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:709)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:684)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at com.example.testfor.database.open(database.java:52)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at com.example.testfor.MainActivity.refresher(MainActivity.java:55)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at com.example.testfor.MainActivity.onCreate(MainActivity.java:26)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at android.app.Activity.performCreate(Activity.java:5343)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2429)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at android.app.ActivityThread.access$800(ActivityThread.java:151)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1342)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at android.os.Handler.dispatchMessage(Handler.java:110)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at android.os.Looper.loop(Looper.java:193)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at android.app.ActivityThread.main(ActivityThread.java:5333)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at java.lang.reflect.Method.invokeNative(Native Method)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at java.lang.reflect.Method.invoke(Method.java:515)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)
03-13 10:49:51.927: E/SQLiteDatabase(28408): at dalvik.system.NativeStart.main(Native Method)
03-13 10:49:51.947: E/AndroidRuntime(28408): FATAL EXCEPTION: main
03-13 10:49:51.947: E/AndroidRuntime(28408): Process: com.example.testfor, PID: 28408
03-13 10:49:51.947: E/AndroidRuntime(28408): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.testfor/com.example.testfor.MainActivity}: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
03-13 10:49:51.947: E/AndroidRuntime(28408): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2377)
03-13 10:49:51.947: E/AndroidRuntime(28408): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2429)
03-13 10:49:51.947: E/AndroidRuntime(28408): at android.app.ActivityThread.access$800(ActivityThread.java:151)
03-13 10:49:51.947: E/AndroidRuntime(28408): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1342)
03-13 10:49:51.947: E/AndroidRuntime(28408): at android.os.Handler.dispatchMessage(Handler.java:110)
03-13 10:49:51.947: E/AndroidRuntime(28408): at android.os.Looper.loop(Looper.java:193)
03-13 10:49:51.947: E/AndroidRuntime(28408): at android.app.ActivityThread.main(ActivityThread.java:5333)
03-13 10:49:51.947: E/AndroidRuntime(28408): at java.lang.reflect.Method.invokeNative(Native Method)
03-13 10:49:51.947: E/AndroidRuntime(28408): at java.lang.reflect.Method.invoke(Method.java:515)
03-13 10:49:51.947: E/AndroidRuntime(28408): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)
03-13 10:49:51.947: E/AndroidRuntime(28408): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)
03-13 10:49:51.947: E/AndroidRuntime(28408): at dalvik.system.NativeStart.main(Native Method)
03-13 10:49:51.947: E/AndroidRuntime(28408): Caused by: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
03-13 10:49:51.947: E/AndroidRuntime(28408): at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
03-13 10:49:51.947: E/AndroidRuntime(28408): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209)
03-13 10:49:51.947: E/AndroidRuntime(28408): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
03-13 10:49:51.947: E/AndroidRuntime(28408): at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
03-13 10:49:51.947: E/AndroidRuntime(28408): at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
03-13 10:49:51.947: E/AndroidRuntime(28408): at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
03-13 10:49:51.947: E/AndroidRuntime(28408): at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:829)
03-13 10:49:51.947: E/AndroidRuntime(28408): at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:814)
03-13 10:49:51.947: E/AndroidRuntime(28408): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:709)
03-13 10:49:51.947: E/AndroidRuntime(28408): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:684)
03-13 10:49:51.947: E/AndroidRuntime(28408): at com.example.testfor.database.open(database.java:52)
03-13 10:49:51.947: E/AndroidRuntime(28408): at com.example.testfor.MainActivity.refresher(MainActivity.java:55)
03-13 10:49:51.947: E/AndroidRuntime(28408): at com.example.testfor.MainActivity.onCreate(MainActivity.java:26)
03-13 10:49:51.947: E/AndroidRuntime(28408): at android.app.Activity.performCreate(Activity.java:5343)
03-13 10:49:51.947: E/AndroidRuntime(28408): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
03-13 10:49:51.947: E/AndroidRuntime(28408): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331)
03-13 10:49:51.947: E/AndroidRuntime(28408): ... 11 more
what is wrong in my codes?
Aucun commentaire:
Enregistrer un commentaire