• Android数据库的创建,插入,查询等


    1.一个新的数据库的创建及打开方式

    关于Android数据库的创建,官方文档里面推荐的是继承SQLiteOpenHelper创建子类,重写onCreate方法来创建一个新的SQLiteDatabase。

    在这里需要强调的几点有:

    1).数据库在第一次创建的时候,才调用onCreate方法,也就是说一旦某一个数据库已经被创建好了,那么就不用再调用onCreate方法了。

    2).在onCreate执行sql语句,创建数据库表。

    3).向数据库表里面写入数据或者读取数据的时候,首先得实例化SQLiteOpenHelper子类,通过该子类调用getReadableDatabase()或者getWritadableDatabase()方法来打开数据库。

    读取数据时调用getReadableDatabase(),例如对数据库数据进行查询操作。

    写入数据时调用getWritadableDatabase(),例如对数据库数据进行插入、删除、更新操作。

    2.以下是创建SQLiteOpenHelper子类的实现代码

     1 public class MyDataBaseHelper extends SQLiteOpenHelper {
     2    /*
     3    * context:上下文
     4    * databaseName:创建的数据库名称
     5    * databaseVersion:数据库版本
     6    * */
     7     public MyDataBaseHelper(Context context,String databaseName,int databaseVersion){
     8         super(context,databaseName,null,databaseVersion);
     9     }
    10     /*
    11     * 数据库第一次创建的时候,调用onCreate;数据库已经创建成功之后,就不调用它了
    12     * db就是创建的数据库
    13     * db.execSQL这句是用来创建数据库表
    14     * */
    15     @Override
    16     public void onCreate(SQLiteDatabase db) {
    17         System.out.println("数据库创建成功");
    18         db.execSQL("create table imagetable(_id integer primary key autoincrement,word varchar(255),detail varchar(255))");//执行创建表的sql语句
    19     }
    20 
    21     @Override
    22     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    23 
    24     }
    25 }

    3.实践操作:创建名为image.db的数据库,创建数据库表imagetable,向数据库表插入数据,同时读取数据。

    插入数据的方式有两种,一种是通过SQLiteDatabase的execSQL(String sql)方法来实现。一种是通过SQLiteDatabase已经封装好的insert()方法来实现。个人认为,为了避免由于sql语法导致的程序出错,使用的后者更加便捷。

    查询数据的时候,使用的是SQLiteDatabase的query()方法,该方法返回的是一个Cursor对象,它就像是一个可移动的游标,可以指向数据库表的每一行。当cursor移动到某一列的某一行的时候,通过调用cursor的getString()、getInt()、getDouble()等方法获得该位置的数据。

    另外关于SQLiteDatabase的query(table,columns,selection,selectionArgs,groups,having,orderBy,limit)方法的各参数使用在这里进行一个说明吧:

    1).table:要查询的数据库表名。

    2).columns:要查询的列名。为null的话,返回所有列。

    3).selection:查询条件子句。相当于select语句where关键字后面的条件子句部分,在条件子句中允许使用占位符?返回符合该条件子句的行。为null的话,返回所有行。

    4).selectionArg:对应seletion参数里面的占位符?的值,值在数组中的位置与占位符在语句中的位置必须一致,否则抛出异常。

    5).groups,having,orderBy就分别相当于select语句里面的group By,having,order By关键字后面的部分。

    6).limit:相当于select语句limit关键字后面的部分,指定偏移量和获取的记录数。

    实现代码:

     1 public class MainActivity extends AppCompatActivity {
     2     MyDataBaseHelper myDataBaseHelper;
     3     Button insertBtn;
     4     Button searchBtn;
     5     EditText editText1;
     6     EditText editText2;
     7     TextView textView;
     8     String DataBase_Name="image.db";
     9     String Table_Name = "imagetable";
    10 
    11     @Override
    12     protected void onCreate(Bundle savedInstanceState) {
    13         super.onCreate(savedInstanceState);
    14         setContentView(R.layout.activity_main);
    15         //执行该句时,数据库不被创建
    16         myDataBaseHelper = new MyDataBaseHelper(MainActivity.this, DataBase_Name, 2);
    17         editText1 = (EditText) findViewById(R.id.edit1);
    18         editText2 = (EditText) findViewById(R.id.edit2);
    19         insertBtn = (Button) findViewById(R.id.insertBtn);
    20         searchBtn = (Button) findViewById(R.id.searchBtn);
    21         textView = (TextView) findViewById(R.id.textview);
    22         insertBtn.setOnClickListener(new View.OnClickListener() {
    23             @Override
    24             public void onClick(View v) {
    25                 String word = editText1.getText().toString();
    26                 String detail = editText2.getText().toString();
    27                 ContentValues contentValues = new ContentValues();
    28                 contentValues.put("word", word);
    29                 contentValues.put("detail", detail);
    30                 //插入数据:getWritableDatabase,当执行getWritableDatabase时数据库才被创建
    31                 SQLiteDatabase db = myDataBaseHelper.getWritableDatabase();
    32                 long id = db.insert(Table_Name, null, contentValues);
    33                 db.close();
    34                 if (id != -1) Toast.makeText(MainActivity.this, "插入成功", Toast.LENGTH_SHORT).show();
    35                 else Toast.makeText(MainActivity.this, "插入失败", Toast.LENGTH_SHORT).show();
    36             }
    37         });
    38         searchBtn.setOnClickListener(new View.OnClickListener() {
    39             @Override
    40             public void onClick(View v) {
    41                 //查询数据:getReadableDatabase
    42                 searchDataBase(myDataBaseHelper.getReadableDatabase());
    43                 Toast.makeText(MainActivity.this, "搜索成功", Toast.LENGTH_SHORT).show();
    44             }
    45         });
    46     }
    47 
    48     private void searchDataBase(SQLiteDatabase db) {
    49         Cursor cursor=db.query("imagetable", new String[]{"word","detail"}, null, null, null, null, null);
    50         String word = "";
    51         String detail = "";
    52         for (cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()) {
    53            word = cursor.getString(0) + "\n";
    54            detail = cursor.getString(1) + "\n";
    55         }
    56         cursor.close();
    57         db.close();
    58         String s = word +detail;
    59         textView.setText(s);
    60     }
    61 
    62     @Override
    63     protected void onDestroy() {
    64         super.onDestroy();
    65         if (myDataBaseHelper != null)
    66             myDataBaseHelper.close();
    67     }
    68 }
  • 相关阅读:
    小数的进制转换
    水题 O
    水题 J
    水题T,二进制转16进制
    水题B
    水题C
    HDU 2042
    HDU 2041
    Index For SQL Server
    Learning Note For Angular
  • 原文地址:https://www.cnblogs.com/gxclmx/p/6905217.html
Copyright © 2020-2023  润新知