بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

مشکل در ایجاد دیتابیس {عین کد استاد}{مگه میشه}

مدیریت گفتگو
rad 11 سال پیش
آخرین تغییر: 9 سال پیش

برای ایجاد دیتابیس عین استاد کد میزنم ولی ایجاد نمیشه؟

package sm.example.asss;

import java.io.File;

import android.R.string;
import android.app.Application;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;

public class G extends Application {
public static Context context;
public static SQLiteDatabase database;
public static final String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
public static final String DIR_DATABASE = DIR_SDCARD + "/databese-test/";


@Override
public void onCreate() {
super.onCreate();
context=this.getApplicationContext();
new File(DIR_DATABASE).mkdir();
database.openOrCreateDatabase(DIR_DATABASE+ "/database.sqlite", null);
}

}

نظرات

hosseinAmini 11 سال پیش
به جای mkdir() بنویس mkdirs()
rad 11 سال پیش
باز نشد؟
کاشی زاده 11 سال پیش
شما متغییر database رو initial نکردید یا اول یکبار پرش کنید یا به این شکل تغییر بدید SQLiteDatabase.openOrCreateDatabase
rad 11 سال پیش
نمیشه این که عین کد استاد !؟!؟ چطور پرش کنم ؟ اینو کجا تغییر بدم
کاشی زاده 11 سال پیش
شبیه کد استاد نیست اتفاقا و مشکل شما هم همینجاست که دقت نکردی در پاسخ زیری دوستمون مثال رو زده این مثال رو دقیقا انجام بده
rad 11 سال پیش
اون رو که پایین گفته بودند زدم... اینم عکس کد رو گذاشتم .
rad 11 سال پیش
آقای محمد حسین کاشی زاده آیا این سوال منو پاسخ میدهید ؟
کاشی زاده 11 سال پیش
خب همین دیگه دقت نمیکنی کجای کد شما با کدی که دوستمون مصطفی گذاشته یکی هست ؟
rad 11 سال پیش
تفاوت کد من با کد استاد که عکسش رو گذاشتم میشه بگید؟
rad 11 سال پیش
من کدی رو که مصطفی گفته رو تغییر دادن ......زیرش هم گفتم که نشد !(rad ?باز نشد؟؟ )
کاشی زاده 11 سال پیش
درسته حق با شماست ، من فکر کردم باید از روی SQLiteDatabase یک نمونه داشته باشیم و متد مورد نظر نیازبه نمونه داره ولی متد استاتیک هست و نیاز به نمونه گیری نداره .
rad 11 سال پیش
حق رو ول کن این چرا پس ایجاد نمیشه
کاشی زاده 11 سال پیش
یک بار کد مربوط به ایجاد دیتابیس رو کامنت کنید و پروژه رو اجرا کنید ببنید پروژه اجرا میشه یا نه . اگر نشه ینی مشکل از دیتابیس نیست و جای دیگه مشکل وجود داره ، شبیه به مشکل شما در این لینک هست . نوع ایمولیتر رو هم بگید که از کدوم استفاده میکنید جنی موشن یا AVD
rad 11 سال پیش
اینکه اجرا میشه اصلا کامنت هم نکنم درست میاد بالا منظورم اینه که تو قسمت File Explorer mnt/sdcard ایجاد نمیشه
کاشی زاده 11 سال پیش
از جنی موشن استفاده میکنی ؟ یا از AVD ؟
rad 11 سال پیش
جنی موشن
کاشی زاده 11 سال پیش
خب مسیر فایل رو دارید اشتباه میرید ، مسیر sd card در جنی موشن این هست : mnt->shell->emulated->0->yourFile
rad 11 سال پیش
ای خدا .بیین من چند روزه میگم پس چرا این دیتابیس ایجاد نمیشه .الان کلی برات لایک میزنم :)

پاسخ‌ها 4

مصطفی  11 سال پیش

  1. شما باید از mkdirs() استفاده کنید
  2. به جای نوشتن این خط :
 database.openOrCreateDatabase(DIR_DATABASE+"/database.sqlite",null);

باید از این خط استفاده کنید:

   database = SQLiteDatabase.openOrCreateDatabase(DIR_DATABASE+"/database.sqlite", null);

نظرات

rad 11 سال پیش
?باز نشد؟؟
alireza 11 سال پیش
اجازه دسترسی به اس دی کارت رو در منیفست اضافه کردین ؟
rad 11 سال پیش
بله
rad 11 سال پیش

این ارور لوگ هست

08-24 11:46:52.877: E/memtrack(2174): Couldn't load memtrack module (No such file or directory)
08-24 11:46:52.877: E/android.os.Debug(2174): failed to load memtrack module: -2
08-24 11:46:53.833: E/cutils-trace(2195): Error opening trace file: No such file or directory (2)
08-24 11:46:53.873: E/memtrack(2195): Couldn't load memtrack module (No such file or directory)
08-24 11:46:53.873: E/android.os.Debug(2195): failed to load memtrack module: -2
08-24 11:46:54.293: E/OpenGLRenderer(2206): Getting MAX_TEXTURE_SIZE from GradienCache
08-24 11:46:54.297: E/OpenGLRenderer(2206): MAX_TEXTURE_SIZE: 8192
08-24 11:46:54.305: E/OpenGLRenderer(2206): Getting MAX_TEXTURE_SIZE from Caches::initConstraints()
08-24 11:46:54.305: E/OpenGLRenderer(2206): MAX_TEXTURE_SIZE: 8192

اینم فایل  Log

نظرات

rad 11 سال پیش
هنوز منتظر چشم بر اهم که جوابی برسه
مصطفی  11 سال پیش
کلاس G رو توی منیفست تعریف کردی؟
moji19 11 سال پیش
منم این مشکلو داشتم البته یادم نیس چه اروری میداد ولی عین کد استادو میزدم جواب نمیداد!!! شاید باورت نشه ولی فقط یه پروژه جدید باز کردم و همون کد رو کپی پیست کردم درست شد!!!!
rad 11 سال پیش
کلاس G رو هم معرفی کردم
rad 11 سال پیش
شاید باورت نشه منم یه پروژه جدید باز کردم نشد (!!!)
rad 11 سال پیش
هنوز منتظرم
مصطفی  11 سال پیش
import android.R.string; دقیقا برای چیه ؟؟
rad 11 سال پیش
؟ ! ؟
مصطفی  11 سال پیش
جالبه من وقتی کدتون رو با ویرایشاتی که گفته ام امتحان کردم درست کار می کرد.
rad 11 سال پیش
android:name=".G"----------------------------------------
rad 11 سال پیش
android:name=".G"--
rad 11 سال پیش
mahdi2565 11 سال پیش
از این بدشانسی ها منم زیاد داشتم ، با اندروید استادیو امتحان کن !!!!!
rad 11 سال پیش
؟اندروید استادیو؟؟با این این همه مشکل و مسلئه اون دیگه بین چی به روزگارمون میاره
rad 11 سال پیش
اگه میتونید فایل لوگ رو گذاشتم بینید گیرش کجاست
rad 11 سال پیش
آقای محمد حسین کاشی زاده عزیز آیا این سوال منو پاسخ میدهید ؟
h.k.m 9 سال پیش

من هم همین مشکلو دارم

کلاً فایل دیتا بیس ساخته نمیشه و از خط زیر خطا میگیره:

database= SQLiteDatabase.openOrCreateDatabase(DIR_DATABASE+"/database1.sqlite",null );

نظرات

Reza 9 سال پیش
سلام ، مطمئنید ساخته نمیشه ؟ شاید مسیر فایل ساخته شده رو اشتباه میرید . بالا جواب داده شده که اگه از جنی موشن استفاده میکنید مسیر اینه mnt->shell->emulated->0->yourFile . پاسخ آقا مصطفی رو هم بخونید .
h.k.m 9 سال پیش
سلام..ممنونم که پاسخ دادی..با اندروید استادیو کارمیکنم..تنظیمات م همونایی که استاد گفتن انجام دادم..توضیح ارور اینه: E: FATAL EXCEPTION: main Process: com.hamid.learn.database, PID: 4854 java.lang.RuntimeException: Unable to create application com.android.tools.fd.runtime.BootstrapApplication: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database این مسیری م که گفتید اصلا فولدر shell وجود نداره
h.k.m 9 سال پیش
تو android device monitor هم یه لاگی انداخته که میگه: Adb connection Error:An existing connection was forcibly closed by the remote host
h.k.m 9 سال پیش
خط های بالاتر لاگکت اندروید استادیو : (14) cannot open file at line 31278 of [2ef4f3a5b1] E: (14) os_unix.c (2) open(/storage/emulated/0/database-test//database1.SQLite) - E: Failed to open database '/storage/emulated/0/database-test//database1.SQLite'. android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
Reza 9 سال پیش
مسیری که گفتم مال genyMotion بود . شما داری از ایمولیتور خود اندروید استفاده میکنی . مسیرش هم خودش گفته : storage/emulated/0/database-test فکر میکنم فایل ساخته شده چون داره میگه فایل فلان در مسیر فلان رو نمیتونه باز کنه ، حالا چرا ... !!!
h.k.m 9 سال پیش
دقیقاً همین مسیر رو میرم ولی فایلی ساخته نشده..اینم کد کلاسG: package com.hamid.learn.database; import android.app.Application; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.os.Environment; import java.io.File; public class G extends Application { public static Context context; public static SQLiteDatabase database; public static final String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath(); public static final String DIR_DATABASE = DIR_SDCARD + "/database-test/"; @Override public void onCreate() { super.onCreate(); context = this.getApplicationContext(); new File(DIR_DATABASE).mkdirs(); database = SQLiteDatabase.openOrCreateDatabase(DIR_DATABASE + "/database1.sqlite", null); database.execSQL("CREATE TABLE IF NOT EXISTS person " + " (person_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE" + " , person_name TEXT, " + "person_family TEXT," + " person_age INTEGER)"); database.execSQL("INSERT INTO person (person_name,person_family,person_age) VALUES ('Ali', 'rahimi',20)"); } }
h.k.m 9 سال پیش

android manifest :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hamid.learn.database">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<application
android:name=".G"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>

<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>

</manifest>

کلاس G :

package com.hamid.learn.database;

import android.app.Application;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;

import java.io.File;

public class G extends Application {
public static Context context;
public static SQLiteDatabase database;
public static final String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
public static final String DIR_DATABASE = DIR_SDCARD + "/database-test/";

@Override
public void onCreate() {
super.onCreate();
context = this.getApplicationContext();
new File(DIR_DATABASE).mkdirs();

database = SQLiteDatabase.openOrCreateDatabase(DIR_DATABASE + "/database1.sqlite", null);
database.execSQL("CREATE TABLE IF NOT EXISTS person " +
" (person_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE" +
" , person_name TEXT, " +
"person_family TEXT," +
" person_age INTEGER)");
database.execSQL("INSERT INTO person (person_name,person_family,person_age) VALUES ('Ali', 'rahimi',20)");
}

}
 gradle :
apply plugin: 'com.android.application'

android {
compileSdkVersion 25
buildToolsVersion "25.0.2"

defaultConfig {
applicationId "com.hamid.learn.database"
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:25.1.1'
}

gradle project :

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

allprojects {
repositories {
jcenter()
}
}

task clean(type: Delete) {
delete rootProject.buildDir
}

نظرات

h.k.m 9 سال پیش
برنامه رو که run میکنم کرش میکنه و لاگایی که بالا گفتم و میندازه و از خط 22 ارور میگیره یعنی این خط: database = SQLiteDatabase.openOrCreateDatabase(DIR_DATABASE + "/database1.sqlite", null);
Reza 9 سال پیش
من همین کدهای شما رو اجرا کردم و فایل ساخته میشه و در sqlite manager نشون داده میشه . اندروید ایمولیتور شما چنده ؟ اگه 6 و یا بالاتره ، باید runtime permission بگیرید .
h.k.m 9 سال پیش
اندروید ایمولیتور م 6 ... runtime permission چیجوری بگیرم؟
h.k.m 9 سال پیش
ممنونم مهندس جان از اینکه وقت گذاشتی...منم کد ها رو با اندروید ایمولیتور 4.1 اجرا کردم و فایلها ساخته شد...خیلی عالی بود..باز هم ممنون..فقط اینکه علت ساخته نشدن فولدر با اندروید شش چیه؟؟؟
Reza 9 سال پیش
خب ساختار اندروید در اندروید 6 در بعضی permission ها تغییر کرده ( جهت امنیت بیشتر کاربر ) . لینک رو ببینید توضیح داده .

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .