2011-01-06 19 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文を書きました別のものを試してみましたが、私は仕事をすることができませんでした。 私は自分のアクティビティでデータベースにアクセスするにはどうすればいいですか? と私はどのように動作するように挿入するのですか? そして、 ?私はそれだけで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"); 

} 

}

を試してみましたか あなたの助けに感謝

のthats

もう一つの質問は、挿入を入れて、別のクラスに各テーブルから選択する方が良いです、私は各テーブルの1クラスを持っているか、DBAdapterクラス?

+1

どうしたらうまくいかないのですか?何かエラーがありますか?何か? –

+0

あなたの正確な問題を明記してください。 DBに接続できません。 INSERTは失敗しますか? ...関連するエラーメッセージを表示することを忘れないでください。 –

+0

強制的に強制終了するエラーメッセージは表示されません。 – kirbby

答えて

0

編集:あなたのコードをすべて表示しているとは確信していません。変数IDCont、NameCont、StreetCont ...はどこで宣言しますか?私はそれらがあなたのフィールドの名前を定義する定数であると仮定します。その場合、有効なINSERT文を作成する必要があるので、私の答えは正しくありません。

表示されているエラーメッセージと、使用しているDBサーバーに固有のエラーメッセージを追加できますか?あなたが関数に渡された変数の値を挿入するのではなく、列の名前を指定しているので、


あなた INSERT文では動作しません。

なステートメントの最初の部分は、すべて1つの文字列でなければなりません:私はまた、あなたのテーブルのデザインを問うだろう

"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

関連する問題