【数据存储】SQLite数据库存储(2)----- 使用SQLite数据库并完成更新操作_android

【数据存储】SQLite数据库存储(2)----- 使用SQLite数据库并完成更新操作_sql_02

范例:2、SQLiteProject(拼凑SQL完成数据库更新)

定义mytab表的操作类-----MytabOperate.java  加入数据库的操作方法

【数据存储】SQLite数据库存储(2)----- 使用SQLite数据库并完成更新操作_android_03【数据存储】SQLite数据库存储(2)----- 使用SQLite数据库并完成更新操作_数据_04
import android.database.sqlite.SQLiteDatabase;
public class MytabOperate {
    // 表示要操作的数据表名称
    private static final String TABLENAME = "mytab"; 
    // 数据库操作
    private SQLiteDatabase db = null; 
    public MytabOperate(SQLiteDatabase db) {
        this.db = db;
    }
    public void insert(String name,String birthday) {
        String sql = "INSERT INTO " + TABLENAME 
                + "(name,birthday) VALUES ('"
                + name + "','" + birthday + "')";
        this.db.execSQL(sql) ;
        this.db.close() ;
    }
    public void update(int id, String name, String birthday) {
        String sql = "UPDATE " + TABLENAME 
                + " SET name='" + name
                + "',birthday='" + birthday 
                + "' WHERE id=" + id;
        this.db.execSQL(sql); 
        this.db.close() ;
    }
    public void delete(int id) {
        String sql = "DELETE FROM " + TABLENAME + " WHERE id=" + id ;
        this.db.execSQL(sql) ;
        this.db.close() ;
    }
}
View Code

定义布局管理器文件 ----- main.xml

【数据存储】SQLite数据库存储(2)----- 使用SQLite数据库并完成更新操作_android_03【数据存储】SQLite数据库存储(2)----- 使用SQLite数据库并完成更新操作_数据_04
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <Button 
        android:id="@+id/insertBut"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:text="增加数据" />
    <Button 
        android:id="@+id/updateBut"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:text="修改数据" />
    <Button 
        android:id="@+id/deleteBut"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:text="删除数据" />
</LinearLayout>
View Code

定义Activity程序,完成操作

【数据存储】SQLite数据库存储(2)----- 使用SQLite数据库并完成更新操作_android_03【数据存储】SQLite数据库存储(2)----- 使用SQLite数据库并完成更新操作_数据_04
import android.app.Activity;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MySQLiteDemo extends Activity {
    private Button insertBut = null ;
    private Button updateBut = null ;
    private Button deleteBut = null ;
    // 数据库操作
    private SQLiteOpenHelper helper = null ;
    // mytab表操作类
    private MytabOperate mtab = null ;
    // 计数统计(以保证姓名不重复)
    private static int count = 0 ;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setContentView(R.layout.main);
        // 定义数据辅助类
        this.helper = new MyDatabaseHelper(this);
        this.insertBut = (Button)
                   super.findViewById(R.id.insertBut) ;
        this.updateBut = (Button)
                   super.findViewById(R.id.updateBut) ;
        this.deleteBut = (Button)
                   super.findViewById(R.id.deleteBut) ;
        this.insertBut.setOnClickListener(new 
                              InsertOnClickListenerImpl()) ;
        this.updateBut.setOnClickListener(new 
                              UpdateOnClickListenerImpl()) ;
        this.deleteBut.setOnClickListener(new 
                              DeleteOnClickListenerImpl()) ;
    }
    private class InsertOnClickListenerImpl 
       implements OnClickListener{
        @Override
        public void onClick(View v) {
            MySQLiteDemo.this.mtab = new MytabOperate(
                    // 取得可更新的数据库
                    MySQLiteDemo.this.helper.getWritableDatabase());
            MySQLiteDemo.this.mtab.insert(
                      "李兴华" + count++, "1979-08-12") ;
        }
    }
    private class UpdateOnClickListenerImpl 
       implements OnClickListener{
        @Override
        public void onClick(View v) {
            MySQLiteDemo.this.mtab = new MytabOperate(
                    // 取得可更新的数据库
                    MySQLiteDemo.this.helper.getWritableDatabase());
            MySQLiteDemo.this.mtab.update(3, "MLDN", "1981-06-27");
        }
    }
    private class DeleteOnClickListenerImpl 
      implements OnClickListener{
        @Override
        public void onClick(View v) {
            MySQLiteDemo.this.mtab = new MytabOperate(
                    // 取得可更新的数据库
                    MySQLiteDemo.this.helper.getWritableDatabase());
            MySQLiteDemo.this.mtab.delete(3) ;
        }
    }
}
View Code

以上程序采用的是拼凑SQL语句的形式,因此代码存在SQL注入漏洞以及无法处理一些敏感字符的问题,为了解决该问题,在开发中往往会使用占位符的形式完成。

范例:3、SQLiteProject(使用占位符)

修改MytabOperate类,使用占位符的方式完成操作

【数据存储】SQLite数据库存储(2)----- 使用SQLite数据库并完成更新操作_android_03【数据存储】SQLite数据库存储(2)----- 使用SQLite数据库并完成更新操作_数据_04
import android.database.sqlite.SQLiteDatabase;
public class MytabOperate {
    // 表示要操作的数据表名称
    private static final String TABLENAME = "mytab"; 
    // 数据库操作
    private SQLiteDatabase db = null; 
    public MytabOperate(SQLiteDatabase db) {
        this.db = db;
    }
    public void insert(String name,String birthday) {
        String sql = "INSERT INTO " + TABLENAME 
                + "(name,birthday) VALUES (?,?)";
        Object args[] = new Object[] { name, birthday };
        this.db.execSQL(sql, args);
        this.db.close() ;
    }
    public void update(int id, String name, String birthday) {
        String sql = "UPDATE " + TABLENAME 
                + " SET name=?,birthday=? WHERE id=?";
        Object args[] = new Object[] { name, birthday, id };
        this.db.execSQL(sql, args); 
        this.db.close() ;
    }
    public void delete(int id) {
        String sql = "DELETE FROM " + TABLENAME + " WHERE id=?";
        Object args[] = new Object[] { id };
        this.db.execSQL(sql,args) ;
        this.db.close() ;
    }
}
View Code

在编写SQL语句时,所有要更新的内容都是用了占位符“?”表示,而随后将具体更新的数据保存在了args对象数组中,在调用execSQL()时同时传入了SQL和更新的参数,这一点在使用的形式上与JDBC中的PreparedStatement功能类似,不过却更加容易。