Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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
Java 如何在SQLite中创建多个表、在列中插入值和在列表中检索数据?_Java_Android_Sqlite - Fatal编程技术网

Java 如何在SQLite中创建多个表、在列中插入值和在列表中检索数据?

Java 如何在SQLite中创建多个表、在列中插入值和在列表中检索数据?,java,android,sqlite,Java,Android,Sqlite,我正在制作应用程序来插入数据和检索列表形式的数据。。但是我没有得到任何列表,也没有得到空白页。logcat没有给出任何错误 代码:Components.java public class Components extends Activity implements OnClickListener { Button b1,b2,b3,b4; @Override public void onCreate(Bundle savedInstanceStat

我正在制作应用程序来插入数据和检索列表形式的数据。。但是我没有得到任何列表,也没有得到空白页。logcat没有给出任何错误

代码:Components.java

  public class Components extends Activity implements OnClickListener {
      Button b1,b2,b3,b4;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_components);        
            Intent i = getIntent();
            b1= (Button) findViewById(R.id.mobile);
            b2= (Button) findViewById(R.id.camera); 
            b3= (Button) findViewById(R.id.computer);
            b4= (Button) findViewById(R.id.bike);        
            b1.setOnClickListener(this);                
        }
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if (v.getId() == R.id.mobile) {
                           Sqlite sqll = new Sqlite(this);
             sqll.insertMobile();
                Intent h = new Intent(Components.this, Mobile.class);
                startActivity(h);
            }
        }   
    }
代码:Sqlite.java

public class Sqlite extends SQLiteOpenHelper {
    public static final String DB_NAME = "Get_Price";
    public static final int DB_VERSION = 1;

    public static final String MTABLE_NAME = "mobile";
    public static final String COLUMN_MNAME= "mname";
    public static final String COLUMN_MMODEL= "model";
    public static final String COLUMN_MPRICE= "mprice";
    public static final String COLUMN_MCAMERA= "mcamera";

    public static final String CTABLE_NAME = "camera";
    public static final String COLUMN_CNAME= "cname";
    public static final String COLUMN_CMODEL= "cmodel";
    public static final String COLUMN_CPRICE= "cprice";
    public static final String COLUMN_CCAMERA= "ccamera";

    public static final String BTABLE_NAME = "bike";
    public static final String COLUMN_BNAME= "bname";
    public static final String COLUMN_BMODEL= "bmodel";
    public static final String COLUMN_BPRICE= "bprice";

    public static final String LTABLE_NAME = "laptop";
    public static final String COLUMN_LNAME= "lname";
    public static final String COLUMN_LMODEL= "lmodel";
    public static final String COLUMN_LPRICE= "lprice";

    public Sqlite(Context context) {
        super(context, DB_NAME, null, 1);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        String CreateTableMoblie = "CREATE TABLE " + MTABLE_NAME + " ( " + COLUMN_MNAME + " TEXT, " + COLUMN_MMODEL + " TEXT "
                                                                   + COLUMN_MPRICE + " TEXT, " + COLUMN_MCAMERA + " TEXT " + " ) ";

        db.execSQL(CreateTableMoblie);

        String CreateTableCamera = "CREATE TABLE " + CTABLE_NAME + " ( " + COLUMN_CNAME + " TEXT, " + COLUMN_CMODEL + " TEXT "
                                                                   + COLUMN_CPRICE + " TEXT, " + COLUMN_CCAMERA + " TEXT " + " ) ";
        db.execSQL(CreateTableCamera);

        String CreateTableBike = "CREATE TABLE " + BTABLE_NAME + " ( " + COLUMN_BNAME + " TEXT, " + COLUMN_BMODEL + " TEXT "
                                                                    + COLUMN_BPRICE + " TEXT " + " ) ";
        db.execSQL(CreateTableBike);

        String CreateTableLaptop = "CREATE TABLE " + LTABLE_NAME + " ( " + COLUMN_LNAME + " TEXT, " + COLUMN_LMODEL + " TEXT "
                + COLUMN_LPRICE + " TEXT " + " ) ";
        db.execSQL(CreateTableLaptop);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        db.execSQL("DROP TABLE IF EXISTS " +MTABLE_NAME );  
        db.execSQL("DROP TABLE IF EXISTS " +CTABLE_NAME );
        db.execSQL("DROP TABLE IF EXISTS " +BTABLE_NAME );  
        db.execSQL("DROP TABLE IF EXISTS " +LTABLE_NAME );
        onCreate(db);
    }
    public long insertMobile() {
        SQLiteDatabase database = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("mname","samsung" );
        values.put("mmodel","samsung2s" );
        values.put("mprice",5000 );
        values.put("mcamera","yes" );
        database.insert("mobile", null, values);

        values.put("mname","nokia" );                       
        values.put("mmodel","nokia1100" );
        values.put("mprice",2000 );                       
        values.put("mcamera","no" );
        database.insert("mobile", null, values);

        values.put("mname","sony xperia" );
        values.put("mmodel","xperia100" ); 
        values.put("mprice","30000" );
        values.put("mcamera","yes" );  
        return database.insert("mobile", null, values);             
    }  
}
代码:Mobile.java

public class Mobile extends ListActivity {
    Sqlite sql = new Sqlite(this);
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mobile);
        Intent h= getIntent();             
         ArrayList<HashMap<String, String>> MobileList = getAllMobiles();
     ListAdapter adapter = new SimpleAdapter(Mobile.this, MobileList, R.layout.mobile_names,
             new String[] {Sqlite.COLUMN_MNAME}, new int[] {R.id.nameofmobile});
     setListAdapter(adapter);       
    }
    public ArrayList<HashMap<String,String>> getAllMobiles() {
        ArrayList <HashMap<String,String>> wordlist;
        wordlist= new ArrayList <HashMap<String, String>>();
        String Query = "SELECT * FROM mobile";  

        SQLiteDatabase database = sql.getWritableDatabase();

        Cursor cursor = database.rawQuery(Query, null);
        if (cursor.moveToFirst()) {
            do {
            HashMap<String,String> map = new HashMap<String, String>();
            map.put(Sqlite.COLUMN_MNAME, cursor.getString(0));
            map.put(Sqlite.COLUMN_MMODEL, cursor.getString(1));
            map.put(Sqlite.COLUMN_MPRICE, cursor.getString(2));
            map.put(Sqlite.COLUMN_MCAMERA, cursor.getString(3));
            wordlist.add(map);
            } while (cursor.moveToNext());
        }
        return wordlist;        
    }
}
公共类移动扩展列表活动{
Sqlite sql=新Sqlite(此);
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mobile);
Intent h=getIntent();
ArrayList MobileList=getAllMobiles();
ListAdapter=新的SimpleAdapter(Mobile.this、MobileList、R.layout.Mobile\u名称,
新字符串[]{Sqlite.COLUMN_MNAME},新int[]{R.id.nameofmobile});
setListAdapter(适配器);
}
公共阵列列表getAllMobiles(){
ArrayList词表;
wordlist=newarraylist();
String Query=“从手机中选择*”;
SQLiteDatabase=sql.getWritableDatabase();
Cursor=database.rawQuery(查询,空);
if(cursor.moveToFirst()){
做{
HashMap=newHashMap();
map.put(Sqlite.COLUMN_MNAME,cursor.getString(0));
map.put(Sqlite.COLUMN_MMODEL,cursor.getString(1));
map.put(Sqlite.COLUMN_-MPRICE,cursor.getString(2));
map.put(Sqlite.COLUMN_MCAMERA,cursor.getString(3));
添加(地图);
}while(cursor.moveToNext());
}
返回词表;
}
}
日志:

04-03 12:11:32.774: E/SQLiteLog(609): (1) table mobile has no column named mprice
04-03 12:11:32.804: E/SQLiteDatabase(609): Error inserting mname=samsung mcamera=yes mprice=5000 mmodel=samsung2s
04-03 12:11:32.804: E/SQLiteDatabase(609): android.database.sqlite.SQLiteException: table mobile has no column named mprice (code 1): , while compiling: INSERT INTO mobile(mname,mcamera,mprice,mmodel) VALUES (?,?,?,?)
04-03 12:11:32.804: E/SQLiteDatabase(609):  at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
04-03 12:11:32.804: E/SQLiteDatabase(609):  at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
04-03 12:11:32.804: E/SQLiteDatabase(609):  at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
04-03 12:11:32.804: E/SQLiteDatabase(609):  at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
04-03 12:11:32.804: E/SQLiteDatabase(609):  at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
04-03 12:11:32.804: E/SQLiteDatabase(609):  at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
04-03 12:11:32.804: E/SQLiteDatabase(609):  at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1467)
04-03 12:11:32.804: E/SQLiteDatabase(609):  at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)
04-03 12:11:32.804: E/SQLiteDatabase(609):  at com.example.get_price.Sqlite.insertMobile(Sqlite.java:85)
04-03 12:11:32.804: E/SQLiteDatabase(609):  at com.example.get_price.Components.onClick(Components.java:32)
04-03 12:11:32.804: E/SQLiteDatabase(609):  at android.view.View.performClick(View.java:4084)
04-03 12:11:32.804: E/SQLiteDatabase(609):  at android.view.View$PerformClick.run(View.java:16966)
04-03 12:11:32.804: E/SQLiteDatabase(609):  at android.os.Handler.handleCallback(Handler.java:615)
04-03 12:11:32.804: E/SQLiteDatabase(609):  at android.os.Handler.dispatchMessage(Handler.java:92)
04-03 12:11:32.804: E/SQLiteDatabase(609):  at android.os.Looper.loop(Looper.java:137)
04-03 12:11:32.804: E/SQLiteDatabase(609):  at android.app.ActivityThread.main(ActivityThread.java:4745)
04-03 12:11:32.804: E/SQLiteDatabase(609):  at java.lang.reflect.Method.invokeNative(Native Method)
04-03 12:11:32.804: E/SQLiteDatabase(609):  at java.lang.reflect.Method.invoke(Method.java:511)
04-03 12:11:32.804: E/SQLiteDatabase(609):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
04-03 12:11:32.804: E/SQLiteDatabase(609):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
04-03 12:11:32.804: E/SQLiteDatabase(609):  at dalvik.system.NativeStart.main(Native Method)
04-03 12:11:32.774:E/SQLiteLog(609):(1)table mobile没有名为mprice的列
04-03 12:11:32.804:E/SQLiteDatabase(609):插入mname=samsung mcamera=yes mprice=5000 mmodel=samsung2s时出错
04-03 12:11:32.804:E/SQLiteDatabase(609):android.database.sqlite.SQLiteException:table mobile没有名为mprice(代码1)的列,编译时:插入到mobile(mname、mcamera、mprice、mmodel)值(?,,?)
04-03 12:11:32.804:E/SQLiteDatabase(609):在android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法)
04-03 12:11:32.804:E/SQLiteDatabase(609):在android.database.sqlite.SQLiteConnection.acquiredpreparedstatement(SQLiteConnection.java:882)
04-03 12:11:32.804:E/SQLiteDatabase(609):在android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
04-03 12:11:32.804:E/SQLiteDatabase(609):在android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
04-03 12:11:32.804:E/SQLiteDatabase(609):位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
04-03 12:11:32.804:E/SQLiteDatabase(609):位于android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31)
04-03 12:11:32.804:E/SQLiteDatabase(609):位于android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1467)
04-03 12:11:32.804:E/SQLiteDatabase(609):位于android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)
04-03 12:11:32.804:E/SQLiteDatabase(609):位于com.example.get_price.Sqlite.insertMobile(Sqlite.java:85)
04-03 12:11:32.804:E/SQLiteDatabase(609):位于com.example.get_price.Components.onClick(Components.java:32)
04-03 12:11:32.804:E/SQLiteDatabase(609):在android.view.view.performClick(view.java:4084)
04-03 12:11:32.804:E/SQLiteDatabase(609):位于android.view.view$PerformClick.run(view.java:16966)
04-03 12:11:32.804:E/SQLiteDatabase(609):位于android.os.Handler.handleCallback(Handler.java:615)
04-03 12:11:32.804:E/SQLiteDatabase(609):位于android.os.Handler.dispatchMessage(Handler.java:92)
04-03 12:11:32.804:E/SQLiteDatabase(609):位于android.os.Looper.loop(Looper.java:137)
04-03 12:11:32.804:E/SQLiteDatabase(609):位于android.app.ActivityThread.main(ActivityThread.java:4745)
04-03 12:11:32.804:E/SQLiteDatabase(609):位于java.lang.reflect.Method.invokenactive(本机方法)
04-03 12:11:32.804:E/SQLiteDatabase(609):位于java.lang.reflect.Method.invoke(Method.java:511)
04-03 12:11:32.804:E/SQLiteDatabase(609):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
04-03 12:11:32.804:E/SQLiteDatabase(609):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
04-03 12:11:32.804:E/SQLiteDatabase(609):位于dalvik.system.NativeStart.main(本机方法)
我得到了这个错误

表mobile没有名为mprice的列

mmodel和mprice之间缺少一个
逗号:

String CreateTableMoblie = "CREATE TABLE " + MTABLE_NAME + " ( " + COLUMN_MNAME + " TEXT, " + COLUMN_MMODEL + " TEXT "
                                                               + COLUMN_MPRICE + " TEXT, " + COLUMN_MCAMERA + " TEXT " + " ) ";
应该是

String CreateTableMoblie = "CREATE TABLE " + MTABLE_NAME + " ( " + COLUMN_MNAME + " TEXT, " + COLUMN_MMODEL + " TEXT, "
                                                               + COLUMN_MPRICE + " TEXT, " + COLUMN_MCAMERA + " TEXT " + " ) ";

在这里更改模式后,例如卸载应用程序,以便删除旧的数据库文件。

您在哪里调用了
insertMobile()
method?我在Sqlite类中创建了method。因此,随着表的创建。。数据是否会自动插入??或者我应该在同一个类中调用此方法??我应该在哪里调用??尝试在活动中创建sqlite类的对象。在你的活动的
OnCreate
method中调用这个函数。一个函数中有很多问题……问题不多。。只是我认为Sqlit类没有被执行,也没有表。。数据库和所有已创建..@apurva unistall安装应用程序并再次安装,或清除应用程序管理器中的数据,以便它将再次生成db文件,因为它给出的错误表mobile没有名为mmodel的列。。还有其他语法问题吗?