Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 创建数据库并在其中插入多条记录_Android_Insert_Sqlite_Android Sqlite_Sqliteopenhelper - Fatal编程技术网

Android 创建数据库并在其中插入多条记录

Android 创建数据库并在其中插入多条记录,android,insert,sqlite,android-sqlite,sqliteopenhelper,Android,Insert,Sqlite,Android Sqlite,Sqliteopenhelper,我想用SQLite数据库中的数据填充我的listView。但是在填充之前,我必须创建数据库并用一些记录填充它 我有一个sql文件,其中包含insert查询和作为记录插入的相应值 比如说,它包含类似于插入“tablename”(data1,data2)值('1','2'),('3','4')等的查询 因此,我只需要在SQLite DB中执行相同的查询,并通过在SQLite DB表单中映射此查询将数据插入表中。对于多条记录插入,我在metouractivity.java中运行了以下查询,我想在其中显

我想用SQLite数据库中的数据填充我的listView。但是在填充之前,我必须创建数据库并用一些记录填充它

我有一个sql文件,其中包含insert查询和作为记录插入的相应值

比如说,它包含类似于插入“tablename”(data1,data2)值('1','2'),('3','4')等的查询

因此,我只需要在SQLite DB中执行相同的查询,并通过在SQLite DB表单中映射此查询将数据插入表中。对于多条记录插入,我在metouractivity.java中运行了以下查询,我想在其中显示ListView:

INSERT INTO 'tablename' SELECT 'data1' AS 'col1', 'data2' AS 'col2'
UNION SELECT 'value1', 'value2'
UNION SELECT 'value3', 'value4' 
and so on..
下面是我的SQLiteOpenHelper类:

public class ToursOpenHelper extends SQLiteOpenHelper{
    public static final String DATABASE_NAME="WeTrip_DB";
    public static final int DATABASE_VERSION=1;
    //table's abstract implementations using BASECOLUMNS
    public static abstract class tourEntry implements BaseColumns
    {

        public static final String TABLE="tour";
        public static final String TOURTYPE="tour_type";
        public static final String TOURNAME="tour_name";
        public static final String NIGHTS="nights";
        public static final String DAYS="days";
        public static final String PIC="pic";
    }

    public static abstract class tourcatEntry implements BaseColumns
    {
        public static final String TABLE="tour_cat";
        public static final String TOURCAT_DESC="tourcat_desc";
        public static final String TOURCAT_NAME="tourcat_name";
        public static final String TOURCAT_IMG="tourcat_img";
    }

    public static abstract class tourdestEntry implements BaseColumns
    {
        public static final String TABLE="tour_dest";
        public static final String TOUR_ID="tour_id";
        public static final String DEST_ID="dest_id";
    }

    public static abstract class destEntry implements BaseColumns
    {
        public static final String TABLE="destination";
        public static final String DEST_NAME="dest_name";
    }

    //create DB TABLES
    public static final String CREATE_TABLE_TOUR="CREATE TABLE "+tourEntry.TABLE + 
            "(" 
            + tourEntry._ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+
            tourEntry.TOURTYPE + " INTEGER ," +
            tourEntry.TOURNAME + " TEXT ," +
            tourEntry.NIGHTS + " INTEGER ," + 
            tourEntry.DAYS + " INTEGER ,"+
            tourEntry.PIC + " TEXT)";

    public static final String CREATE_TABLE_TOURCAT="CREATE TABLE "+tourcatEntry.TABLE + 
            "(" 
            + tourcatEntry._ID+" INTEGER PRIMARY KEY AUTOINCREMENT , "+
            tourcatEntry.TOURCAT_NAME + " TEXT ," +
            tourcatEntry.TOURCAT_DESC + " TEXT ," +
            tourcatEntry.TOURCAT_IMG + " TEXT)";

    public static final String CREATE_TABLE_TOURDEST="CREATE TABLE "+tourdestEntry.TABLE + 
            "(" 
            + tourdestEntry._ID+" INTEGER PRIMARY KEY AUTOINCREMENT , "+
            tourdestEntry.TOUR_ID + " INTEGER ," +
            tourdestEntry.DEST_ID + " INTEGER)";

    public static final String CREATE_TABLE_DEST="CREATE TABLE "+destEntry.TABLE + 
            "(" 
            + destEntry._ID+" INTEGER PRIMARY KEY AUTOINCREMENT , "+
            destEntry.DEST_NAME + " TEXT)";
    //DELETE DB TABLES
    public static final String DELETE_TABLE_TOUR="DROP TABLE "+tourEntry.TABLE + " IF EXISTS ";
    public static final String DELETE_TABLE_TOURCAT="DROP TABLE "+tourcatEntry.TABLE + " IF EXISTS ";
    public static final String DELETE_TABLE_TOURDEST="DROP TABLE "+tourdestEntry.TABLE + " IF EXISTS ";
    public static final String DELETE_TABLE_DEST="DROP TABLE "+destEntry.TABLE + " IF EXISTS ";

    public ToursOpenHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        db.execSQL(CREATE_TABLE_TOUR);
        db.execSQL(CREATE_TABLE_TOURCAT);
        db.execSQL(CREATE_TABLE_TOURDEST);
        db.execSQL(CREATE_TABLE_DEST);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        db.execSQL(DELETE_TABLE_TOUR);
        db.execSQL(DELETE_TABLE_TOURCAT);
        db.execSQL(DELETE_TABLE_TOURDEST);
        db.execSQL(DELETE_TABLE_DEST);
    }    
}
下面是我的ThemeToursActivity.java,其中必须从数据库填充旅游列表视图:

package com.example.travelplanner;

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

public class ThemeTourActivity extends Activity implements OnItemClickListener {

    //ArrayList<ThemeTourModel> tour_details = themeTourResults();
    SQLiteDatabase db;
    ToursOpenHelper helper;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_theme_tour);
        final ListView tourList = (ListView)findViewById(R.id.theme_tour_listview);
        tourList.setAdapter(new ThemeTourCustomAdapter(this,tour_details));
        tourList.setOnItemClickListener(this);

        helper = new ToursOpenHelper(this);
        db = helper.getWritableDatabase();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.theme_tour, menu);
        return true;
    }

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        // TODO Auto-generated method stub

    }

}
package.com.example.travelplanner;
导入java.util.ArrayList;
导入android.os.Bundle;
导入android.app.Activity;
导入android.database.sqlite.SQLiteDatabase;
导入android.view.Menu;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.ListView;
公共类ThemeTourActivity扩展活动实现了McClickListener{
//ArrayList tour_details=themeTourResults();
sqlitedb数据库;
ToursOpenHelper助手;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u theme\u tour);
最终ListView tourList=(ListView)findViewById(R.id.theme\u tour\u ListView);
tourList.setAdapter(新主题为Tourcustomadapter(此主题为Touru详细信息));
tourList.setOnItemClickListener(此);
helper=新的ToursOpenHelper(此);
db=helper.getWritableDatabase();
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.theme\u教程,菜单);
返回true;
}
@凌驾
公共视图单击(AdapterView arg0、视图arg1、整型arg2、长型arg3){
//TODO自动生成的方法存根
}
}

我对如何实现这一目标感到困惑。我只想创建一个数据库,在其中插入多条记录,检索数据并填充listView。如果有人能引导我度过这一关,那将是一个很大的帮助。在过去的几天里,我一直在关注它。

如果您想插入值,那么您可以像这样在SQLHelper类中创建函数

public void InsertData(String Name,int Age,int Address)
    {
        ContentValues values = new ContentValues();  

        values.put("Name",Name); 
        values.put("Age", Age); 
        values.put("Address", Address);

        this.db.insert(Table_Name, null, values);
    }
public Cursor GetData() throws Exception 
    {   
        Cursor cursor;

        cursor = this.db.query(Table_Name,null, null, null, null, null, null,null );

        return cursor;
    }
(在“内容值”中,您将把列名及其值存储在表中)

如果你想得到这个值,就这样做

public void InsertData(String Name,int Age,int Address)
    {
        ContentValues values = new ContentValues();  

        values.put("Name",Name); 
        values.put("Age", Age); 
        values.put("Address", Address);

        this.db.insert(Table_Name, null, values);
    }
public Cursor GetData() throws Exception 
    {   
        Cursor cursor;

        cursor = this.db.query(Table_Name,null, null, null, null, null, null,null );

        return cursor;
    }
若要获取特定的列值,则可以在表名之后传递列名数组。它将返回游标,因此请为列表视图使用游标适配器

Cursor c = db.GetData();


ListLayout mCursorAdapter = new ListLayout(
                        getApplicationContext(),                    // The application's Context object
                        R.layout.list_item,        // A layout in XML for one row in the ListView
                        c,                                          // The result from the query
                        new String[] {"Name"},      // A string array of column names in the cursor
                        new int[] { R.id.txtName },0);          // An integer array of view IDs in the row layout


                // Sets the adapter for the ListView
                lv.setAdapter(mCursorAdapter);

如果你只想插入数据,那很容易。你说的“只插入”到底是什么意思?是的,我明白…但我说的是插入500条记录。。我必须使用contentValue的values.put方法手动添加它们吗?看看我提到的查询,SELECT&UNION-SELECT查询..db.rawQuery(“插入“+INSPECTOR\u-TABLE+”(“+INSPECTOR\u-NAME+”)+“选择‘Joe-Bloggs’作为”+INSPECTOR\u-NAME+“UNION-ALL-SELECT‘John-Major’UNION-ALL-SELECT‘Dan-the-man’”,null);INSPECTOR_NAME是我认为的列名……那么为什么我们要使用SELECT'Joe Blogg'作为“+检查员姓名?另外,Select语句通常用于检索数据,那么为什么它用于插入多条记录。最后,为什么UNION Select是错误的?我的朋友。。In select语句返回数据,以便将数据插入表中。我无法理解您的上一个que。就que 1而言,当您希望一次插入多个值时,可以使用union all with select语句。select语句将返回传递给插入值的insert语句的值。Union All意味着我们正在使用来自select查询的所有数据。如果使用Uninon,则只会插入唯一(不相同)的数据