带有5个带插入和选择表的数据库

时间:2011-01-06 10:05:23

标签: sql android sqlite select insert

我的问题是我有5个表,需要插入和选择。

我所做的是为每个表创建一个类,并在那里编写了像这样的SQL语句

    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;   
        }

    }

我有一个DBAdapter类,我创建了数据库

 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);
        }

我找到了很多不同的东西并尝试过但我没有得到任何工作...... 我需要知道如何在我的活动中访问数据库 以及我如何让插入工作 我的代码中有错误吗? 谢谢你的帮助

这就是我如何尝试将其纳入我的活动

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");

}

}

我尝试使用我的国家/地区表,因为它只有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;   
        }

    }

另一个问题是将插入和从每个表中选择放入一个单独的类更好,所以每个表有1个类或者将它们全部放入DBAdapter类中?

1 个答案:

答案 0 :(得分:0)

编辑:我不确定您是否展示了所有代码,因此我不确定我的回答是否有帮助。你在哪里声明变量IDCont,NameCont,StreetCont ......?我假设它们是定义字段名称的常量。在这种情况下,我的答案不正确,因为它应该形成有效的INSERT语句。

您是否可以添加所看到的错误消息,以及在您使用的数据库服务器上更具体?


<击> 您的INSERT语句将无效,因为您正在插入传递给函数的变量值,而不是指定列的名称。

该陈述的第一部分应该是一个字符串:

"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而不是更合适的数据类型?