Java 如何在SQLite中创建多个表、在列中插入值和在列表中检索数据?
我正在制作应用程序来插入数据和检索列表形式的数据。。但是我没有得到任何列表,也没有得到空白页。logcat没有给出任何错误 代码:Components.javaJava 如何在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
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的列。。还有其他语法问题吗?