android数据库实例
- 格式:doc
- 大小:28.00 KB
- 文档页数:3
android sqlite3 sql select 用法
在 Android 开发中,可以使用 SQLite3 数据库,并通过 SQL 的`SELECT`语句来从数据库中获取数据。
以下是`SELECT`语句的基本用法:
```sql
SELECT column1, column2, ...
FROM table_name
WHERE condition;
```
其中:
- `column1, column2, ...`是你想要选择的列名,可以指定一个或多个列,用逗号分隔。
- `table_name`是要从中选择数据的表名。
- `WHERE condition`是可选的条件,用于筛选结果。
如果省略,则将返回表中的所有行。
例如,以下是一个简单的示例,选择名为`students`表中的所有列:
```sql
SELECT * FROM students;
```
如果你只想选择特定的列,可以这样做:
```sql
SELECT name, age FROM students;
```
还可以使用`WHERE`子句来添加条件:
```sql
SELECT * FROM students WHERE age > 18;
```
这将返回`students`表中`age`列大于 18 的所有行。
你可以根据自己的需求进行组合和扩展这些查询语句。
请注意,在实际使用中,还需要
考虑适当的错误处理和数据库操作的封装。
Androidroom数据库使⽤详解1、引⼊库def room_version = "2.3.0"implementation "androidx.room:room-runtime:$room_version"// For Kotlin use kapt instead of annotationProcessorannotationProcessor "androidx.room:room-compiler:$room_version"// optional - RxJava2 support for Roomimplementation "androidx.room:room-rxjava2:$room_version"// optional - RxJava3 support for Roomimplementation "androidx.room:room-rxjava3:$room_version"2.AppDatabase类@Database(entities = {//⽤户信息UserInfo.class}, version = 1, exportSchema = false)public abstract class AppDatabase extends RoomDatabase {private static AppDatabase instance;public static synchronized AppDatabase getInstance(Context context) {if (instance == null) {instance = Room.databaseBuilder(context, AppDatabase.class,//数据库存放在SD卡FileUtils.getDatabasePath("test.db"))//.addMigrations(MIGRATION_1_2).build();}return instance;}public abstract RoomDao roomDao();//进⾏数据库升级static final Migration MIGRATION_1_2 = new Migration(1, 2) {@Overridepublic void migrate(@NonNull SupportSQLiteDatabase database) {//在这⾥⽤sql脚本完成database.execSQL("alter table user add column flag integer not null default 1");}};}public class FileUtils {public static void deleteFile(String fileName) {File file = new File(fileName);if (file.exists())file.delete();}/*** 获得数据库路径,如果不存在,则创建对象对象** @param name*/public static String getDatabasePath(String name) {//判断是否存在sd卡boolean sdExist = android.os.Environment.MEDIA_MOUNTED.equals(android.os.Environment.getExternalStorageState()); if (!sdExist) {//如果不存在,Log.e("SD卡管理:", "SD卡不存在,请加载SD卡");return null;} else {//如果存在//获取sd卡路径String dbDir = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();dbDir += "/database";//数据库所在⽬录String dbPath = dbDir + "/" + name;//数据库路径LogUtil.d("dbPath:" + dbPath);return dbPath;}}}3.⽤户表@Entity(tableName = "user")public class UserInfo extends BaseBean {@NonNull@PrimaryKeyprivate String userId;private String name;//⽤户名private String headImg;private String pwd;private String createTime;@Ignoreprivate boolean isSelect;public UserInfo() {}@Ignorepublic UserInfo(String userId, String name, String headImg, String pwd) { erId = userId; = name;this.headImg = headImg;this.pwd = pwd;}public String getUserId() {return userId;}public void setUserId(String userId) {erId = userId;}public String getName() {return name;}public void setName(String name) { = name;}public String getHeadImg() {return headImg;}public void setHeadImg(String headImg) {this.headImg = headImg;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}public boolean isSelect() {return isSelect;}public void setSelect(boolean select) {isSelect = select;}public String getCreateTime() {return createTime;}public void setCreateTime(String createTime) {this.createTime = createTime;}}4.RoomDao@Daopublic interface RoomDao {/*** 插⼊⽤户** @param user*/@Insertvoid insertUser(UserInfo user);//如果插⼊的新数据在表中已经存在,即如果遇上数据冲突的情况,新数据直接替换旧数据; @Insert(onConflict = OnConflictStrategy.REPLACE)void insertUser(UserInfo... user);@Updatevoid updateUser(UserInfo note);/*** 获取所有的⽤户** @return*/@Query("SELECT * FROM user")LiveData<List<UserInfo>> getUserList();/*** 根据⽤户名查询⽤户** @param userName* @return*@Query("SELECT * FROM user WHERE name = :userName LIMIT 1")LiveData<UserInfo> findUserByName(String userName);/*** 根据userId查询⽤户*/@Query("SELECT * FROM user WHERE userId = :userId LIMIT 1")LiveData<UserInfo> findUserById(String userId);}5.Repositorypublic class Repository {private final AppDatabase appDB;public Repository(Context context) {appDB = AppDatabase.getInstance(context);}/*** 插⼊⽤户** @param user*/public void insertUser(final UserInfo user) {new AsyncTask<Void, Void, Void>() {@Overrideprotected Void doInBackground(Void... voids) {appDB.roomDao().insertUser(user);return null;}}.execute();}/*** 获取所有的⽤户信息** @return*/public LiveData<List<UserInfo>> getUserList() {return appDB.roomDao().getUserList();}/*** 根据⽤户名查询⽤户*/public LiveData<UserInfo> findUserByName(String name) {return appDB.roomDao().findUserByName(name);}/*** 根据userId查询⽤户*/public LiveData<UserInfo> findUserById(String userId) {return appDB.roomDao().findUserById(userId);}}6.使⽤Repository repository = new Repository(context);repository.getUserList().observe(this, new Observer<List<UserInfo>>() {@Overridepublic void onChanged(List<UserInfo> userList) {mUserList = userList;LogUtil.d("mUserList个数:" + mUserList.size());if (mUserList.size() > 0) {mAdapter.setList(userList);}}});到此这篇关于Android room数据库使⽤的⽂章就介绍到这了,更多相关Android room数据库使⽤内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
安卓数据存储实验报告一、实验背景在当今移动应用开发中,数据存储是一个至关重要的环节。
安卓系统提供了多种数据存储方式,以满足不同应用场景和数据需求。
为了深入了解安卓数据存储的机制和性能,进行了本次实验。
二、实验目的本次实验的主要目的是:1、比较安卓系统中不同数据存储方式(如内部存储、外部存储、SQLite 数据库、SharedPreferences 等)的性能和特点。
2、探究在不同数据量和操作频繁程度下,各种存储方式的效率和稳定性。
3、为实际应用开发中选择合适的数据存储方式提供依据。
三、实验环境1、操作系统:Android 112、开发工具:Android Studio 423、测试设备:_____ 手机四、实验内容(一)内部存储内部存储是应用私有存储空间,其他应用无法直接访问。
在实验中,通过文件输入输出流进行数据的读写操作。
创建了文本文件来存储简单的字符串数据,并进行了多次读写测试。
(二)外部存储外部存储分为公共外部存储和私有外部存储。
公共外部存储可被其他应用和用户访问,私有外部存储则只有本应用可以访问。
测试了在不同外部存储区域写入和读取大文件的性能。
(三)SQLite 数据库SQLite 是安卓中常用的轻量级数据库。
创建了数据库表,进行了数据的插入、查询、更新和删除操作,同时观察了数据库操作的时间消耗和资源占用情况。
(四)SharedPreferencesSharedPreferences 适用于存储少量的键值对数据。
对其进行了读写操作,并测试了在多线程环境下的并发访问性能。
五、实验步骤1、准备测试数据,包括不同大小和类型的数据,如文本、图片等。
2、分别使用上述四种数据存储方式对测试数据进行存储和读取操作。
3、记录每次操作的时间、内存使用等性能指标。
4、对相同的数据量和操作,改变操作的频繁程度,重复实验步骤2 和 3。
六、实验结果与分析(一)内部存储在小数据量和操作不频繁的情况下,内部存储的读写速度较快。
在Android应用中利用SQLite进行本地数据库操作随着移动应用的不断发展,电子设备成为人们生活中不可或缺的一部分。
而Android操作系统作为最广泛使用的移动操作系统之一,它提供了强大的开发平台,为开发者们提供了各种各样的开发工具和API。
其中,SQLite作为Android应用中的一种轻量级数据库管理系统,被广泛应用于数据存储和管理。
本文将介绍在Android应用中通过SQLite实现本地数据库操作的方法。
1. 简介SQLite是一种无服务器的自包含的数据库引擎,它在Android操作系统中作为默认的关系型数据库引擎。
它无需独立的服务器进程,将数据库引擎与应用程序合并在一起,使得应用程序可以直接操作数据库。
SQLite在移动设备上非常流行,因为它占用的磁盘空间相对较少,并且提供了性能高效的操作方式。
2. 创建数据库在Android应用中使用SQLite进行本地数据库操作,首先需要创建一个数据库。
Android提供了SQLiteOpenHelper类来管理数据库的创建和升级。
在创建数据库之前,首先需要定义数据库的结构,包括表的结构和字段信息。
接着,通过继承SQLiteOpenHelper类,重写onCreate()方法和onUpgrade()方法,可以自动创建数据库和升级数据库。
3. 创建表使用SQLite进行本地数据库操作时,需要在数据库中创建表来存储数据。
通过执行SQL语句,可以在数据库中创建表以及定义表中的字段信息。
SQLite支持多种数据类型,包括整型、浮点型、文本型等。
通过在SQL语句中指定字段的名称和类型,可以创建适合应用需求的表。
4. 插入数据插入数据是在数据库中进行本地数据库操作的常见操作之一。
通过执行SQL 语句的INSERT INTO语句,可以将数据插入到数据库的表中。
通过使用ContentValues类,可以方便地设置插入数据的字段值。
通过调用SQLiteDatabase 类的insert()方法,可以执行插入数据的操作。
Android应用案例开发大全Android应用开发是当前移动互联网时代的热门话题,随着智能手机的普及和移动应用的需求不断增长,越来越多的开发者投身于Android应用开发的行列。
本文将为大家介绍一些Android应用案例开发的实例,希望能够对初学者和有一定开发经验的开发者有所帮助。
1. 聊天应用开发。
聊天应用是目前最常见的应用之一,无论是社交软件还是工作沟通工具,聊天应用都是人们日常生活中不可或缺的一部分。
在Android平台上,开发一个简单的聊天应用并不复杂,可以通过使用Socket进行实时通讯,同时结合RecyclerView实现消息列表的展示。
此外,还可以使用第三方的即时通讯SDK,如环信、融云等,来简化开发流程。
2. 新闻客户端开发。
新闻客户端是另一个常见的应用类型,它涵盖了各种新闻资讯,如时政、财经、科技、娱乐等,用户可以通过客户端实时获取最新的新闻信息。
在Android应用案例开发中,可以利用网络请求框架(如OkHttp、Retrofit)来获取新闻数据,并通过RecyclerView实现新闻列表的展示。
同时,可以使用WebView加载新闻详情页面,实现新闻内容的查看。
3. 天气预报应用开发。
天气预报应用可以帮助用户随时了解当地和其他地区的天气情况,提供实时的天气信息和未来几天的天气预报。
在Android应用案例开发中,可以使用第三方的天气API来获取天气数据,然后通过自定义View或第三方图表库来展示天气信息,同时可以利用定位功能获取用户当前所在地的天气情况。
4. 记账应用开发。
记账应用是一类实用性很强的应用,它可以帮助用户记录日常的消费和收入情况,帮助用户更好地管理个人财务。
在Android应用案例开发中,可以利用SQLite 数据库来存储用户的记账记录,同时通过自定义View或第三方图表库展示用户的消费和收入情况,提供数据统计和分析功能。
5. 健身运动应用开发。
健身运动应用可以帮助用户记录运动轨迹、消耗卡路里、监测心率等,帮助用户科学健身。
android 数据库update用法Android 数据库 Update 用法:在 Android 开发中,我们经常需要对数据库中的数据进行更新操作。
使用Update 语句可以快速修改数据库中的数据。
下面将详细介绍 Android 中数据库Update 的用法。
首先,我们需要使用 SQLiteDatabase 的 update() 方法来执行更新操作。
update() 方法的参数包括表名、值、条件和条件参数。
```java// 创建数据库实例SQLiteDatabase db = getWritableDatabase();// 定义更新的值ContentValues values = new ContentValues();values.put("columnName1", newValue1);values.put("columnName2", newValue2);// 条件语句和条件参数String selection = "columnName3 = ?";String[] selectionArgs = { "conditionParam" };// 执行更新操作int rowsUpdated = db.update("tableName", values, selection, selectionArgs);```在上述代码中,我们先创建了一个 SQLiteDatabase 实例。
接下来,我们定义了一个 ContentValues 对象来存储待更新的值。
`put()` 方法用于指定每个列的新值。
然后,我们定义了一个条件语句 `selection`,用于指定更新的条件。
条件参数`selectionArgs` 是一个字符串数组,用于传递给条件语句中的参数。
最后,我们使用 `update()` 方法执行更新,并将受影响的行数保存在变量 `rowsUpdated` 中。
Android操作SQLite数据库(增、删、改、查、分页等)及ListView显⽰数据的⽅法详解本⽂实例讲述了Android操作SQLite数据库(增、删、改、查、分页等)及ListView显⽰数据的⽅法。
分享给⼤家供⼤家参考,具体如下:由于刚接触android开发,故此想把学到的基础知识记录⼀下,以备查询,故此写的⽐较啰嗦:步骤如下:⼀、介绍:此⽂主要是介绍怎么使⽤android⾃带的数据库SQLite,以及把后台的数据⽤ListView控件显⽰⼆、新建⼀个android⼯程——DBSQLiteOperate⼯程⽬录:三、清单列表AndroidManifest.xml的配置为:<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="/apk/res/android"package="com.example.dboperate"android:versionCode="1"android:versionName="1.0" ><uses-sdk android:minSdkVersion="8" /><applicationandroid:icon="@drawable/ic_launcher"android:label="@string/app_name" ><!--单元测试加这句--><uses-library android:name="android.test.runner" /><activityandroid:name=".DBSQLiteOperateActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="UNCHER" /></intent-filter></activity></application><instrumentation android:name="android.test.InstrumentationTestRunner"android:targetPackage="com.example.dboperate"android:label="Test for my app"/></manifest>四、main.xml配置清单:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><LinearLayout android:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><TextViewandroid:id="@+id/name"android:layout_width="100dip"android:layout_height="wrap_content"android:text="@string/name"android:gravity="center"/><TextViewandroid:id="@+id/phone"android:layout_width="100dip"android:layout_height="wrap_content"android:text="@string/phone"android:gravity="center"/><TextViewandroid:id="@+id/amount"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/amount"android:gravity="center"/></LinearLayout><ListViewandroid:id="@+id/listView"android:layout_width="fill_parent"android:layout_height="fill_parent" ></ListView></LinearLayout>五、item.xml配置清单:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="horizontal" ><TextViewandroid:id="@+id/name"android:layout_width="100dip"android:layout_height="wrap_content"android:text="@string/name"android:gravity="center"/><TextViewandroid:id="@+id/phone"android:layout_width="100dip"android:layout_height="wrap_content"android:text="@string/phone"android:gravity="center"/><TextViewandroid:id="@+id/amount"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/amount"android:gravity="center"/></LinearLayout>六、string.xml配置清单:<?xml version="1.0" encoding="utf-8"?><resources><string name="hello">Hello World, DBSQLiteOperateActivity!</string><string name="app_name">ExampleDBSQLiteOperate8</string><string name="name">姓名</string><string name="phone">电话</string><string name="amount">存款</string></resources>七、DBSQLiteOperateActivity.java Activity类的源码:package com.example.dboperate;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import com.example.adapter.PersonAdapter;import com.example.domain.Person;import com.example.service.PersonService;import android.app.Activity;import android.database.Cursor;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.SimpleCursorAdapter;import android.widget.Toast;public class DBSQLiteOperateActivity extends Activity {ListView listView;PersonService personService;OnItemClickListener listViewListener;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);listViewListener = new OnItemClickListener(){@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {//得到listView控件ListView listView = (ListView)parent;//1、如果使⽤⾃定义适配器,返回的是Person对象//得到该条⽬数据// Person person = (Person)listView.getItemAtPosition(position);// //⼴播出去// Toast.makeText(getApplicationContext(), person.toString(), Toast.LENGTH_LONG).show(); //2、如果使⽤showList2()⽅法中的适配器时,则取得的值是不⼀样的,返回的是cursor// Cursor cursor = (Cursor)listView.getItemAtPosition(position);// int personid = cursor.getInt(cursor.getColumnIndex("_id"));// Toast.makeText(getApplicationContext(), personid+"", Toast.LENGTH_LONG).show();//3、如果使⽤showList()⽅法中的适配器时,则取得的值是不⼀样的,返回的是map@SuppressWarnings("unchecked")Map<String,Object> map = (Map)listView.getItemAtPosition(position);String name = map.get("name").toString();String personid = map.get("personid").toString();Toast.makeText(getApplicationContext(), personid +"-"+ name, Toast.LENGTH_LONG).show(); }};listView = (ListView) this.findViewById(R.id.listView);listView.setOnItemClickListener(listViewListener);personService = new PersonService(this);showList();}private void showList() {List<Person> persons = personService.getScrollData(0, 50);List<HashMap<String,Object>> data = new ArrayList<HashMap<String,Object>>();for(Person person : persons){HashMap<String,Object> item = new HashMap<String,Object>();item.put("name", person.getName());item.put("phone", person.getPhone());item.put("amount", person.getAmount());item.put("personid", person.getId());data.add(item);}SimpleAdapter adapter = new SimpleAdapter(this,data,yout.item, new String[]{"name","phone","amount"}, new int[]{,R.id.phone,R.id.amount});listView.setAdapter(adapter);}public void showList2(){Cursor cursor = personService.getCursorScrollData(0, 50);//该适配器要求返回的结果集cursor必须包含_id字段,所以需要对取得结果集进⾏处理SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,yout.item,cursor,new String[]{"name","phone","amount"}, new int[]{,R.id.phone,R.id.amount} ); listView.setAdapter(adapter);}/*** ⾃定义适配器*/public void showList3(){List<Person> persons = personService.getScrollData(0, 50);/*** 第⼀个参数:上下⽂context,第⼆个参数:要显⽰的数据,第三个参数:绑定的条⽬界⾯*/PersonAdapter adapter = new PersonAdapter(this, persons, yout.item);listView.setAdapter(adapter);}}⼋、person.java 实体类源码:package com.example.domain;public class Person {private Integer id;private String name;private String phone;private Integer amount;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public Person(String name, String phone) { = name;this.phone = phone;}public Person(Integer id, String name, String phone,Integer amount) {super();this.id = id; = name;this.phone = phone;this.amount = amount;}public Person() {super();}public Integer getAmount() {return amount;}public void setAmount(Integer amount) {this.amount = amount;}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + ", phone=" + phone+ ", amount=" + amount + "]";}}九、DBOperateHelper.java 业务类源码:package com.example.service;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class DBOperateHelper extends SQLiteOpenHelper {public DBOperateHelper(Context context) {//默认创建的数据库⽂件保存在<包名>/database///第⼀个参数是上下⽂,第⼆个参数是数据库名称,第三个是游标⼯⼚为null时使⽤数据库默认的游标⼯⼚,第四个是数据库版本号但是不能为0,⼀般⼤于0super(context, "smallpig", null, 4);}/*** 数据库每⼀次被创建时被调⽤*/@Overridepublic void onCreate(SQLiteDatabase sqldb) {sqldb.execSQL("create table person(personid integer primary key autoincrement,name varchar(20),phone varchar(12) null)");}/*** 每⼀次数据库版本号发⽣变动时触发此⽅法* ⽐如如果想往数据库中再插⼊⼀些表、字段或者其他信息时通过修改数据库版本号来触发此⽅法*/@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//db.execSQL("alter table person add phone varchar(12) null");\db.execSQL("alter table person add amount Integer null");}}⼗、PersonService.java 业务类源码:package com.example.service;import java.util.ArrayList;import java.util.List;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import com.example.domain.Person;public class PersonService {private DBOperateHelper dbOperateHelper;public PersonService(Context context) {this.dbOperateHelper = new DBOperateHelper(context);}/*** 保存记录* @param person*/public void save(Person person){//得到数据库实例,⾥⾯封装了数据库操作⽅法SQLiteDatabase sqldb = dbOperateHelper.getWritableDatabase();//sqldb.execSQL("insert into person(name,phone) values('"+person.getName()+"','"+person.getPhone()+"')");//利⽤占位符可以避免注⼊,但是注意数组参与与占位符对应的字段要⼀⼀对应sqldb.execSQL("insert into person(name,phone,amount) values(?,?,?)",new Object[]{person.getName(),person.getPhone(),person.getAmount()});//关闭数据库sqldb.close();}/*** 删除记录* @param id*/public void delete(Integer id){SQLiteDatabase sqldb = dbOperateHelper.getWritableDatabase();sqldb.execSQL("delete from person where personid=?",new Object[]{id});sqldb.close();}/*** 更新记录* @param person*/public void update(Person person){SQLiteDatabase sqldb = dbOperateHelper.getWritableDatabase();sqldb.execSQL("update person set name=?,phone=?,amount=? where personid=?",new Object[]{person.getName(),person.getPhone(),person.getAmount(),person.getId()}); sqldb.close();}/*** 通过ID查询记录* @param id* @return*/public Person find(Integer id){/*** getWritableDatabase 与 getReadableDatabase 的区别:* getReadableDatabase会先返回getWritableDatabase(可写),如果调⽤getWritableDatabase失败* 则才会调⽤getReadableDatabase后续⽅法,使数据库只读* 当写⼊的数据超过数据库⼤⼩则调⽤getWritableDatabase会失败* 所以只读时则可以使⽤此⽅法,其它情况(只要不是超过数据库⼤⼩)也可以使⽤此⽅法*/SQLiteDatabase sqldb = dbOperateHelper.getReadableDatabase();Cursor cursor = sqldb.rawQuery("select * from person where personid=?", new String[]{String.valueOf(id)});int personid;String name;String phone;int amount;Person person = null;if(cursor.moveToFirst()){personid = cursor.getInt(cursor.getColumnIndex("personid"));name = cursor.getString(cursor.getColumnIndex("name"));phone = cursor.getString(cursor.getColumnIndex("phone"));amount = cursor.getInt(cursor.getColumnIndex("amount"));person = new Person(personid,name,phone,amount);}cursor.close();return person;}/*** 返回指定长度记录,limit 3,5,适⽤于分页* @param offset 起始* @param maxResult 长度* @return*/public List<Person> getScrollData(int offset,int maxResult){SQLiteDatabase sqldb = dbOperateHelper.getReadableDatabase();Cursor cursor = sqldb.rawQuery("select * from person order by personid asc limit ?,?", new String[]{String.valueOf(offset),String.valueOf(maxResult)});int personid;String name;String phone;int amount;Person person = null;List<Person> persons = new ArrayList<Person>();while(cursor.moveToNext()){personid = cursor.getInt(cursor.getColumnIndex("personid"));name = cursor.getString(cursor.getColumnIndex("name"));phone = cursor.getString(cursor.getColumnIndex("phone"));amount = cursor.getInt(cursor.getColumnIndex("amount"));person = new Person(personid,name,phone,amount);persons.add(person);}cursor.close();return persons;}/*** 返回cursor* @param offset 起始* @param maxResult 长度* @return*/public Cursor getCursorScrollData(int offset,int maxResult){SQLiteDatabase sqldb = dbOperateHelper.getReadableDatabase();Cursor cursor = sqldb.rawQuery("select personid as _id,name,phone,amount from person order by personid asc limit ?,?", new String[]{String.valueOf(offset),String.valueOf(maxResult)}); return cursor;}/*** 返回总记录数* @return*/public long getCount(){SQLiteDatabase sqldb = dbOperateHelper.getReadableDatabase();Cursor cursor = sqldb.rawQuery("select count(*) from person", null);//该查询语句值返回⼀条语句cursor.moveToFirst();long result = cursor.getLong(0);cursor.close();return result;}public void payment(){SQLiteDatabase sqldb = dbOperateHelper.getWritableDatabase();sqldb.beginTransaction();//开启事务try{sqldb.execSQL("update person set amount = amount -10 where personid=1");sqldb.execSQL("update person set amount = amount + 10 where personid=2");sqldb.setTransactionSuccessful();//设置事务标志位true} finally {//结束事务:有两种情况:commit\rollback,事务提交或者回滚是由事务的标识决定的//事务为ture则提交,事务为flase则回滚,默认为falsesqldb.endTransaction();}}}⼗⼀、OtherPersonService.java 业务类源码:package com.example.service;import java.util.ArrayList;import java.util.List;import com.example.domain.Person;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class OtherPersonService {private DBOperateHelper dbOperateHelper;public OtherPersonService(Context context) {this.dbOperateHelper = new DBOperateHelper(context);}/*** 保存记录* @param person*/public void save(Person person){//得到数据库实例,⾥⾯封装了数据库操作⽅法SQLiteDatabase sqldb = dbOperateHelper.getWritableDatabase();//sqldb.execSQL("insert into person(name,phone) values('"+person.getName()+"','"+person.getPhone()+"')");//利⽤占位符可以避免注⼊,但是注意数组参与与占位符对应的字段要⼀⼀对应//sqldb.execSQL("insert into person(name,phone) values(?,?)",new Object[]{person.getName(),person.getPhone()});ContentValues values = new ContentValues();values.put("name", person.getName());values.put("phone", person.getPhone());values.put("amount", person.getAmount());//第⼀个参数是表名,第三个为字段值集合,第⼆个参数是空值字段,当第三个字段值集合为空时,系统会⾃动插⼊⼀条第⼆个参数为空的sql语句//否则当第三个参数为空时,如果第⼆个参数也为空,那么插⼊表就会找不到插⼊的字段信息,会报错sqldb.insert("person", "name", values );//关闭数据库sqldb.close();}/*** 删除记录* @param id*/public void delete(Integer id){SQLiteDatabase sqldb = dbOperateHelper.getWritableDatabase();//sqldb.execSQL("delete from person where personid=?",new Object[]{id});//第⼀个参数是表名,第⼆个是where后⾯的条件⽤占位符表⽰,第三个对应占位符为参数值sqldb.delete("person", "personid=?", new String[]{Integer.toString(id)});sqldb.close();}/*** 更新记录* @param person*/public void update(Person person){SQLiteDatabase sqldb = dbOperateHelper.getWritableDatabase();//sqldb.execSQL("update person set name=?,phone=? where personid=?",new Object[]{person.getName(),person.getPhone(),person.getId()});//第⼀个参数为表名,第⼆个是⼀个更新值集合,采⽤键值对的形式,每个更新的字段对应更新值//第三个参数是where后⾯条件字段⽤占位符标识,第四个参数是对应where占位符的值ContentValues values = new ContentValues();values.put("name", person.getName());values.put("phone", person.getPhone());values.put("amount", person.getAmount());sqldb.update("person", values , "personid=?", new String[]{person.getId().toString()});sqldb.close();}/*** 通过ID查询记录* @param id* @return*/public Person find(Integer id){/*** getWritableDatabase 与 getReadableDatabase 的区别:* getReadableDatabase会先返回getWritableDatabase(可写),如果调⽤getWritableDatabase失败* 则才会调⽤getReadableDatabase后续⽅法,使数据库只读* 当写⼊的数据超过数据库⼤⼩则调⽤getWritableDatabase会失败* 所以只读时则可以使⽤此⽅法,其它情况(只要不是超过数据库⼤⼩)也可以使⽤此⽅法*/SQLiteDatabase sqldb = dbOperateHelper.getReadableDatabase();//Cursor cursor = sqldb.rawQuery("select * from person where personid=?", new String[]{String.valueOf(id)});//第⼀个参数是表名;第⼆个参数是查询显⽰的字段,null时默认查询显⽰所有字段;//第三个参数是where查询条件占位符;第四个是占位符对应的值;//第五个参数是group by条件;第六个是having条件;第七个是order by条件Cursor cursor = sqldb.query("person", null, "personid=?", new String[]{id.toString()}, null, null, null);int personid;String name;String phone;int amount;Person person = null;if(cursor.moveToFirst()){personid = cursor.getInt(cursor.getColumnIndex("personid"));name = cursor.getString(cursor.getColumnIndex("name"));phone = cursor.getString(cursor.getColumnIndex("phone"));amount = cursor.getInt(cursor.getColumnIndex("amount"));person = new Person(personid,name,phone,amount);}cursor.close();return person;}/*** 返回指定长度记录,limit 3,5,适⽤于分页* @param offset 起始* @param maxResult 长度* @return*/public List<Person> getScrollData(int offset,int maxResult){SQLiteDatabase sqldb = dbOperateHelper.getReadableDatabase();//Cursor cursor = sqldb.rawQuery("select * from person order by personid asc limit ?,?", new String[]{String.valueOf(offset),String.valueOf(maxResult)}); //第⼀个参数是表名;第⼆个参数是查询显⽰的字段,null时默认查询显⽰所有字段;//第三个参数是where查询条件占位符;第四个是占位符对应的值;//第五个参数是group by条件;第六个是having条件;第七个是order by条件//第⼋个参数是limit ?,? 条件Cursor cursor = sqldb.query("person", null, null, null, null, null, "personid",offset+","+maxResult); int personid;String name;String phone;int amount;Person person = null;List<Person> persons = new ArrayList<Person>();while(cursor.moveToNext()){personid = cursor.getInt(cursor.getColumnIndex("personid"));name = cursor.getString(cursor.getColumnIndex("name"));phone = cursor.getString(cursor.getColumnIndex("phone"));amount = cursor.getInt(cursor.getColumnIndex("amount"));person = new Person(personid,name,phone,amount);persons.add(person);}cursor.close();return persons;}/*** 返回总记录数* @return*/public long getCount(){SQLiteDatabase sqldb = dbOperateHelper.getReadableDatabase();//Cursor cursor = sqldb.rawQuery("select count(*) from person", null);//第⼀个参数是表名;第⼆个参数是查询显⽰的字段,null时默认查询显⽰所有字段;//第三个参数是where查询条件占位符;第四个是占位符对应的值;//第五个参数是group by条件;第六个是having条件;第七个是order by条件Cursor cursor = sqldb.query("person", new String[]{"count(*)"}, null, null, null, null, null);//该查询语句值返回⼀条语句cursor.moveToFirst();long result = cursor.getLong(0);cursor.close();return result;}}⼗⼆、PersonServiceTest.java 单元测试类源码:package com.example.test;import java.util.List;import com.example.domain.Person;import com.example.service.DBOperateHelper;import com.example.service.PersonService;import android.test.AndroidTestCase;import android.util.Log;public class PersonServiceTest extends AndroidTestCase {public void testCreateDB() throws Exception{DBOperateHelper dbHelper = new DBOperateHelper(getContext());dbHelper.getWritableDatabase();}public void testSave() throws Exception{PersonService ps = new PersonService(getContext());for(int i=1;i<=100;i++){Person person = new Person();person.setName("我是"+i);person.setPhone(String.valueOf(Long.parseLong("188********")+i));ps.save(person);Log.i("PersonService",person.toString());}}public void testDelete() throws Exception{PersonService ps = new PersonService(getContext());ps.delete(10);}public void testUpdate() throws Exception{PersonService ps = new PersonService(getContext());ps.update(new Person(1,"xiaopang","188********",0));}public void testFind() throws Exception{PersonService ps = new PersonService(getContext());Person person = ps.find(1);Log.i("PersonService", person.toString());}public void testGetScrollData() throws Exception{PersonService ps = new PersonService(getContext());List<Person> persons = ps.getScrollData(3, 5);for(Person person:persons){Log.i("PersonService",person.toString());}}public void testGetCount() throws Exception{PersonService ps = new PersonService(getContext());Long count = ps.getCount();Log.i("PersonService",count.toString());}public void testUpdateAmount() throws Exception{PersonService ps = new PersonService(getContext());Person person1 = ps.find(1);Person person2 = ps.find(2);person1.setAmount(100);person2.setAmount(100);ps.update(person1);ps.update(person2);}public void testPayment() throws Exception{PersonService ps = new PersonService(getContext());ps.payment();}}⼗三、OtherPersonServiceTest 单元测试类源码:package com.example.test;import java.util.List;import com.example.domain.Person;import com.example.service.DBOperateHelper;import com.example.service.OtherPersonService;import android.test.AndroidTestCase;import android.util.Log;public class OtherPersonServiceTest extends AndroidTestCase {public void testCreateDB() throws Exception{DBOperateHelper dbHelper = new DBOperateHelper(getContext());dbHelper.getWritableDatabase();}public void testSave() throws Exception{OtherPersonService ps = new OtherPersonService(getContext());for(int i=1;i<=100;i++){Person person = new Person();person.setName("我是"+i);person.setPhone(String.valueOf(Long.parseLong("188********")+i));ps.save(person);Log.i("PersonService",person.toString());}}public void testDelete() throws Exception{OtherPersonService ps = new OtherPersonService(getContext());ps.delete(10);}public void testUpdate() throws Exception{OtherPersonService ps = new OtherPersonService(getContext());ps.update(new Person(1,"xiaopang","188********",0));}public void testFind() throws Exception{OtherPersonService ps = new OtherPersonService(getContext());Person person = ps.find(1);Log.i("PersonService", person.toString());}public void testGetScrollData() throws Exception{OtherPersonService ps = new OtherPersonService(getContext());List<Person> persons = ps.getScrollData(3, 5);for(Person person:persons){Log.i("PersonService",person.toString());}}public void testGetCount() throws Exception{OtherPersonService ps = new OtherPersonService(getContext());Long count = ps.getCount();Log.i("PersonService",count.toString());}}⼗四、注意事项以及相关知识点:1、掌握SQLite数据库如何创建数据库、建⽴表、维护字段等操作继承SQLiteOpenHelper类,构造函数调⽤⽗类构造函数创建数据库,利⽤onCreate创建表,利⽤onUpgrade更新表字段信息2、掌握SQLite数据库如何增、删、改、查以及分页取得SQLiteDatabase的实例,然后调⽤该实例的⽅法可以完成上述操作SQLiteDataBase提供两种操作上述功能的⽅式:⼀是直接调⽤execSQL书写sql语句,另⼀种是通过insert、update、delete、query等⽅法来传值来拼接sql,前⼀种适合熟练掌握sql 语句的3、对需要数据同步的处理请添加事务处理,熟悉事务的处理⽅式4、了解各个⽅法参数的意义以及传值5、掌握ListView显⽰后台数据的使⽤⽅法SimpleAdapter、SimpleCursorAdapter以及⾃定义适配器的使⽤,以及OnItemClickListener取值时各个适配器返回值的区别以及取值⽅法6、多学、多记、多练、多思,加油!更多关于Android相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》及《》希望本⽂所述对⼤家Android程序设计有所帮助。
AndroidStudio连接数据库实现增删改查 源代码如下:DBUtil.java:package dao;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.sql.PreparedStatement;public class DBUtil {public static String db_url = "jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=UTF-8&serverTimezone=GMT"; public static String db_user = "root";public static String db_pass = "root";public static Connection getConn () {Connection conn = null;try {Class.forName("com.mysql.cj.jdbc.Driver");conn = DriverManager.getConnection(db_url, db_user, db_pass);} catch (Exception e) {e.printStackTrace();}return conn;}public static void close (Statement state, Connection conn) {if (state != null) {try {state.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}public static void close (ResultSet rs, Statement state, Connection conn) {if (rs != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if (state != null) {try {state.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}Add.java:package add;import java.sql.Connection;import java.sql.Statement;import dao.DBUtil;public class Add {public static boolean add(String table, AddService user ) {String sql = "insert into "+table+"(username,password)values('" + user.getUsername() + "','" + user.getPassword() + "')"; Connection conn = DBUtil.getConn();Statement state = null;boolean f = false;int a = 0;try {state = conn.createStatement();a = state.executeUpdate(sql);} catch (Exception e) {e.printStackTrace();} finally {DBUtil.close(state, conn);}if (a > 0) {f = true;}return f;}}AddService.java:package add;public class AddService {String username;String password;public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public static void main(String args[]){AddService user=new AddService();user.setUsername("123");user.setPassword("456");Add test=new Add();test.add("user1",user);}}Delete.java:package delete;import java.sql.Connection;import java.sql.Statement;import java.sql.SQLException;import dao.DBUtil;public class Delete {public boolean delete(String table,String username){boolean c=false;Connection conn= DBUtil.getConn();Statement state=null;String sql="delete from "+table+" where username="+username;try {state=conn.createStatement();int num = state.executeUpdate(sql);if(num!=0){c= true;}state.close();conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return c;}}DeleteService.java:package delete;public class DeleteService {String username;public void setUsername(String username) {ername = username;}public String getUsername() {return username;}public static void main(String args[]){DeleteService user=new DeleteService();user.setUsername("123");String username="'"+user.getUsername()+"'";Delete test=new Delete();test.delete("user1",username);}}Change.java:package change;import java.sql.Connection;import java.sql.SQLException;import java.sql.Statement;import dao.DBUtil;public class Change {public boolean change(String table,String lie,String lie0,String gai,String biao){Connection conn=DBUtil.getConn();Statement state=null;try {state=conn.createStatement();String sql="update "+table+" set "+lie+"='"+gai+"' where "+lie0+"='"+biao+"'"; System.out.println(sql);state.executeUpdate(sql);state.close();conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return true;}}ChangeService.java:package change;public class ChangeService {String lie;String lie0;String gai;String biao;public String getBiao() {return biao;}public String getGai() {return gai;}public String getLie() {return lie;}public String getLie0() {return lie0;}public void setBiao(String biao) {this.biao = biao;}public void setGai(String gai) {this.gai = gai;}public void setLie(String lie) {this.lie = lie;}public void setLie0(String lie0) {this.lie0 = lie0;}public static void main(String args[]){ChangeService user=new ChangeService();user.setBiao("2");user.setGai("xhj");user.setLie0("username");user.setLie("password");Change test=new Change();test.change("user1",user.getLie(),user.getLie0(),user.getGai(),user.getBiao()); }}Select.java:package select;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import dao.DBUtil;public class Select {public boolean select(String table){boolean c;Connection conn=DBUtil.getConn();Statement state=null;try{state=conn.createStatement();String sql="select * from "+table;ResultSet rs=state.executeQuery(sql);while(rs.next()){System.out.println(rs.getString(1)+" "+rs.getString(2));}rs.close();state.close();conn.close();}catch(Exception e){}return true;}}SelectService.java:package select;public class SelectService {String table;public String getTable() {return table;}public void setTable(String table) {this.table = table;}public static void main(String[] args) {SelectService user=new SelectService(); user.setTable("user1");Select test=new Select();test.select(user.getTable());}}数据库表名:user1。
Android 学习笔记-让我们快速上手吧Google 的 Android SDK 发布也有一段时间了,一直想研究一下却苦于找不到时间。
利用这个周未,开始强迫自己再次进入学习状态,原因很简单:我看好开放的 gPhone。
SDK 的下载与安装并不复杂, 网上也有不少同学已经进入状态了, 我就不再重复了吧。
今天主要讨论的,还是永远不变的话题:Hello World.1.最简单的 HelloWorld安装了 SDK 后,直接生成一个 Android Project,一句代码不用写,就能跑出一个最 简单的 HelloWorld 例程。
我们看一下它的代码:public void onCreate(Bundle icicle) {super.onCreate(icicle);setTheme(android.R.style.Theme_Dark);setContentView(yout.main);}看上去实在很简单,只有两句话而已。
关键在这个 yout.main 上,凭直觉,这 应该是定义的资源。
的确,在 R.java 中只是定义了一个 static int 而已,真正的资源 描述在 res/layout/main.xml文件里(注意:这里的 R.java 不要手工编辑,每次 build project 时它都会根据 res 下的资源描述被自动修改)。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent">android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="Hello World"/></LinearLayout>这个文件很好读 , 一个描述了这是一个线性排列的布局 , android:orientation=vertical 表示所有组件将纵向排布。
package com.adrainy.webmarks;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentV alues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper {
public static final String _ID = "_id";
public static final String NAME = "name";
public static final String URL = "url";
public static final String DESC = "desc";
public static final String DA TABASE_NAME = "webBookmarksdata";
public static final String TABLE_NAME = "webmarks";
public static final int VERSION = 1;
public static final String DA TA TABLE_CREA TE = "create table " + TABLE_NAME + "(" + _ID + " integer primary key autoincrement , " + NAME
+ " text not null," + URL + " text not null," + DESC + " text)";
private SQLiteDatabase sqldb;
private MySQLHelper helper;
private Context ctx;
private ContentV alues values;
public DBHelper(Context context) {
this.ctx = context;
}
class MySQLHelper extends SQLiteOpenHelper {
public MySQLHelper() {
// 创建数据库和数据库版本号
super(ctx, DA TABASE_NAME, null, VERSION);
}
// 创建表
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DA TA TABLE_CREA TE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldV ersion, int newV ersion) { db.execSQL("drop table if exists " + TABLE_NAME);
onCreate(db);
}
}
// 打开数据库
public void open() {
helper = new MySQLHelper();
sqldb = helper.getWritableDatabase();
}
// 关闭数据库
public void close() {
helper.close();
}
// 添加记录
public int insert(Link link) {
values = new ContentV alues();
values.put(NAME, link.getName());
values.put(URL, link.getUrl());
values.put(DESC, link.getDesc());
return (int) sqldb.insert(TABLE_NAME, "empty", values);
// empty是表中没有指向的列时用empty代替
}
// 删除选中de记录
public int delete(int id) {
String[] whereArgs = { String.valueOf(id) };
return sqldb.delete(TABLE_NAME, "_id=?", whereArgs);
}
// 修改记录
public int update(Link link) {
values = new ContentV alues();
values.put(NAME, link.getName());
values.put(URL, link.getUrl());
values.put(DESC, link.getDesc());
String[] whereArgs = { String.valueOf(link.getId()) };
return sqldb.update(TABLE_NAME, values, _ID + "=?", whereArgs);
}
// 查询记录
public List<Link> query() {
Cursor c = sqldb.query(TABLE_NAME, null, null, null, null, null, null, null);
List<Link> links = new ArrayList<Link>();
for (int i = 0; i < c.getCount(); i++) {
c.moveToPosition(i);
Link link = new Link();
link.setId(c.getInt(c.getColumnIndex(_ID)));
link.setName(c.getString(c.getColumnIndex(NAME)));
link.setUrl(c.getString(c.getColumnIndex(URL)));
link.setDesc(c.getString(c.getColumnIndex(DESC)));
links.add(link);
}
return links;
}
}。