zoukankan      html  css  js  c++  java
  • 【数据存储】SQLite数据库存储(2) 使用SQLite数据库并完成更新操作

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

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

    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

    <?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程序,完成操作

    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注入漏洞以及无法处理一些敏感字符的问题,为了解决该问题,在开发中往往会使用占位符的形式完成。

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

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

    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功能类似,不过却更加容易。

  • 相关阅读:
    20145215《信息安全系统设计基础》第三周学习总结
    20145215《信息安全系统设计基础》第二周学习总结
    Ubuntu下git的安装与使用
    20145215《信息安全系统设计基础》第一周学习总结
    20145215《信息安全系统设计基础》第0周学习总结
    第一周Web类WriteUp
    20145215《Java程序设计》课程总结
    20145215《Java程序设计》第10周学习总结
    python字符串基本方法
    python数据类型
  • 原文地址:https://www.cnblogs.com/androidsj/p/3129437.html
Copyright © 2011-2022 走看看