• Android数据读取之Sqlite数据库操作


    咱们书接上文,继续来说说Android数据读取,这回,我们要讲的是Sqlite数据库的相关操作。以一个实例开始吧:

    首先,上图,看看做成后的效果:

    大概描述:类似于浏览器的收藏夹,网站名称,网站地址,网站描述,添加完成之后显示已添加的所有的内容,在ListView单击弹出是否删除对话框,删除成功后刷新视图并重新查询内容。

    安卓提供了创建和使用SQLite数据库的API。SQLiteDataBase代表一个数据库对象,提供了操作数据库的一些方法,另外还有一个SQLiteOpenHelper工具类更简洁的功能。


    实例的文件组织如下:


    main.xml是添加界面,query.xml是查询界面,DBHelper是数据库操作类,MainActivity和QueryActivity分别对应main和query的Activity,其中,QueryActivity继承ListActivity。源代码如下:

    DBHelper.java

    package com.lzugis.database;
    
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    
    public class DBHelper extends SQLiteOpenHelper
    {
    	//数据库名称
    	private static final String DB_NAME="coll.db";
    	//表名称
    	private static final String TBL_NAME="CollTbl";
    	//创建表SQL语句
    	private static final String CREATE_TBL=" create table "
    			+" CollTbl(_id integer primary key autoincrement,name text,url text,desc text)";
    	//SQLiteDatabase实例
    	private SQLiteDatabase db;
    	
    	/*
    	 * 构造方法
    	 */
    	DBHelper(Context c){
    		super(c,DB_NAME,null,2);
    	};
    	/*
    	 * 创建表
    	 * @see android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite.SQLiteDatabase)
    	 */
    	public void onCreate(SQLiteDatabase db)
    	{
    		this.db=db;
    		db.execSQL(CREATE_TBL);
    	}
    	/*
    	 * 插入方法
    	 */
    	public void insert(ContentValues values)
    	{
    		//获得SQLiteDatabase实例
    		SQLiteDatabase db=getWritableDatabase();
    		//插入
    		db.insert(TBL_NAME, null, values);
    		//关闭
    		db.close();
    	}
    	/*
    	 * 查询方法
    	 */
    	public Cursor query()
    	{
    		//获得SQLiteDatabase实例
    		SQLiteDatabase db=getWritableDatabase();
    		//查询获得Cursor
    		Cursor c=db.query(TBL_NAME, null, null, null, null, null, null);
    		return c;
    	}
    	/*
    	 * 删除方法
    	 */
    	public void del(int id)
    	{
    		if(db==null)
    		{
    			//获得SQLiteDatabase实例
    			db=getWritableDatabase();			
    		}
    		//执行删除
    		db.delete(TBL_NAME, "_id=?", new String[]{String.valueOf(id)});		
    	}
    	/*
    	 * 关闭数据库
    	 */
    	public void colse()
    	{
    		if(db!=null)
    		{
    			db.close();
    		}
    	}
    	@Override
    	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    		// TODO Auto-generated method stub
    		
    	}
    }
    main.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="网站名称" />
    
        <EditText
            android:id="@+id/EditTextName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10" >
    
            <requestFocus />
        </EditText>
    
        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="网站地址" />
    
        <EditText
            android:id="@+id/EditTextUrl"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10" />
    
        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="网站描述" />
    
        <EditText
            android:id="@+id/EditTextDesc"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:ems="10" />
    
        <Button
            android:id="@+id/ButtonAdd"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="添加" />
    
    </LinearLayout>
    MainActivity.java

    package com.lzugis.database;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.ContentValues;
    import android.content.Intent;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    
    public class MainActivity extends Activity {
    	private EditText etName,etUrl,etDesc;
    	private Button btnAdd;
    	
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    		etName=(EditText)findViewById(R.id.EditTextName);
    		etUrl=(EditText)findViewById(R.id.EditTextUrl);
    		etDesc=(EditText)findViewById(R.id.EditTextDesc);
    		
    		btnAdd=(Button)findViewById(R.id.ButtonAdd);
    		btnAdd.setOnClickListener(new OnClickListener(){
    
    			@Override
    			public void onClick(View v) {
    				// TODO Auto-generated method stub
    				String name=etName.getText().toString();
    				String url=etUrl.getText().toString();
    				String desc=etDesc.getText().toString();
    				//内容值实例
    				ContentValues values=new ContentValues();
    				//在value中添加信息
    				values.put("name",name);
    				values.put("url", url);
    				values.put("desc", desc);
    				//实例化数据帮助类
    				DBHelper helper=new DBHelper(getApplicationContext());
    				//插入数据
    				helper.insert(values);
    				//实例化intent
    				Intent intent=new Intent(MainActivity.this,QueryActivity.class);
    				//启动Activity
    				startActivity(intent);
    			}
    			
    		});
    	}
    
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {
    		// Inflate the menu; this adds items to the action bar if it is present.
    		getMenuInflater().inflate(R.menu.main, menu);
    		return true;
    	}
    
    }

    query.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
        <TextView
            android:id="@+id/text0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingRight="10pt" />
    
        <TextView
            android:id="@+id/text1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingRight="10pt" />
    
        <TextView
            android:id="@+id/text2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingRight="10pt" />
    
        <TextView
            android:id="@+id/text3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingRight="10pt" />
    
    </LinearLayout>

    QueryActivity.java

    package com.lzugis.database;
    
    import android.os.Bundle;
    import android.app.AlertDialog;
    import android.app.ListActivity;
    import android.content.DialogInterface;
    import android.database.Cursor;
    import android.support.v4.widget.SimpleCursorAdapter;
    import android.view.Menu;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ListView;
    
    public class QueryActivity extends ListActivity {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		//设置标题
    		this.setTitle("浏览收藏信息");
    		//实例化数据库帮助类
    		final DBHelper helper=new DBHelper(this);
    		//查询获得游标
    		Cursor c=helper.query();
    		//列表项数组
    		String[] from={"_id","name","url","desc"};
    		//列表项ID
    		int[] to={R.id.text0,R.id.text1,R.id.text2,R.id.text3};
    		//适配器
    		SimpleCursorAdapter apt=new SimpleCursorAdapter(this,R.layout.query,c,from,to);
    		//列表视图
    		ListView listview =getListView();
    		//为列表视图添加适配器
    		listview.setAdapter(apt);
    		
    		//提示对话框
    		final AlertDialog.Builder builder=new AlertDialog.Builder(this);
    		//为listView添加监听器
    		listview.setOnItemClickListener(new OnItemClickListener(){
    
    			@Override
    			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
    					long arg3) {
    				// TODO Auto-generated method stub
    				final long temp=arg3;
    				builder.setMessage("真的要删除记录吗?")
    					   .setPositiveButton("是", new DialogInterface.OnClickListener() {						
    						@Override
    						public void onClick(DialogInterface dialog, int which) {
    							// TODO Auto-generated method stub
    							//删除数据
    							helper.del((int)temp);
    							//重新查询
    							Cursor c=helper.query();
    							//列表项数组
    							String[] from={"_id","name","url","desc"};
    							//列表项ID
    							int[] to={R.id.text0,R.id.text1,R.id.text2,R.id.text3};
    							//适配器
    							SimpleCursorAdapter apt=new SimpleCursorAdapter(getApplicationContext(),R.layout.query,c,from,to);
    							//列表视图
    							ListView listview =getListView();
    							//为列表视图添加适配器
    							listview.setAdapter(apt);
    						}
    					})
    					.setNegativeButton("否", new DialogInterface.OnClickListener() {
    						
    						@Override
    						public void onClick(DialogInterface dialog, int which) {
    							// TODO Auto-generated method stub							
    						}
    					});
    				AlertDialog ad=builder.create();
    				ad.show();
    			}			
    			
    		});
    		helper.close();
    	}
    
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {
    		// Inflate the menu; this adds items to the action bar if it is present.
    		getMenuInflater().inflate(R.menu.query, menu);
    		return true;
    	}
    
    }


    附件:

    有需要源码的请移步:http://download.csdn.net/detail/gisshixisheng/6733227

  • 相关阅读:
    Flink开发中的问题
    怎么确定一个Flink job的资源
    Flink统计日活
    Flink读取resource资源文件
    Spark-6-如何缓解消除数据倾斜
    Spark-5-如何定位导致数据倾斜的代码
    Spark-4-为何要处理数据倾斜
    集合遍历删除中遇到问题
    1206
    1205
  • 原文地址:https://www.cnblogs.com/lzugis/p/6539919.html
Copyright © 2020-2023  润新知