Android SqLite中insert()方法解析

 

 

 

 

 

                                       android SqLite中insert()方法解析

 

 

 

 

 

Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。对SQLiteDatabase的学习,我们应该重点掌握execSQL()和rawQuery()方法。 execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句; rawQuery()方法用于执行select语句。 

execSQL()方法的使用例子: 

 

 

SQLiteDatabase db = ....; 

db.execSQL("insert into person(name, age) values('测试数据', 4)"); 

db.close(); 

执行上面SQL语句会往person表中添加进一条记录,在实际应用中, 语句中的“测试数据”这些参数值会由用户输入界面提供,如果把用户输入的内容原样组拼到上面的insert语句, 当用户输入的内容含有单引号时,组拼出来的SQL语句就会存在语法错误。要解决这个问题需要对单引号进行转义,也就是把单引号转换成两个单引号。有些时候用户往往还会输入像“ & ”这些特殊SQL符号,为保证组拼好的SQL语句语法正确,必须对SQL语句中的这些特殊SQL符号都进行转义,显然,对每条SQL语句都做这样的处理工作是比较烦琐的。 SQLiteDatabase类提供了一个重载后的execSQL(String sql, Object[] bindArgs)方法,使用这个方法可以解决前面提到的问题,因为这个方法支持使用占位符参数(?)。使用例子如下: 

SQLiteDatabase db = ....; 

db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"测试数据", 4});  

db.close(); 

execSQL(String sql, Object[] bindArgs)方法的第一个参数为SQL语句,第二个参数为SQL语句中占位符参数的值,参数值在数组中的顺序要和占位符的位置对应。 

 

 

 

Insert()方法用于添加数据,各个字段的数据使用ContentValues进行存放。 ContentValues类似于MAP,相对于MAP,它提供了存取数据对应的put(String key, Xxx value)和getAsXxx(String key)方法,  key为字段名称,value为字段值,Xxx指的是各种常用的数据类型,如:String、Integer等。 

SQLiteDatabase db = databaseHelper.getWritableDatabase(); 

ContentValues values = new ContentValues(); 

values.put("name", "测试数据"); 

values.put("age", 4); 

long rowid = db.insert(“person”, null, values);//返回新添记录的行号,与主键id无关 

 

 

 

不管第三个参数是否包含数据,执行Insert()方法必然会添加一条记录,如果第三个参数为空,会添加一条除主键之外其他字段值为Null的记录。Insert()方法内部实际上通过构造insert SQL语句完成数据的添加,Insert()方法的第二个参数用于指定空值字段的名称,相信大家对该参数会感到疑惑,该参数的作用是什么?是这样的:如果第三个参数values 为Null或者元素个数为0, 由于Insert()方法要求必须添加一条除了主键之外其它字段为Null值的记录,为了满足SQL语法的需要, insert语句必须给定一个字段名,如:insert into person(name) values(NULL),倘若不给定字段名 , insert语句就成了这样: insert into person() values(),显然这不满足标准SQL的语法。对于字段名,建议使用主键之外的字段,如果使用了INTEGER类型的主键字段,执行类似insert into person(personid) values(NULL)的insert语句后,该主键字段值也不会为NULL。如果第三个参数values 不为Null并且元素的个数大于0 ,可以把第二个参数设置为null。 

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要在Android Studio创建一个新项目。在创建项目时,需要选择Empty Activity模板,然后按照向导进行操作即可。 接下来,在项目添加SQLite库。可以通过在build.gradle文件添加以下内容来实现: ``` dependencies { implementation 'com.android.support:support-sqlite:28.0.0' } ``` 然后,在项目创建SQLiteOpenHelper类。这个类用于创建和升级数据库。例如: ``` public class DBHelper extends SQLiteOpenHelper { private static final String DB_NAME = "myapp.db"; private static final int DB_VERSION = 1; public DBHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE users (_id INTEGER PRIMARY KEY AUTOINCREMENT, " + "username TEXT, password TEXT);"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // This method is called when the database needs to be upgraded. // Here you can add code to alter the database schema and/or data. } } ``` 在上面的代码,我们创建了一个名为“users”的表,其包含三个列:_id(主键)、username和password。这些列分别存储用户ID、用户名和密码。 接下来,在MainActivity实现登录和注册功能。首先,我们需要为登录和注册按钮添加点击事件监听器。例如: ``` Button loginBtn = findViewById(R.id.loginBtn); loginBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Handle login button click event } }); Button registerBtn = findViewById(R.id.registerBtn); registerBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Handle register button click event } }); ``` 接着,我们需要在登录和注册按钮的事件处理程序编写代码。首先,让我们看看如何处理注册事件。例如: ``` EditText usernameEditText = findViewById(R.id.usernameEditText); EditText passwordEditText = findViewById(R.id.passwordEditText); String username = usernameEditText.getText().toString(); String password = passwordEditText.getText().toString(); if (username.isEmpty() || password.isEmpty()) { Toast.makeText(MainActivity.this, "Please enter both username and password.", Toast.LENGTH_SHORT).show(); } else { SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("username", username); values.put("password", password); long newRowId = db.insert("users", null, values); Toast.makeText(MainActivity.this, "Registration successful.", Toast.LENGTH_SHORT).show(); } ``` 在上面的代码,我们首先获取用户名和密码。然后,我们检查这些值是否为空。如果是,我们向用户显示一个消息。否则,我们打开数据库连接并将用户名和密码插入到“users”表。最后,我们向用户显示一个注册成功的消息。 接下来,让我们看一下如何处理登录事件。例如: ``` EditText usernameEditText = findViewById(R.id.usernameEditText); EditText passwordEditText = findViewById(R.id.passwordEditText); String username = usernameEditText.getText().toString(); String password = passwordEditText.getText().toString(); if (username.isEmpty() || password.isEmpty()) { Toast.makeText(MainActivity.this, "Please enter both username and password.", Toast.LENGTH_SHORT).show(); } else { SQLiteDatabase db = dbHelper.getReadableDatabase(); String[] projection = { "_id" }; String selection = "username = ? AND password = ?"; String[] selectionArgs = { username, password }; Cursor cursor = db.query( "users", projection, selection, selectionArgs, null, null, null ); if (cursor.moveToFirst()) { Toast.makeText(MainActivity.this, "Login successful.", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "Invalid username or password.", Toast.LENGTH_SHORT).show(); } } ``` 在上面的代码,我们首先获取用户名和密码。然后,我们检查这些值是否为空。如果是,我们向用户显示一个消息。否则,我们打开数据库连接并查询“users”表以查找具有给定用户名和密码的用户。如果找到了这样的用户,我们向用户显示一个登录成功的消息。否则,我们向用户显示一个无效的用户名或密码的消息。 以上就是Android Studio连接SQLite实现登录注册代码的详细解析
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值