具有 5 个表的数据库,具有插入和选择功能

发布于 2024-10-10 11:12:33 字数 8483 浏览 3 评论 0原文

我的问题是我有 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类中?

my problem is that i have 5 tables and need inserts and selects.

what i did is for every table a class and there i wrote the SQL Statements like this

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

    }

i have a DBAdapter class there i created the database

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

i found so many different things and tried them but i didn't get anything to work...
i need to know how can i access the database in my activity
and how i can get the insert to work
and is there sth wrong in my code?
thanks for your help

thats how i tried to get it into my activity

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

}

}

i tried it with my country table because it has only 3 columns

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

    }

another question is it better to put the insert and select from each table into a separate class, so i have 1 class for each table or put them all into the DBAdapter class?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

谢绝鈎搭 2024-10-17 11:12:33

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

您能否添加您看到的错误消息以及您正在使用的数据库服务器的更具体信息?


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

EDIT: I'm not sure you have shown all your code and therefore I'm not sure my answer is helpful. Where do you declare the variables IDCont, NameCont, StreetCont ... ? I assume they are constants defining the names of your fields. In which case my answer is not correct as that should form a valid INSERT statement.

Can you add the error messages you are seeing as well as being more specific on the DB server you are using?



Your INSERT statement will not work because you are inserting the values of the variables passed to the function, instead of specifying the names of the columns.

The first part of the statment should be all one string:

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


I would also question your table design, why are most of the fields TEXT and not a more appropriate data type?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文