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 }

 

转载于:https://www.cnblogs.com/gxclmx/p/6905217.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值