Android Sqlite初体验

在android中封装好了,sqlite数据库。想要创建一个数据库很简单,只需要实现一个类继承SQLiteOpenHelper.

下面是一个小例子,代码里面有注释:


MyDBHelper.java

package com.example.sqlite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class MyDBHelper extends SQLiteOpenHelper {

	public MyDBHelper(Context context, String name, CursorFactory factory,
			int version) {
		super(context, name, factory, version);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		System.out.println("--------数据库创建操作----");
		db.execSQL("create table user(id integer primary key autoincrement,name varchar(20),age integer)");
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub
		System.out.println("--------数据库更新升级操作-----");
		if(oldVersion < 2 && newVersion ==2){
			//版本升级,新增user表nickname字段,新增user1表
			db.execSQL("alter table user add nickname varchar(20)");
			db.execSQL("create table user1(id integer primary key autoincrement,name varchar(20),age integer)");
			System.out.println("--------数据库升级到2.0版本");
		}
		if(oldVersion < 3  && newVersion ==3){
			//版本升级,新增user1表nickname字段,新增user1表
			db.execSQL("alter table user1 add nickname varchar(20)");
			System.out.println("--------数据库升级到3.0版本");
		}
		
	}

}
MainActivty.java

package com.example.sqlite;

import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import android.os.Build;

public class MainActivity extends Activity {
	MyDBHelper helper;
	int index;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	public void create(View view) {
		//得到helper对象,此操作不会创建数据库
		helper = new MyDBHelper(this, "test.db", null, 1);
		System.out.println("-------------得到helper对象,此操作不会创建数据库------");
		//获取可读或可写SQLiteDatabase对象,此操作才会创建数据库,第一次调用才会创建,以后调用不会创建
		 SQLiteDatabase data = helper.getReadableDatabase();
	}
	
	public void create2(View view) {
		helper = new MyDBHelper(this, "test.db", null, 2);
		helper.getReadableDatabase();
	}
	
	public void create3(View view) {
		helper = new MyDBHelper(this, "test.db", null, 3);
		helper.getReadableDatabase();
	}

	public void insert(View view) {
		//得到一个可写的database对象
		SQLiteDatabase database = helper.getWritableDatabase();
		ContentValues values = new ContentValues();
		values.put("name", "张三"+index);
		values.put("age", 24+index);
		database.insert("user", null, values);
		database.close();
		index++;
	}

	public void query(View view) {
		SQLiteDatabase database = helper.getReadableDatabase();
		Cursor cursor = database.query("user", null, null, null, null, null, null);
//		Cursor cursor  = database.rawQuery("select * from user", null); //等价于上面写法
		while (cursor.moveToNext()) {//遍历游标,调用一次moveToNext,游标向下滚动一次
			String name = cursor.getString(cursor.getColumnIndex("name"));//得到string类型的列
			Integer age = cursor.getInt(cursor.getColumnIndex("age"));//得到int类型的列
			System.out.println("name:"+name+"--age:"+age);
		}
		cursor.close();
		database.close();
	}
	
	public void update(View view) {
		SQLiteDatabase database = helper.getWritableDatabase();
		ContentValues values = new ContentValues();
		values.put("name", "李四");
		int i = database.update("user", values, "name = ?", new String[]{"张三0"});
		System.out.println("--------更新数据,更新了"+i);
		database.close();
	}
	public void delete(View view) {
		SQLiteDatabase database = helper.getWritableDatabase();
		int i = database.delete("user", "name = ?", new String[]{"张三0"});
		System.out.println("--------删除数据,删除了"+i);
		database.close();
	}
}

xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.sqlite.MainActivity"
    tools:ignore="MergeRootFrame" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="create"
            android:text="创建数据库" />

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="create2"
            android:text="创建数据库版本2" />

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="create3"
            android:text="创建数据库版本3" />

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="insert"
            android:text="新增数据" />

        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="query"
            android:text="查询数据" />
        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="update"
            android:text="更新数据" />
        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="delete"
            android:text="删除数据" />
    </LinearLayout>

</FrameLayout>




1. Android中四大组件分别是什么?它们的作用是什么? 答:四大组件分别是Activity、Service、Broadcast Receiver、Content Provider。它们的作用分别是: - Activity:用户界面的展示和交互。 - Service:后台运行的组件,没有用户界面。 - Broadcast Receiver:接收系统或应用发出的广播消息。 - Content Provider:数据共享组件,用于不同应用之间的数据交互。 2. 说一说Intent的作用? 答:Intent是Android中用于传递消息的一种机制,可以在应用内或应用间传递消息。Intent可以启动Activity、Service和Broadcast Receiver,并且也可以传递数据给这些组件。 3. 什么是ANR?如何避免ANR? 答:ANR即应用程序无响应(Application Not Responding),通常是由于主线程被阻塞导致的。为了避免ANR,需要注意以下几点: - 不要在主线程中进行耗时操作,例如网络请求和大量的计算。 - 避免在主线程中进行阻塞IO操作。 - 尽可能使用异步任务和线程池。 - 将耗时操作放入Service或者IntentService中处理。 4. 什么是Fragment?Fragment和Activity有什么区别? 答:Fragment是一种可以嵌入到Activity中的组件,可以在一个Activity中展示多个Fragment,也可以在多个Activity中复用同一个Fragment。Fragment可以看作是Activity中的一个子模块,具有自己的生命周期和用户界面。 区别: - Fragment需要依附于Activity才能使用,而Activity是独立的。 - Fragment可以被多个Activity复用,Activity只能使用一次。 - Fragment有自己的生命周期,Activity有自己的生命周期。 5. 什么是Handler?如何使用Handler? 答:Handler是Android中的消息机制,用于异步处理消息和更新UI。通过Handler可以将消息发送到主线程的消息队列中,然后在主线程中处理这些消息。 使用Handler的步骤: - 创建一个Handler对象,通常在主线程中创建,因为Handler会绑定主线程的消息队列。 - 在后台线程中发送消息到Handler中。 - 在主线程中处理消息。 6. 什么是RecyclerView?它和ListView的区别是什么? 答:RecyclerView是一种高度可定制化的列表控件,可以展示大量的数据,并且支持滚动和快速滑动。它和ListView的主要区别是: - RecyclerView的布局可以自由定制,可以实现瀑布流等效果。 - RecyclerView的ViewHolder可以复用,可以大大提高列表的效率。 - RecyclerView支持动画效果,可以实现更加流畅的用户体验。 7. 如何实现数据的持久化? 答:Android中有多种方式可以实现数据的持久化,包括: - Shared Preferences:用于存储少量的简单数据,例如应用的配置信息。 - 文件存储:可以通过FileOutputStream和FileInputStream将数据以文件的形式存储到本地。 - SQLite数据库:用于存储大量的结构化数据,例如应用的用户信息和日志等。 - Content Provider:用于不同应用之间的数据共享。 8. 什么是Service?它和Thread的区别是什么? 答:Service是Android中的一种后台运行的组件,用于处理一些长时间运行的任务。它和Thread的主要区别是: - Service是Android中的一种组件,可以和其他组件进行交互,而Thread是Java中的一种线程,不能直接和其他组件进行交互。 - Service可以在后台运行,即使应用被关闭也可以继续运行,而Thread需要在应用中运行。 - Service可以通过Intent启动和停止,而Thread需要手动创建和销毁。 9. Android中常用的布局有哪些? 答:Android中常用的布局有: - LinearLayout:线性布局,可以将子控件排列成水平或垂直方向。 - RelativeLayout:相对布局,可以根据控件之间的相对位置进行排列。 - FrameLayout:帧布局,可以将子控件叠加在一起。 - ConstraintLayout:约束布局,可以通过设置控件之间的约束关系进行排列。 10. 如何实现Activity之间的数据传递? 答:可以通过Intent来实现Activity之间的数据传递。Intent可以通过putExtra()方法将数据放入Intent中,然后在目标Activity中通过getExtra()方法获取数据。例如: ```java // 在源Activity中传递数据 Intent intent = new Intent(this, TargetActivity.class); intent.putExtra("key", "value"); startActivity(intent); // 在目标Activity中获取数据 String value = getIntent().getStringExtra("key"); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值