• SQLite数据库操作 (原始操作)


    android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,

    使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。

    对SQLiteDatabase的学习,我们应该重点掌握execSQL()和rawQuery()方法

    execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句;

    rawQuery()方法可以执行select语句。

    参考 http://dev.10086.cn/cmdn/wiki/index.php?doc-view-6995

    官方 http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html

     

    操作数据库步骤:

     

    一、获取代表数据库的SQLiteDatabase对象

    SQLiteDatabase 提供静态方法获取SQLiteDatabase对象

      

     

     

    二、 对数据库CRUD操作

       void execSQL(String sql, Object[] bindArgs ) 

          官方解释: 

          Execute a single SQL statement that is NOT a SELECT/INSERT/UPDATE/DELETE.  

         For example, the following are good candidates for using this method:

      • ALTER TABLE
      • CREATE or DROP table / trigger / view / index / virtual table
      • REINDEX
      • RELEASE
      • SAVEPOINT
      • PRAGMA that returns no data

     

     

            

        Cursor rawQuery(Stringsql, String[] selectionArgs)方法可以执行select语句。

     

    废话说了那么多了,咋们举个栗子吧:

      下面是布局文件,两个EditText , 用于插入数据库的name 和 content 字段的值。一个 TextView 用于显示从数据库查询的数据。

    <LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".MainActivity" >
    
        <EditText 
            android:layout_width="100px"
            android:layout_height="wrap_content"
            android:id="@+id/edt_name"
            
            
            />
        <EditText 
            android:layout_width="100px"
            android:layout_height="wrap_content"
            android:id="@+id/edt_content"
            
            />
        <TextView
            android:text=""
            android:id="@+id/tv_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
             />
    
        <Button
            android:onClick="insert"
            android:id="@+id/btn_insert"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="click insert" 
            />
        <Button
            android:onClick="show"
            android:id="@+id/btn_show"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="click show" 
            />
    
    </LinearLayout>
    

      

    再加个界面吧, 一个Activity :

      

    public class MainActivity extends Activity {
    
    	String tag="MainActivity";
    	SQLiteDatabase db;
    	EditText edt_name ,edt_content;
    	TextView tv_name;
    	
    	
    	public  void createDB(){
    	// 捕获异常是因为db.execSQL(sql)方法,如果表已经存在会报异常。
    		try{
    			
    		db=SQLiteDatabase.openOrCreateDatabase(getFilesDir().toString()+"test.db", null);
    		//创建表的sql语句
    		String sql="create table user(_id integer primary key autoincrement,name varchar(50) ,content varchar(250))";
    		db.execSQL(sql);
    		Log.i(tag, "--------createDB()-------");
    		
    		}catch(Exception e){}
    		
    	}
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		edt_name=(EditText) findViewById(R.id.edt_name);
    		edt_content=(EditText) findViewById(R.id.edt_content);
    		tv_name =(TextView) findViewById(R.id.tv_name);
    	
    		this.createDB();
    	}
    	public void insert(View v){
    		
    		String sql="insert into user values(null,?,?)";
    		String name =edt_name.getText().toString();
    		String content =edt_content.getText().toString();
    		String[] bindArgs=new String[]{name,content};
    		
    		db.execSQL(sql, bindArgs);
    		Log.i(tag, "--------updata()-------");
    		
    	}
    	public void show(View v){
    		String sql="select * from user";
    		Cursor cursor = db.rawQuery(sql,null);
    		while(cursor.moveToNext()){
    // 将数据全部显示在TextView中, 很不规范、阅读性很差的代码!!! tv_name.setText(tv_name.getText().toString()+" id="+cursor.getString(0)+" name="+cursor.getString(1)+ " content="+cursor.getString(2)); } Log.i(tag, "--------show()-------"); } }

      

    遇到的问题:

      1、sql语句出错!

      2、sql语句又出错!

      3、重复创建表

      

      以上就是原始的SQLiteDatabase操作:

            一、 没有insert() 、 updata() 、delete() 、query() 等操作,因为 execSQL() 是万能的!

            二、 没有使用SQLiteOpenHelper类 ( 但此类能简化我们对数据库的操作,在下一篇介绍)

       补充:Cursor、 SQLiteDatabase 用完之后要close掉

    一个很详细的教程:http://www.eoeandroid.com/thread-182378-1-1.html

      

     

     

     

  • 相关阅读:
    Android应用开发学习笔记之事件处理
    [置顶] 炎炎夏日,给你一次极爽的开发体验!——统一开发环境功能升级优化,正式上线V2.0!
    POJ 3468 A Simple Problem with Integers (伸展树区间更新求和操作 , 模板)
    京东商城发现了一枚Bug
    iOS_40_核心动画
    SVN——库合并
    ORACLE 8i 遇到报错:ORA-01631: max # extents (505) reached in table
    HDU 5366:The mook jong 递推
    Linux平台下裸设备的绑定:
    CSP:使用CryptoAPI解码X509证书内容
  • 原文地址:https://www.cnblogs.com/lolita/p/3414050.html
Copyright © 2020-2023  润新知