Android演示数据库操作

安卓Room框架初使用 安卓Room框架初使用Room框架介绍Database(数据库)Entity:表示数据库中的表。表的复杂写法:DAO:包含用于访问数据库的方法。具体使用(附Demo)添加依赖数据库的建立数据库的升级表结构的修改Entity代码Dao代码表的增删改查操作执行效果总结 Room框架介绍 Room在·SQLite上提供了抽象层,以便于更加流畅的访问数据库,对数据库进行操作。主要由Database,Entity,Dao这三部分组成: Database(数据库) 包含数据库持有者,并作为应用已保留的持久关系型数据的底 阅读详情

Android中需要持久化的数据一般都保存在一个轻量级的数据库SQLite中。实际使用中一般是创建一个DBHelper类执行具体操作,并将结果反馈给UI。


例子如下:

数据库操作类DBHelper:

package com.freesoft.utility;

import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

public class DBHelper {
	private static final String TAG = "TestDB_DBHelper.java";
	private static final String TABLE_NAME = "TestDB";
	private Cursor cur = null;
	private SQLiteDatabase db = null;;
	private Context context = null;

	public DBHelper(Context context) {
		this.open(context);
	}

	public void open(Context context) {
		if (null == db || !db.isOpen()) {
			this.context = context;
			db = context.openOrCreateDatabase(this.TABLE_NAME,
					context.MODE_PRIVATE, null);
			createTabel();
			Log.v(this.TAG, "Create  or Open DataBase。。。");
		}
	}

	public void close() {
		db.close();
		db = null;
	}

	private void createTabel() {
		String sql = "";
		try {
			sql = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " ("
					+ "ID INTEGER PRIMARY KEY autoincrement,  "
					+ "NAME TEXT,  " + "NICKNAME TEXT, " + "AGE INTEGER, "
					+ "EMAIL TEXT)";
			db.execSQL(sql);
		} catch (SQLException e) {
			Log.v(TAG, "Create Table failed.");
		}
	}

	public boolean insert(String username, String nickname, int age,
			String email) {
		if (db == null)
			open(this.context);

		String sql = "insert into " + TABLE_NAME + " values(null,'"
				+ username + "','" + nickname + "'," + age + ",'" + email + "'"
				+ ")";
		try {
			db.execSQL(sql);
			return true;
		} catch (SQLException e) {
			Log.v(TAG, "Insert Record failed.");
			return false;
		}
	}

	public boolean delete(int id) {
		if (db == null)
			open(this.context);

		String sql = "DELETE FROM " + TABLE_NAME + " WHERE ID=" + id;
		try {
			db.execSQL(sql);
			return true;
		} catch (SQLException e) {
			Log.v(TAG, "Delete Record failed.");
			return false;
		}
	}
	
	
	public Cursor queryData() {
		if (db != null) {
			cur = db.query(TABLE_NAME, new String[] { "ID", "NAME",
					"NICKNAME", "AGE", "EMAIL" }, null, null, null, null, null);
			return cur;
		} else
			return null;
	}

}

UI展示类DatabaseActivity:

package com.freesoft.anttest;

import com.freesoft.utility.DBHelper;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.view.View;
import android.view.View.OnClickListener;

public class DatabaseActivity extends Activity {

	@Override
	protected void onDestroy() {
		if (db != null) {
			db.close();
			db = null;
		}
		super.onDestroy();
	}

	/** Called when the activity is first created. */
	private EditText et_id = null;
	private EditText et_username = null;
	private EditText et_nickname = null;
	private EditText et_age = null;
	private EditText et_email = null;

	private Button btn_next = null;
	private Button btn_prev = null;
	private Button btn_del = null;
	private Button btn_insert = null;

	private DBHelper db = null;
	private Cursor cur = null;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.database);

		findControls();
		initControls();
	}

	private void initControls() {
		db = new DBHelper(this);
		db.open(this);
		// 浏览所有数据
		cur = db.queryData();
		if (cur != null)
			cur.moveToFirst();

		refreshUI();
	}

	private void refreshUI() {
		// 确保cur内存有有效数据
		if ((cur != null) && (cur.getCount() > 0)) {
			btn_del.setEnabled(true);

			et_id.setText(cur.getInt(0) + "");
			et_username.setText(cur.getString(1));
			et_nickname.setText(cur.getString(2));
			et_age.setText(cur.getInt(3) + "");
			et_email.setText(cur.getString(4));

			if (cur.isLast())
				btn_next.setEnabled(false);
			else
				btn_next.setEnabled(true);

			if (cur.isFirst())
				btn_prev.setEnabled(false);
			else
				btn_prev.setEnabled(true);
		} else {
			btn_next.setEnabled(false);
			btn_prev.setEnabled(false);
			btn_del.setEnabled(false);
			
			et_id.setText("");
			et_username.setText("");
			et_nickname.setText("");
			et_age.setText("");
			et_email.setText("");
		}
	}

	private void findControls() {
		et_id = (EditText) findViewById(R.id.et_db_id);
		et_username = (EditText) findViewById(R.id.et_db_username);
		et_nickname = (EditText) findViewById(R.id.et_db_nickname);
		et_age = (EditText) findViewById(R.id.ed_db_age);
		et_email = (EditText) findViewById(R.id.ed_db_email);

		btn_next = (Button) findViewById(R.id.btn_db_next);
		btn_prev = (Button) findViewById(R.id.btn_db_prev);
		btn_del = (Button) findViewById(R.id.btn_db_del);
		btn_insert = (Button) findViewById(R.id.btn_db_insert);

		btn_next.setOnClickListener(new btnnext_onclick());
		btn_prev.setOnClickListener(new btnprev_onclick());
		btn_del.setOnClickListener(new btndel_onclick());
		btn_insert.setOnClickListener(new btninsert_onclick());
	}

	public static int IntWrapper(String s, int defaultvalue) {
		try {
			return Integer.parseInt(s);
		} catch (Exception e) {
			return defaultvalue;
		}

	}

	class btnnext_onclick implements OnClickListener {
		@Override
		public void onClick(View arg0) {
			DatabaseActivity.this.cur.moveToNext();
			refreshUI();
		}
	}

	class btnprev_onclick implements OnClickListener {
		@Override
		public void onClick(View arg0) {
			DatabaseActivity.this.cur.moveToPrevious();
			refreshUI();
		}
	}

	class btndel_onclick implements OnClickListener {
		@Override
		public void onClick(View arg0) {
			if (db != null) {
				db.delete(DatabaseActivity.IntWrapper(et_id.getText()
						.toString(), 1));

				cur = db.queryData();
				cur.moveToFirst();
				refreshUI();
			}
		}
	}

	class btninsert_onclick implements OnClickListener {
		@Override
		public void onClick(View arg0) {
			if (db != null) {
				db.insert(et_username.getText().toString(), et_nickname
						.getText().toString(), DatabaseActivity.IntWrapper(
						et_age.getText().toString(), 1), et_email.getText()
						.toString());

				cur = db.queryData();
				cur.moveToLast();
				refreshUI();
			}
		}
	}
}


老规矩,具体工程下载地址参见:

http://download.youkuaiyun.com/source/3562941


Android 项目开发流程——记事本 ,ListView、数据库操作、Activity跳转与数据回传、界面布局、界面控件的实际运用 Android 项目开发流程——记事本 ,ListView、数据库操作、Activity跳转与数据回传、界面布局、界面控件的实际运用 1、需求分析 1.1 功能分析 记事本界面包含内容列表和添加按钮,当长按列表条目(Item)时,会弹出一个提示是否删除Item的对话框,当点击对话框中的“确定”按钮时,删除Item,当点击对话框中的“取消”按钮时,取消删除Item。当点击记事本界面列表中的Item时,会跳转到修改记录界面,该界面可以查看和修改记录。当点击记事本界面的“添加”按钮时,会跳转到添加记录界面,该界面 阅读详情

相关推荐

TodoList_Demo:一个简单的演示 Android 应用程序,用于使用数据库和内容提供程序进行演示

TodoList_Demo 一个简单的演示 Android 应用程序,用于使用数据库和内容提供程序进行演示

android数据库中数据不存在就插入,存在就更新操作方法

有时候,我们需要将在数据库中bu

u014552288的专栏 6411

C# NX二次开发:两种过滤器设置方案的实战解析与场景适配

本文深入解析C# NX二次开发中的两种过滤器设置方案:AddFilterHandler回调与MaskTriple属性设置。通过实战案例对比其性能差异与适用场景,帮助开发者根据需求选择最优方案,提升NX插件开发效率与交互体验。特别针对BlockStyler集成场景提供专业建议,是NX二次开发者的实用指南。

weixin_33739646的博客 844

Android数据库的Demo演示

本Demo涉及知识点概述如下:          SQLite数据库与SimpleCursorAdapter适配器          SQLite的常用语法          SQLiteOpenHelper的用法          SQLite数据库实现CRUD的少参方法          ListView的数据展示          上下文菜单的展示 XML(主界面布局):

优快云_OF_ZHAO的博客 614

ModusToolbox 实战避坑指南|从环境配置到项目构建

本文是一份详尽的ModusToolbox实战避坑指南,手把手教你从环境配置到项目构建。重点解决了Windows系统下的安装、关键环境变量CY_TOOLS_PATHS的设置、PowerShell执行策略调整以及利用URL Modifier工具优化GitHub资源下载等核心难题,旨在帮助开发者,特别是英飞凌(Infineon)芯片用户,顺利搭建开发环境并成功运行第一个Hello World程序。

t1u2v的博客 591

Ansys Lumerical 启动时出现 Error: Could not connect to Ansys license server specified at 1055@ 的另一种解决办法

昨天在关闭了中之后 就能正常打开 FDTD 了,结果今天想开启出现了同样的报错:我猜测昨天能启动的原因在于关闭之后要重启电脑,并且在重启之后我第一时间打开 lumerical 测试因此端口没有被占用,今天是在电脑启动之后一段时间才打开所以又遇到了端口占用的问题。

qq_51404184的博客 9549

Android数据库建库建表的几种方法

方法一:SQLite数据库的建立 SQLiteDatabase database; public UserDao(Context context){ //1.1建库 database=context.openOrCreateDatabase("user.db",Context.MODE_PRIVATE,null); //1.2建表 String sql="create table if not exists usertb(_id i

m0_64114170的博客 2589

SAP 行业扫盲系列之一:SAP 从业者的分类

本文简单介绍了 SAP 从业者的分类,限于笔者狭隘的视角,可能存在遗漏或者不恰当的地方,希望大家在评论区指出。 那些在知乎咨询上向我提问关于进入 SAP 行业建议的朋友们,也请大家提问时注明自己想具体从事 SAP 行业哪一类的工作,这样才能得到更让你们满意的回复。感谢阅读。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1589

Android应用开发使用数据库的数据模型示例

背景   几乎所有应用都有持久化保存数据的需要。临时性存储savedInstanceState显然无法胜任。为此,Android提供了长期存储地:手机或平板设备闪存上的本地文件系统。   Android设备上的应用都有一个沙盒目录。将文件保存在沙盒中,可阻止其他应用甚至是设备用户的访问和窥探。(当然,如果设备被root了的话,用户就可以为所欲为。)应用的沙盒目录是/data/data/[应用的包名...

千人斩的博客 1435

SAP_ABAP_MM_BAPI清单案例教程——采购发票校验/预制_BAPI_INCOMINGINVOICE_PARK_MIRO

SAP ABAP BAPI_INCOMINGINVOICE_PARK BAPI 采购发票预制 采购发票校验 代码模版

java_zhong1990的专栏 1962

论文必备 - YOLOv13热力图可视化,支持指定模型,指定显示层,设置置信度,以及10种可视化实现方式

本文带来的是YOLOv13热力图可视化功能,支持,以及。我们经常看到一些论文里绘制了不同的热力图,一方面能够直观的感受其模型的有效性,另一方面也丰富了论文内容。特别是在使用了注意力模块的网络中,热力图就可以验证注意力机制是否真正聚焦到了预期的重要特征上,以便对模型的有效性和合理性进行评估。例如这篇文章中展示的,就很能够表达作者改进后的模型相比之前模型的优越性。

Limiiiing的博客 488

android listview综合使用演示样例_结合数据库操作和listitem单击长按等事件处理

本演示样例说明: 1.自己定义listview条目样式,自己定义listview显示列数的多少,灵活与数据库中字段绑定. 2.实现对DB的增删改查,而且操作后listview自己主动刷新. 3.响应用户操作点击事件,演示样例中展示单击时取出主键Id和其它内容. 4.响应用户操作长按事件,演示样例中展示长按时依据主键Id来编辑和删除数据. 5.表现层与数据处理层分开,不依赖于cur...

weixin_30657541的博客 84

为什么 ChatGPT 生成的下载地址会长成 sky-metal-cards-jerry.quirkypony34.chatgpt.site 这种奇怪的样子

我今天看到的这条地址,确实很容易让人产生一种感觉,ChatGPT 明明只是生成了几张 PNG 图片和一个压缩包,为什么最终拿到的却不是类似这种看起来很正规的下载链接,而是一长串带有、UUID、apidecks的地址。更容易让人疑惑的是,其中还出现了一个平时很少见到的域名。这并不是浏览器随机生成的临时 URL,也不是某个来历不明的第三方文件服务器。根据 OpenAI 在 2026 年公布的 ChatGPT Sites 文档和相关服务条款,

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 61

Android:安卓学习笔记之GreenDao 的简单理解和使用

GreenDao 的简单理解和使用GreenDao1、前言2、greenDAO 概述3、ORM 框架概述4、greenDAO 使用4.1、准备工作4.1.1、引入 greenDAO4.1.2、创建实体类4.1.3、自动生成实体类代码4.1.4、初始化 greenDAO4.2、具体使用(增删改查)4.2.1、新增数据4.2.2、查询数据4.2.3、更新数据4.2.4、删除数据4.2.5、GreenDaoManager 完整代码5、总结2、参考 GreenDao 1、前言 关于 Android 中常用的数据存

JMW1407的博客 1万+

VTK API 详解(134):vtkOBJWriter - 写入 OBJ 模型

是 VTK 中用于将数据写入 Wavefront OBJ 文件格式的类。OBJ 格式是广泛支持的 3D 网格模型格式,支持顶点、面和基本几何信息的保存,便于模型在多种三维软件间交换。

yumeiguo的博客 140

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

《Android开发从零开始》——23.数据存储(2)

本节课的主要内容有:1.讲解SQLiteOpenHelper类2.实例演示如何在Android中进行表的增删改查 课程下载地址:http://u.115.com/file/aq8ff0ae课件及源码下载地址:http://u.115.com/file/aq8ff6ze 转载于:https://www.cnblogs.com/coolszy/archive/2011/05/11/2043066.h...

weixin_30815469的博客 62

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Android 使用数据库操作应用加锁、未加锁,列表展示效果

效果图: 要求:1.

豆子的博客 2127

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

[Android Pro] 完美Android Cursor使用例子(Android数据库操作)

reference to : http://www.ablanxue.com/prone_10575_1.html 完美 Android Cursor使用例子(Android数据库操作),Android 使用的数据库是SQLite数据库,对于数据库记录的操作,可以使用Cursor(游标)来进行。 1. 关于 Cursor 在你理解和使用 Androi...

weixin_33725515的博客 132

【Android】短信管理代码

先贴出相关的协议: content://sms/inbox        收件箱 content://sms/sent        已发送 content://sms/draft        草稿 content://sms/outbox        发件箱 content://sms/failed        发送失败 content://sms/queued

好想睡觉…… 6543

android新手学习:SQLite数据库

sqlite数据库,增删改查

CXY8CXY的专栏 332

xamarin和mysql_Xamarin.Android 使用 SQLiteOpenHelper 进行数据库操作

一、前言在手机中进行网络连接不仅是耗时也是耗电的,而耗电却是致命的。所以我们就需要数据库帮助我们存储离线数据,以便在用户未使用网络的情况下也可以能够使用应用的部分功能,而在需要网络连接的功能上采用提示方式,让用户决定是否打开网络。而本节我们将会学习如何访问数据库以及提供基本的增删改查功能,并且使他们尽量的解耦。二、数据库Xamarin.Android下创建本地数据库与在Java下的方式相同,而我们...

weixin_42193786的博客 441

Android中SQLite数据库操作(2)——使用SQLiteDatabase提供的方法操作数据库

如果开发者对SQL语法不熟,甚至以前从未使用过任何数据库,Android的SQLiteDatabase提供了insert、update、delete或query语句来操作数据库。 一、insert方法 long insert(String table, String nullColumnHack, ContentValues values) table: 代表要插入到的数据表 nu

水寒 3190

转载的安卓框架设计

Android当下最流行的开源框架总结 Android中能够简化开发流程的一些框架 本文介绍的是一些博主在开发过程中经常用到的Android开源框架,所谓开源框架我的理解就是别人封装好的代码,可以直接拿过来使用,并且源码也全部公开的代码库。 我对于开源框架的使用的态度是,如果完全符合我们项目的需求,或者可定制化的程度非常高的话,那么便可以拿过来直接用,因为开源框架的源码都在那里,如果遇到和项目预期...

ricecongcongcong的博客 310
上一篇: Android学习之Build.xml文件
下一篇: Android演示操作数据库之二
Soloman
博客等级 码龄25年 171粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值