2011-01-06 6 views
0

내 문제는 5 개의 테이블이있어서 삽입 및 선택이 필요하다는 것입니다.삽입 및 선택이있는 5 개의 테이블이있는 데이터베이스

내가 한 일은 모든 테이블 클래스입니다 거기에 나는 내가 많은 발견

public class DBAdapter { 

     public static final String DB_NAME = "mol.db"; 
      private static final int DB_VERSION = 1; 
      private static final String TAG = "DBAdapter";  //to log 

      private final Context context; 
      private SQLiteDatabase db; 

     public DBAdapter(Context context) 
      { 
       this.context = context; 
       OpenHelper openHelper = new OpenHelper(this.context); 
       this.db = openHelper.getWritableDatabase(); 
     } 

    public static class OpenHelper extends SQLiteOpenHelper 
     { 

      public OpenHelper(Context context) { 
      super(context, DB_NAME, null, DB_VERSION); 
     } 
    @Override 
     public void onCreate(SQLiteDatabase db) { 
      // TODO Auto-generated method stub 
      db.execSQL(Contact.SQL_CREATE); 
      db.execSQL(Country.SQL_CREATE); 
      db.execSQL(Picture.SQL_CREATE); 
      db.execSQL(Product.SQL_CREATE); 
      db.execSQL(Project.SQL_CREATE); 

     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      // TODO Auto-generated method stub 
      Log.w(TAG, "Upgrading database from version " 
        + oldVersion + " to " + newVersion 
        + ", which will destroy all old data"); 
      db.execSQL(Contact.SQL_DROP); 
      db.execSQL(Country.SQL_DROP); 
      db.execSQL(Picture.SQL_DROP); 
      db.execSQL(Product.SQL_DROP); 
      db.execSQL(Project.SQL_DROP); 
      onCreate(db); 
     } 

데이터베이스를 만들어 거기에 DBAdapter 클래스가이

public class Contact 

private static String IDCont = "id_contact"; 
    private static String NameCont = "name_contact"; 
    private static String StreetCont = "street_contact"; 
    private static String Street2Cont = "street2_contact"; 
    private static String Street3Cont = "street3_contact"; 
    private static String ZipCont = "zip_contact"; 
    private static String CityCont = "city_contact"; 
    private static String CountryCont = "country_contact"; 
    private static String Iso2Cont = "iso2_contact"; 
    private static String PhoneCont = "phone_contact"; 
    private static String Phone2Cont = "phone2_contact"; 
    private static String FaxCont = "fax_contact"; 
    private static String MailCont = "mail_contact"; 
    private static String Mail2Cont = "mail2_contact"; 
    private static String InternetCont = "internet_contact"; 
    private static String DrivemapCont = "drivemap_contact"; 
    private static String PictureCont = "picture_contact"; 
    private static String LatitudeCont = "latitude_contact"; 
    private static String LongitudeCont = "longitude_contact"; 
    public static final String TABLE_NAME = "contact"; 
     public static final String SQL_CREATE = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "(" + 
     IDCont + "INTEGER not NULL," + 
     NameCont + " TEXT not NULL," + 
     StreetCont + " TEXT," + 
     Street2Cont + " TEXT," + 
     Street3Cont + " TEXT," + 
     ZipCont + " TEXT," + 
     CityCont + " TEXT," + 
     CountryCont + " TEXT," + 
     Iso2Cont + " TEXT," + 
     PhoneCont + " TEXT," + 
     Phone2Cont + " TEXT," + 
     FaxCont + " TEXT," +     
     MailCont + " TEXT," + 
     Mail2Cont + " TEXT," + 
     InternetCont + " TEXT," +  //website of the contact 
     DrivemapCont + " TEXT," +  //a link to a drivemap to the contact 
     PictureCont + " TEXT," +   //a photo of the contact building (contact is not a person) 
     LatitudeCont + " TEXT," + 
     LongitudeCont + " TEXT," + 
     "primary key(id_contact)" + 
     "foreign key(iso2)"; 

and my insert looks like this 

    public boolean SQL_INSERT_CONTACT(int IDContIns, String NameContIns, String StreetContIns, 
        String Street2ContIns, String Street3ContIns, String ZipContIns, 
        String CityContIns, String CountryContIns, String Iso2ContIns, 
        String PhoneContIns, String Phone2ContIns, String FaxContIns, 
        String MailContIns, String Mail2ContIns, String InternetContIns, 
        String DrivemapContIns, String PictureContIns, String LatitudeContIns, 
        String LongitudeContIns) { 
     try{ 
     db.execSQL("INSERT INTO " + "contact" + 
       "(" + IDCont + ", " + NameCont + ", " + StreetCont + ", " + 
       Street2Cont + ", " + Street3Cont + ", " + ZipCont + ", " + 
       CityCont + ", " + CountryCont + ", " + Iso2Cont + ", " + 
       PhoneCont + ", " + Phone2Cont + ", " + FaxCont + ", " + 
       MailCont + ", " + Mail2Cont + ", " + InternetCont + ", " + 
       DrivemapCont + ", " + PictureCont + ", " + LatitudeCont + ", " + 
       LongitudeCont + ") " + 
       "VALUES (" + IDContIns + ", " + NameContIns +", " + StreetContIns + ", " + 
       Street2ContIns + ", " + Street3ContIns + ", " + ZipContIns + ", " + 
       CityContIns + ", " + CountryContIns + ", " + Iso2ContIns + ", " + 
       PhoneContIns + ", " + Phone2ContIns + ", " + FaxContIns + ", " + 
       MailContIns + ", " + Mail2ContIns + ", " + InternetContIns + ", " + 
       DrivemapContIns + ", " + PictureContIns + ", " + LatitudeContIns + ", " + 
       LongitudeContIns +")"); 
     return true; 
     } 
     catch (SQLException e) { 
      return false; 
     } 

    } 

같은 SQL 문을 작성 다른 것들을 시도하고 그들을했지만 작동하도록 아무것도 얻지 못했습니다 ... 내가 내 활동 에있는 데이터베이스에 액세스 할 수있는 방법을 알고 싶습니다 그리고 내가 작동하도록 삽입을 얻을 수있는 그리고 sth 내 코드에 잘못 ? 당신의 도움에 대한 감사

그게 전부는 내가 단지 3 열

public class Country { 

    private static String Iso2Count = "iso2_country"; 
    private static String NameCount = "name_country"; 
    private static String FlagCount = "flag_image_url_country"; 

    public static final String TABLE_NAME = "country"; 
    public static final String SQL_CREATE = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "(" + 
    Iso2Count + " TEXT not NULL," + 
    NameCount + " TEXT not NULL," + 
    FlagCount + " TEXT not NULL," + 
    "primary key(iso2_country)"; 

    public boolean SQL_INSERT_COUNTRY(String Iso2CountIns, String NameCountIns, String FlagCountIns) { 
     try{ 
     db.execSQL("INSERT INTO " + "country" + 
       "(" + Iso2Count + ", " + NameCount + ", " + FlagCount + ") " + 
       "VALUES (" + Iso2CountIns + ", " + NameCountIns +", " + FlagCountIns + ")"); 
     return true; 
     } 
     catch (SQLException e) { 
      return false; 
     } 

    } 
을 가지고 있기 때문에 난 내 나라 테이블과 그것을 시도

내 활동

public class MainTabActivity extends TabActivity { 


private Context context; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.maintabactivity); 

    TabHost mTabHost = getTabHost(); 



    Intent intent1 = new Intent().setClass(this,MapOfLight.class); 
    //Intent intent2 = new Intent().setClass(this,Test.class);    //Testactivity 
    //Intent intent2 = new Intent().setClass(this,DetailView.class);  //DetailView 
    Intent intent2 = new Intent().setClass(this,ObjectList.class);  //ObjectList 
    //Intent intent2 = new Intent().setClass(this,Gallery.class);   //Gallery 
    Intent intent3 = new Intent().setClass(this,ContactDetail.class); 
    mTabHost.addTab(mTabHost.newTabSpec("tab_mol").setIndicator(this.getText(R.string.mol), getResources().getDrawable(R.drawable.ic_tab_mol)).setContent(intent1)); 
    mTabHost.addTab(mTabHost.newTabSpec("tab_highlights").setIndicator(this.getText(R.string.highlights),getResources().getDrawable(R.drawable.ic_tab_highlights)).setContent(intent2)); 
    mTabHost.addTab(mTabHost.newTabSpec("tab_contacts").setIndicator(this.getText(R.string.contact),getResources().getDrawable(R.drawable.ic_tab_contact)).setContent(intent3)); 

    mTabHost.setCurrentTab(1); 



    SQLiteDatabase db; 
    DBAdapter dh = null; 
    OpenHelper openHelper = new OpenHelper(this.context); 


    dh = new DBAdapter(this); 
    db = openHelper.getWritableDatabase(); 

    dh.SQL_INSERT_COUNTRY("AT", "Austria", "AUT"); 

} 

}에 그걸 얻기 위해 시도하는 방법

또 다른 질문은 삽입 삽입하고 별도의 클래스로 각 테이블에서 선택하는 것이 좋습니다, 그래서 나는 각 테이블에 대한 1 클래스가 있거나 DBAdapter에 넣어 수업?

+1

무엇이 작동하지 않습니까? 오류가 있습니까? 전혀? –

+0

정확한 문제를 지정하십시오. DB에 연결할 수 없습니까? INSERT가 실패합니까? ... 관련 오류 메시지를 표시하는 것을 잊지 마십시오. –

+0

강제 종료 메시지가 표시되지 않습니다. – kirbby

답변

0

편집 : 모든 코드를 표시했는지 확실하지 않아 내 대답이 도움이 될지 잘 모르겠습니다. IDCont, NameCont, StreetCont ... 변수를 어디에 선언합니까? 필드의 이름을 정의하는 상수라고 가정합니다. 어떤 경우에 유효한 답변이 유효하지 않으므로 올바른 INSERT 성명을 작성해야합니다.

사용중인 DB 서버에 더 구체적으로 표시되는 오류 메시지를 추가 할 수 있습니까? 당신이 함수에 전달 된 변수의 값을 삽입하는 대신 컬럼의 이름을 지정하고 있기 때문에


귀하의 INSERT 문이 작동하지 않습니다.

한 Statment의 첫 번째 부분은 모두 하나의 문자열이어야한다 : 나는 또한 테이블 디자인에 의문을 제기 할

"INSERT INTO contact (IDCont, NameCont, StreetCont, Street2Cont, Street3Cont, ZipCont," + 
    "CityCont, CountryCont, Iso2Cont, PhoneCont, Phone2Cont, FaxCont, MailCont, " + 
    "Mail2Cont, InternetCont, DrivemapCont, PictureCont, LatitudeCont, LongitudeCont) " 
"VALUES ("IDContIns + ", " + NameContIns +", " + StreetContIns + ", " + 
      Street2ContIns + ", " + Street3ContIns + ", " + ZipContIns + ", " + 
      CityContIns + ", " + CountryContIns + ", " + Iso2ContIns + ", " + 
      PhoneContIns + ", " + Phone2ContIns + ", " + FaxContIns + ", " + 
      MailContIns + ", " + Mail2ContIns + ", " + InternetContIns + ", " + 
      DrivemapContIns + ", " + PictureContIns + ", " + LatitudeContIns + ", " + 
      LongitudeContIns +")" 

, 왜 필드 TEXT 아닌 더 적절한 데이터 형식의 대부분을인가?

+0

예, 정확한 칼럼 이름을 알기를 깜박했다. 나는 정확히 어떻게 내 활동에서 데이터베이스에 액세스 할 수 있는지 그리고 어떻게 삽입을 호출 하는지를 알아야한다.나는 지난 번에 시도한 방식을 추가했다. – kirbby

+0

"더 적절한 유형"은 무엇을 의미합니까? 그들은 모두 텍스트입니다. – kirbby

+0

예 그들은 텍스트를 포함하고 있지만 다량의 텍스트를 저장할 수 있어야합니까? MySQL 문서에서는 "BLOB 및 TEXT 데이터의 경우 정보가 내부적으로 행 버퍼와 다른 메모리 영역에 저장됩니다"라는 메시지가 표시되어 성능 문제가 발생할 수 있습니다. "BLOB 또는 TEXT 열의 인스턴스가 임시 테이블을 사용하면 서버가 메모리가 아닌 디스크의 테이블을 사용하게됩니다. 디스크를 사용하면 성능상의 불이익이 발생하므로 실제로 필요한 경우 BLOB 또는 TEXT 열을 쿼리 결과에 포함하십시오. " – Tony

관련 문제