android 怎么往数据库里面添加数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 怎么往数据库里面添加数据相关的知识,希望对你有一定的参考价值。

一、引入
数据库创建的问题解决了,接下来就该使用数据库实现应用程序功能的时候了。基
本的操作包括创建、读取、更新、删除,即我们通常说的 CRUD(Create, Read, Update, Delete)。
在实现这些操作的时候,我们会使用到两个比较重要的类 SQLiteDatabase 类和 Cursor 类。

二、创建表
1,execSQL(String sql):执行一条 sql 语句,且执行操作不能为 SELECT
因为它的返回值为 void,所以推荐使用 insert、update 方法等
2.,execSQL (String sql,Object[] bindArgs)
sql:执行一条 sql 语句
bindArgs:为 sql 语句中的?赋值

三、添加数据
1、execSQL(String sql)
2、使用对象的 insert 方法
ContentValues values = new ContentValues();
values.put(USERNAME, user.getUsername());
values.put(PASSWORD, user.getPassword());
db.insert(TABLE_NAME, null, values);
参数:
table:数据库中的表名
nullColumnHack:指定默认插入字段,为 null 时能插入数据
values:表示插入字段所对应的值,使用 put 方法。

四、删除数据
1、execSQL(String sql)
2、使用对象的 delete 方法
String whereClaues="_id=?";
String [] whereArgs=String.valueOf(id);
//db.delete(TABLE_NAME, "_id="+id, null);
db.delete(TABLE_NAME, whereClaues, whereArgs);
参数
table:数据库的表名
whereClause:where 子句,比如:_id=?
whereArgs:where 子句中?的值

五、修改数据
1、execSQL(String sql)
2、使用对象的 delete 方法
ContentValues values = new ContentValues();
values.put(USERNAME, user.getUsername());
values.put(PASSWORD, user.getPassword());
String whereClaues="_id=?";
String [] whereArgs=String.valueOf(user.getId());
db.update(TABLE_NAME, values, whereClaues, whereArgs);
参数
table:数据库的表名
values:代表要修改的值,修改方法还是 put(key,values)
whereClause:条件子句,比如 id=?,name=?
whereArgs:为 whereClause 中的?赋值,比如:new String[]"1","张三"

图:

参考代码:

程序内使用SQLite数据库是通过SQLiteOpenHelper进行操作  

1.       自己写个类继承SQLiteOpenHelper,重写以下3个方法  

public void onCreate(SQLiteDatabase db)   

//创建数据库时的操作,如建表  

   

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)   

         

           //版本更新的操作  

         

2.    通过SQLiteOpenHelper的getWritableDatabase()获得一个SQLiteDatabase数据库,以后的操作都是对SQLiteDatabase进行操作。  

3.       对得到的SQLiteDatabase对象进行增,改,删,查等操作。  

代码  

package cx.myNote;  

   

import android.content.ContentValues;  

import android.content.Context;  

import android.content.Intent;  

import android.database.Cursor;  

import android.database.sqlite.SQLiteDatabase;  

import android.database.sqlite.SQLiteOpenHelper;  

   

//DBOptions for login  

public class DBOptions   

       private static final String DB_NAME = "notes.db";  

       private static final String DB_CREATE="create table logininf(name text,pwd text)";  

       public class DBHelper extends SQLiteOpenHelper  

         

   

              public DBHelper(Context context)   

                     super(context,DB_NAME, null, 1);  

                       

   

              @Override  

              public void onCreate(SQLiteDatabase db)   

                     // TODO Auto-generated method stub  

                     //建表  

                 db.execSQL(DB_CREATE);  

                

                

              @Override  

              public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)   

                     // TODO Auto-generated method stub  

                     db.execSQL("drop table if exists logininf");  

                     onCreate(db);  

                

                

         

       private Context context;  

       private SQLiteDatabase db;  

       private DBHelper dbHelper;  

       public  DBOptions(Context context)  

         

              this.context = context;  

              dbHelper = new DBHelper(context);  

              db=dbHelper.getReadableDatabase();  

                

         

  //自己写的方法,对数据库进行操作  

       public String getName()  

         

                

              Cursor cursor = db.rawQuery("select name from logininf", null);  

              cursor.moveToFirst();  

              return cursor.getString(0);       

         

       public int changePWD(String oldP,String pwd)  

         

              ContentValues values = new ContentValues();  

              values.put("pwd", pwd);  

              return db.update("logininf", values,"pwd="+oldP, null);  

         

 


insert方法插入的一行记录使用ContentValus存放,ContentValues类似于Map,它提供了put(String key, Xxx value)(其中key为数据列的列名)方法用于存入数据、getAsXxxx(String key)方法用于取出数据

参考技术A 参考如下内容:
你通过getText()方法首先得到输入的值,然后调用数据库的插入方法 db.insert();插入到数据库中就行 就想这样
EditText et ;
String num = et.getText().toString();
public void addData(String num)
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("num", num);
db.insert("表名", null, values);


当你调用这个 addData()方法时就会向数据库中插入数据了

python怎么往mysql数据库添加数据

例如变量a是str变量,b是int变量,怎么把这两个变量的数据写入mysql。之前写过一个小程序,可以登陆数据库但不能把数据写入数据表。不知道是不是数据类型不对的问题。mysql里没有str(字符串)数据类型的,只有char、varchar、binary等。而且觉得在python中编写的SQL语句无法从变量中获取任何数据值。例如刚开始举例的变量,事实上是实时变化的,那么a的值就不能直接写到SQL语句里,只能用变量a代替,但见过的SQL语句都插入的都是具体的常量。这个怎么解决?

MySQL 的 Binlog 记录着 MySQL 数据库的所有变更信息,了解 Binlog 的结构可以帮助我们解析Binlog,甚至对 Binlog 进行一些修改,或者说是“篡改”,例如实现类似于 Oracle 的 flashback 的功能,恢复误删除的记录,把 update 的记录再还原回去等。本文将带您探讨一下这些神奇功能的实现,您会发现比您想象地要简单得多。本文指的 Binlog 是 ROW 模式的 Binlog,这也是 MySQL 8 里的默认模式,STATEMENT 模式因为使用中有很多限制,现在用得越来越少了。
Binlog 由事件(event)组成,请注意是事件(event)不是事务(transaction),一个事务可以包含多个事件。事件描述对数据库的修改内容。
现在我们已经了解了 Binlog 的结构,我们可以试着修改 Binlog 里的数据。例如前面举例的 Binlog 删除了一条记录,我们可以试着把这条记录恢复,Binlog 里面有个删除行(DELETE_ROWS_EVENT)的事件,就是这个事件删除了记录,这个事件和写行(WRITE_ROWS_EVENT)的事件的数据结构是完全一样的,只是删除行事件的类型是 32,写行事件的类型是 30,我们把对应的 Binlog 位置的 32 改成 30 即可把已经删除的记录再插入回去。从前面的 “show binlog events” 里面可看到这个 DELETE_ROWS_EVENT 是从位置 378 开始的,这里的位置就是 Binlog 文件的实际位置(以字节为单位)。从事件(event)的结构里面可以看到 type_code 是在 event 的第 5 个字节,我们写个 Python 小程序把把第383(378+5=383)字节改成 30 即可。当然您也可以用二进制编辑工具来改。
找出 Binlog 中的大事务
由于 ROW 模式的 Binlog 是每一个变更都记录一条日志,因此一个简单的 SQL,在 Binlog 里可能会产生一个巨无霸的事务,例如一个不带 where 的 update 或 delete 语句,修改了全表里面的所有记录,每条记录都在 Binlog 里面记录一次,结果是一个巨大的事务记录。这样的大事务经常是产生麻烦的根源。我的一个客户有一次向我抱怨,一个 Binlog 前滚,滚了两天也没有动静,我把那个 Binlog 解析了一下,发现里面有个事务产生了 1.4G 的记录,修改了 66 万条记录!下面是一个简单的找出 Binlog 中大事务的 Python 小程序,我们知道用 mysqlbinlog 解析的 Binlog,每个事务都是以 BEGIN 开头,以 COMMIT 结束。我们找出 BENGIN 前面的 “# at” 的位置,检查 COMMIT 后面的 “# at” 位置,这两个位置相减即可计算出这个事务的大小,下面是这个 Python 程序的例子。
切割 Binlog 中的大事务
对于大的事务,MySQL 会把它分解成多个事件(注意一个是事务 TRANSACTION,另一个是事件 EVENT),事件的大小由参数 binlog-row-event-max-size 决定,这个参数默认是 8K。因此我们可以把若干个事件切割成一个单独的略小的事务
ROW 模式下,即使我们只更新了一条记录的其中某个字段,也会记录每个字段变更前后的值,这个行为是 binlog_row_image 参数控制的,这个参数有 3 个值,默认为 FULL,也就是记录列的所有修改,即使字段没有发生变更也会记录。这样我们就可以实现类似 Oracle 的 flashback 的功能,我个人估计 MySQL 未来的版本从可能会基于 Binlog 推出这样的功能。
了解了 Binlog 的结构,再加上 Python 这把瑞士军刀,我们还可以实现很多功能,例如我们可以统计哪个表被修改地最多?我们还可以把 Binlog 切割成一段一段的,然后再重组,可以灵活地进行 MySQL 数据库的修改和迁移等工作。
参考技术A Python需要commit一下,或是设置autocommit为true 参考技术B 你最后加了commit了吗?没加commit不能插入数据额追问

加了

追答

完整的代码发下哎

本回答被提问者采纳

以上是关于android 怎么往数据库里面添加数据的主要内容,如果未能解决你的问题,请参考以下文章

怎样往 sqlserver数据库添加一个数据?

一个arraylist,往里面add值的时候,遇到重复就不要添加,怎么做

怎样往 sqlserver数据库添加一个数据?

往数据库里面插入数据之后,刚开始能查到,过一会这些数据就没有了,请问是啥原因

ArrayList在js里面怎么添加数据

一个arraylist,往里面add值的时候,遇到重复就不要添加,怎么做