android和ios的数据库都是用SQLite来实现。
在安卓里面数据库怎么用呢,简单来说可用分为以下三步:
1、新建一个数据库帮助类,继承自SQLiteOpenHelper,复写onCreate() 和 onUpgrade()
2、新建一个数据里操作类(dao类),利用 数据库帮助类 得到数据库的实例,然后在dao类里面编写 增删改查 的方法
3、在Activity里面实例化数据库操作类(dao类),调用对应的 增删查改方法。
Android数据的具体使用(原生数据库操作类)
· 新建一个数据库帮助类,继承自SQLiteOpenHelper
· 编写构造函数
· 复写onCreate() 和 onUpgrade()
代码如下:
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class MyDBHelper extends SQLiteOpenHelper{
public MyDBHelper(Context context) {
/**
* 参数说明:
*
* 第一个参数: 上下文
* 第二个参数:数据库的名称
* 第三个参数:null代表的是默认的游标工厂
* 第四个参数:是数据库的版本号 数据库只能升级,不能降级,版本号只能变大不能变小
*/
super(context, "mintest.db", null, 2);
}
/**
* onCreate是在数据库创建的时候调用的,主要用来初始化数据表结构和插入数据初始化的记录
*
* 当数据库第一次被创建的时候调用的方法,适合在这个方法里面把数据库的表结构定义出来.
* 所以只有程序第一次运行的时候才会执行
* 如果想再看到这个函数执行,必须写在程序然后重新安装这个app
*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table contactinfo (id integer primary key autoincrement, name varchar(20), phone varchar(20))");
}
/**
* 当数据库更新的时候调用的方法
* 这个要显示出来得在上面的super语句里面版本号发生改变时才会 打印 (super(context, "itheima.db", null, 2); )
* 注意,数据库的版本号只可以变大,不能变小,假设我们当前写的版本号是3,运行,然后又改成1,运行则报错。不能变小
* @param db
* @param oldVersion
* @param newVersion
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("alter table contactinfo add account varchar(20)");
}
}
dao类在这里做得事情特别简单:
· 1、定义一个构造方法,利用这个方法去实例化一个 数据库帮助类
· 2、编写dao类的对应的 增删改查 方法。
代码如下:
package amqr.com.dbanddao.dao;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import amqr.com.dbanddao.db.MyDBHelper;
/**
* ContactInjfoDao 数据库操作类 dao后缀的都是数据库操作类
*
* 我们这里的每一个 增删改查 的方法都通过getWritableDatabase()去实例化了一个数据库,这里必须这么做
* 不客气抽取 成为一个成员变量, 否则报错,若是觉得麻烦可以通过定义方法来置为null和重新赋值
*
* —— 其实dao类在这里做得事情特别简单:
* 1、定义一个构造方法,利用这个方法去实例化一个 数据库帮助类
* 2、编写dao类的对应的 增删改查 方法。
*
*/
public class ContactInjfoDao {
private MyDBHelper mMyDBHelper;
/**
* dao类需要实例化数据库Help类,只有得到帮助类的对象我们才可以实例化 SQLiteDatabase
* @param context
*/
public ContactInjfoDao(Context context) {
mMyDBHelper=new MyDBHelper(context);
}
// 将数据库打开帮帮助类实例化,然后利用这个对象
// 调用谷歌的api去进行增删改查
// 增加的方法吗,返回的的是一个long值
public long addDate(String name,String phone){
// 增删改查每一个方法都要得到数据库,然后操作完成后一定要关闭
// getWritableDatabase(); 执行后数据库文件才会生成
// 数据库文件利用DDMS可以查看,在 data/data/包名/databases 目录下即可查看
SQLiteDatabase sqLiteDatabase = mMyDBHelper.getWritableDatabase();
ContentValues contentValues=new ContentValues();
contentValues.put("name",name);
contentValues.put("phone", phone);
// 返回,显示数据添加在第几行
// 加了现在连续添加了3行数据,突然删掉第三行,然后再添加一条数据返回的是4不是3
// 因为自增长
long rowid=sqLiteDatabase.insert("contactinfo",null,contentValues);
sqLiteDatabase.close();
return rowid;
}
// 删除的方法,返回值是int
public int deleteDate(String name){
SQLiteDatabase sqLiteDatabase = mMyDBHelper.getWritableDatabase();
int deleteResult = sqLiteDatabase.delete("contactinfo", "name=?", new String[]{name});
sqLiteDatabase.close();
return deleteResult;
}
/**
* 修改的方法
* @param name
* @param newPhone
* @return
*/
public int updateData(String name,String newPhone){
SQLiteDatabase sqLiteDatabase = mMyDBHelper.getWritableDatabase();
ContentValues contentValues =new ContentValues();
contentValues.put("phone", newPhone);
int updateResult = sqLiteDatabase.update("contactinfo", contentValues, "name=?", new String[]{name});
sqLiteDatabase.close();
return updateResult;
}
/**
* 查询的方法(查找电话)
* @param name
* @return
*/
public String alterDate(String name){
String phone = null;
SQLiteDatabase readableDatabase = mMyDBHelper.getReadableDatabase();
// 查询比较特别,涉及到 cursor
Cursor cursor = readableDatabase.query("contactinfo", new String[]{"phone"}, "name=?", new String[]{name}, null, null, null);
if(cursor.moveToNext()){
phone=cursor.getString(0);
}
cursor.close(); // 记得关闭 corsor
readableDatabase.close(); // 关闭数据库
return phone;
}
}
package amqr.com.dbanddao; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.EditText; import android.widget.Toast; import amqr.com.dbanddao.dao.ContactInjfoDao; public class MainActivity extends AppCompatActivity { private EditText mEtName; private EditText mEtPhone; private ContactInjfoDao mDao; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDao=new ContactInjfoDao(MainActivity.this); mEtName= (EditText) findViewById(R.id.mEtName); mEtPhone= (EditText) findViewById(R.id.mEtPhone); } public void add(View view){ String name=mEtName.getText().toString().trim(); String phone=mEtPhone.getText().toString().trim(); if(TextUtils.isEmpty(name)||TextUtils.isEmpty(phone)){ Toast.makeText(this,"填写不完整",Toast.LENGTH_SHORT).show(); return; }else{ long addLong = mDao.addDate(name, phone); if(addLong==-1){ Toast.makeText(this,"添加失败",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(this,"数据添加在第 "+addLong+" 行",Toast.LENGTH_SHORT).show(); } } } public void delete(View view){ String name=mEtName.getText().toString().trim(); if(TextUtils.isEmpty(name)){ Toast.makeText(this,"填写不完整",Toast.LENGTH_SHORT).show(); return; }else{ int deleteDate = mDao.deleteDate(name); if(deleteDate==-1){ Toast.makeText(this,"删除失败",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(this,"成功删除 "+deleteDate+" 条数据",Toast.LENGTH_SHORT).show(); } } } public void update(View view){ String name=mEtName.getText().toString().trim(); String phone=mEtPhone.getText().toString().trim(); if(TextUtils.isEmpty(name)||TextUtils.isEmpty(phone)){ Toast.makeText(this,"填写不完整",Toast.LENGTH_SHORT).show(); return; }else{ int count=mDao.updateData(name, phone); if(count==-1){ Toast.makeText(this,"更新失败",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(this,"数据更新了 "+count+" 行",Toast.LENGTH_SHORT).show(); } } } public void query(View view){ String name=mEtName.getText().toString().trim(); if(TextUtils.isEmpty(name)){ Toast.makeText(this,"填写不完整",Toast.LENGTH_SHORT).show(); return; }else{ String phoneResult = mDao.alterDate(name); Toast.makeText(this,"手机号码为: "+phoneResult,Toast.LENGTH_SHORT).show(); } } }作者:阿敏其人 链接:https://www.jianshu.com/p/b5ff80941fab 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
3.Activity中
package amqr.com.dbanddao; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.EditText; import android.widget.Toast; import amqr.com.dbanddao.dao.ContactInjfoDao; public class MainActivity extends AppCompatActivity { private EditText mEtName; private EditText mEtPhone; private ContactInjfoDao mDao; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDao=new ContactInjfoDao(MainActivity.this); mEtName= (EditText) findViewById(R.id.mEtName); mEtPhone= (EditText) findViewById(R.id.mEtPhone); } public void add(View view){ String name=mEtName.getText().toString().trim(); String phone=mEtPhone.getText().toString().trim(); if(TextUtils.isEmpty(name)||TextUtils.isEmpty(phone)){ Toast.makeText(this,"填写不完整",Toast.LENGTH_SHORT).show(); return; }else{ long addLong = mDao.addDate(name, phone); if(addLong==-1){ Toast.makeText(this,"添加失败",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(this,"数据添加在第 "+addLong+" 行",Toast.LENGTH_SHORT).show(); } } } public void delete(View view){ String name=mEtName.getText().toString().trim(); if(TextUtils.isEmpty(name)){ Toast.makeText(this,"填写不完整",Toast.LENGTH_SHORT).show(); return; }else{ int deleteDate = mDao.deleteDate(name); if(deleteDate==-1){ Toast.makeText(this,"删除失败",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(this,"成功删除 "+deleteDate+" 条数据",Toast.LENGTH_SHORT).show(); } } } public void update(View view){ String name=mEtName.getText().toString().trim(); String phone=mEtPhone.getText().toString().trim(); if(TextUtils.isEmpty(name)||TextUtils.isEmpty(phone)){ Toast.makeText(this,"填写不完整",Toast.LENGTH_SHORT).show(); return; }else{ int count=mDao.updateData(name, phone); if(count==-1){ Toast.makeText(this,"更新失败",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(this,"数据更新了 "+count+" 行",Toast.LENGTH_SHORT).show(); } } } public void query(View view){ String name=mEtName.getText().toString().trim(); if(TextUtils.isEmpty(name)){ Toast.makeText(this,"填写不完整",Toast.LENGTH_SHORT).show(); return; }else{ String phoneResult = mDao.alterDate(name); Toast.makeText(this,"手机号码为: "+phoneResult,Toast.LENGTH_SHORT).show(); } } }作者:阿敏其人 链接:https://www.jianshu.com/p/b5ff80941fab 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
package amqr.com.dbanddao; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.EditText; import android.widget.Toast; import amqr.com.dbanddao.dao.ContactInjfoDao; public class MainActivity extends AppCompatActivity { private EditText mEtName; private EditText mEtPhone; private ContactInjfoDao mDao; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDao=new ContactInjfoDao(MainActivity.this); mEtName= (EditText) findViewById(R.id.mEtName); mEtPhone= (EditText) findViewById(R.id.mEtPhone); } public void add(View view){ String name=mEtName.getText().toString().trim(); String phone=mEtPhone.getText().toString().trim(); if(TextUtils.isEmpty(name)||TextUtils.isEmpty(phone)){ Toast.makeText(this,"填写不完整",Toast.LENGTH_SHORT).show(); return; }else{ long addLong = mDao.addDate(name, phone); if(addLong==-1){ Toast.makeText(this,"添加失败",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(this,"数据添加在第 "+addLong+" 行",Toast.LENGTH_SHORT).show(); } } } public void delete(View view){ String name=mEtName.getText().toString().trim(); if(TextUtils.isEmpty(name)){ Toast.makeText(this,"填写不完整",Toast.LENGTH_SHORT).show(); return; }else{ int deleteDate = mDao.deleteDate(name); if(deleteDate==-1){ Toast.makeText(this,"删除失败",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(this,"成功删除 "+deleteDate+" 条数据",Toast.LENGTH_SHORT).show(); } } } public void update(View view){ String name=mEtName.getText().toString().trim(); String phone=mEtPhone.getText().toString().trim(); if(TextUtils.isEmpty(name)||TextUtils.isEmpty(phone)){ Toast.makeText(this,"填写不完整",Toast.LENGTH_SHORT).show(); return; }else{ int count=mDao.updateData(name, phone); if(count==-1){ Toast.makeText(this,"更新失败",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(this,"数据更新了 "+count+" 行",Toast.LENGTH_SHORT).show(); } } } public void query(View view){ String name=mEtName.getText().toString().trim(); if(TextUtils.isEmpty(name)){ Toast.makeText(this,"填写不完整",Toast.LENGTH_SHORT).show(); return; }else{ String phoneResult = mDao.alterDate(name); Toast.makeText(this,"手机号码为: "+phoneResult,Toast.LENGTH_SHORT).show(); } } }作者:阿敏其人 链接:https://www.jianshu.com/p/b5ff80941fab 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
package amqr.com.dbanddao;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import amqr.com.dbanddao.dao.ContactInjfoDao;
public class MainActivity extends AppCompatActivity {
private EditText mEtName;
private EditText mEtPhone;
private ContactInjfoDao mDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDao=new ContactInjfoDao(MainActivity.this);
mEtName= (EditText) findViewById(R.id.mEtName);
mEtPhone= (EditText) findViewById(R.id.mEtPhone);
}
public void add(View view){
String name=mEtName.getText().toString().trim();
String phone=mEtPhone.getText().toString().trim();
if(TextUtils.isEmpty(name)||TextUtils.isEmpty(phone)){
Toast.makeText(this,"填写不完整",Toast.LENGTH_SHORT).show();
return;
}else{
long addLong = mDao.addDate(name, phone);
if(addLong==-1){
Toast.makeText(this,"添加失败",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this,"数据添加在第 "+addLong+" 行",Toast.LENGTH_SHORT).show();
}
}
}
public void delete(View view){
String name=mEtName.getText().toString().trim();
if(TextUtils.isEmpty(name)){
Toast.makeText(this,"填写不完整",Toast.LENGTH_SHORT).show();
return;
}else{
int deleteDate = mDao.deleteDate(name);
if(deleteDate==-1){
Toast.makeText(this,"删除失败",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this,"成功删除 "+deleteDate+" 条数据",Toast.LENGTH_SHORT).show();
}
}
}
public void update(View view){
String name=mEtName.getText().toString().trim();
String phone=mEtPhone.getText().toString().trim();
if(TextUtils.isEmpty(name)||TextUtils.isEmpty(phone)){
Toast.makeText(this,"填写不完整",Toast.LENGTH_SHORT).show();
return;
}else{
int count=mDao.updateData(name, phone);
if(count==-1){
Toast.makeText(this,"更新失败",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this,"数据更新了 "+count+" 行",Toast.LENGTH_SHORT).show();
}
}
}
public void query(View view){
String name=mEtName.getText().toString().trim();
if(TextUtils.isEmpty(name)){
Toast.makeText(this,"填写不完整",Toast.LENGTH_SHORT).show();
return;
}else{
String phoneResult = mDao.alterDate(name);
Toast.makeText(this,"手机号码为: "+phoneResult,Toast.LENGTH_SHORT).show();
}
}
}
/**
* 添加一条记录
* @param name 联系人姓名
* @param phone 联系人电话
* @return 返回的是添加后在数据库的行号 -1代表添加失败
*/
public long add(String name, String phone){
SQLiteDatabase db = helper.getWritableDatabase();
//db.execSQL("insert into contactinfo (name,phone) values (?,?)", new Object[]{name,phone});
ContentValues values = new ContentValues();
values.put("name", name);
values.put("phone", phone);
//内部是组拼sql语句实现的.
long rowid = db.insert("contactinfo", null, values);
//记得释放数据库资源
db.close();
return rowid;
}
/**
* 根据姓名删除一条记录
* @param name 要删除的联系人的姓名
* @return 返回0代表的是没有删除任何的记录 返回整数int值代表删除了几条数据
*/
public int delete(String name){
//判断这个数据是否存在.
SQLiteDatabase db = helper.getWritableDatabase();
//db.execSQL("delete from contactinfo where name=?", new Object[]{name});
int rowcount = db.delete("contactinfo", "name=?", new String[]{name});
db.close();
//再从数据库里面查询一遍,看name是否还在
return rowcount;
}
/**
* 修改联系人电话号码
* @param newphone 新的电话号码
* @param name 要修改的联系人姓名
* @return 0代表一行也没有更新成功, >0 整数代表的是更新了多少行记录
*/
public int update(String newphone , String name){
SQLiteDatabase db = helper.getWritableDatabase();
//db.execSQL("update contactinfo set phone =? where name=?", new Object[]{newphone,name});
ContentValues values = new ContentValues();
values.put("phone", newphone);
int rowcount = db.update("contactinfo", values, "name=?", new String[]{name});
db.close();
return rowcount;
}
/**
* 查询联系人的电话号码
* @param name 要查询的联系人
* @return 电话号码
*/
public String getPhoneNumber(String name){
String phone = null;
SQLiteDatabase db = helper.getReadableDatabase();
//Cursor cursor = db.rawQuery("select phone from contactinfo where name=?", new String[]{name});
Cursor cursor = db.query("contactinfo", new String[]{"phone"}, "name=?", new String[]{name}, null, null, null);
if(cursor.moveToNext()){//如果光标可以移动到下一位,代表就是查询到了数据
phone = cursor.getString(0);
}
cursor.close();//关闭掉游标,释放资源
db.close();//关闭数据库,释放资源
return phone;
}
Android 数据库框架
ORMLit的使用
2、配置bean类
通过注解的方式把bean类和数据库联系在一起
@DatabaseTable(tableName = "person")
public class Person {
@DatabaseField(generatedId=true)
private int id;
@DatabaseField(columnName="name")
private String name;
@DatabaseField(columnName="age")
private int age;
@DatabaseField(columnName="address")
private String address;
/**
* @return the id
*/
public int getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the age
*/
public int getAge() {
return age;
}
/**
* @param age the age to set
*/
public void setAge(int age) {
this.age = age;
}
/**
* @return the address
*/
public String getAddress() {
return address;
}
/**
* @param address the address to set
*/
public void setAddress(String address) {
this.address = address;
}
}
在这里我们创建了Bean类,并与数据库建立了联系,有两件事是我们需要做的与Android中的数据库创建相似,使用OrmLite创建数据库需要我们创建一个SqlOpenHelper继承OrmLiteSqliteOpenHelper,在OrmLiteSqliteOpenHelper也有两个重要方法,分别是onCreate和onUpgrade,负责数据库创建以及升级时的操作
public class MySqlOpenHelper extends OrmLiteSqliteOpenHelper {
private Dao<Person, Integer> mPersonDao;
public MySqlOpenHelper(Context context) {
super(context, "test", null, 1);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) {
// TODO Auto-generated method stub
try {
//创建数据表
TableUtils.createTableIfNotExists(arg1, Person.class);
} catch (java.sql.SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase arg0, ConnectionSource arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
public Dao<Person, Integer> getPersonDao() throws java.sql.SQLException {
if (mPersonDao == null) {
mPersonDao = getDao(Person.class);
}
return mPersonDao;
}
}
这些方法使用起来都比较简单,我们只需将自己的Bean传入到下列方法中即可
OrmLite为我提供了一系列的查询操作,方法很多,而且很多都是只看方法名就可以知道的,这里就不逐一介绍了,在这里介绍一下如何使用QueryBuilder进行复杂查找。
QueryBuilder builder = dao.queryBuilder();
builder.where().eq("字段名1","条件1").and.eq(""字段名2","条件2");
builder.query();
2.查询并按顺序输出
QueryBuilder<Person, Integer> builder = dao.queryBuilder();
builder.orderBy("字段名", true);
builder.query();
orderBy的方法第一参数表示按那个字段进行排序,第二个参数表示是否为升序。
3.分页查询
QueryBuilder<Person, Integer> builder = dao.queryBuilder();
builder.offset(10);//表示查询的起始位置
builder.limit(10);//表示总共获取的对象数量
builder.query();
与查询操作类似,ORMLite同样为我们提供了一系列的方法,同时也提供了复杂删除,复杂更改的DeleteBuilder和UpdateBuilder,其用法与QueryBuilder相似,就不详细介绍了。
文章浏览阅读95次。Dhcp就是动态主机配置协议,采用UDP协议,客户端用68号端口,服务器端用67号端口。Dhcp原理:Dhcp中继的原理:把广播转换成单播案例:拓扑图:目标:在不同网段获得ip地址。实验步骤:1、搭建dhcp服务器[root@zlj~]#mkdir/mnt/cdrom[root@zlj~]#..._linux debian dchp中继
文章浏览阅读1.6w次,点赞16次,收藏71次。题目:输入三个正整数x,y,z,请把这三个数由小到大输出。【方法一】这是C语言教程里常出现的一道题。处理方法是:假设最小的数为x上,先将x与y进行比较,如果x>y则将x与y的值进行..._三个整数排序c语言
文章浏览阅读6.9k次。1、第一层对象定义package com.ybw.validation.demo.vo;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import javax.validation.Valid;import java.io.Serializable;/** * 请求参数 * * @author geoffrey * @version V1.0 * @cl_spring validation 多层
文章浏览阅读916次。题目背景大家都知道,基因可以看作一个碱基对序列。它包含了4种核苷酸,简记作A,C,G,T。生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物。在一个人类基因工作组的任务中,生物学家研究的是:两个基因的相似程度。因为这个研究对疾病的治疗有着非同寻常的作用。题目描述两个基因的相似度的计算方法如下:对于两个已知基因,例如AGTGATG和GTTAG,将它们的碱基互相对应。当然,中间可以加入一些空_家都知道,基因可以看作一个碱基对序列。它包含了 444 种核苷酸,简记作 a,c,g,ta,c
文章浏览阅读2.5w次,点赞21次,收藏232次。在日常编程的过程中,我们经常会遇到需要读写文件的操作,当然,最好的选择是数据库来进行读写,但是由于数据库使用环境的要求(比如某些数据库要求必须安装数据库软件后才能使用),同时,要进行数据库操作需要对SQL语句有一定的了解,门槛相对较高,所以我们有时需要用EXCEL来代替简单的数据库操作,对于MFC连接数据库并进行对应操作,可以参考之前的博客:MFC以ADO方式连接ACCESS数据库今天主要介绍..._export2excel.h
文章浏览阅读341次。南方CASS软件VB二次开发之一安装软件_cass加载vba
文章浏览阅读235次。参考资料累了就听会歌吧!Elasticsearch中文参考文档Elasticsearch官方文档Elasticsearch其他——那些年遇到的坑Elasticsearch 管理文档Elasticsearch集群配置以及REST API使用Elasticsearch集群管理Elasticsearch 数据搜索篇·【入门级干货】Elasticsea..._kibana 动态地图
文章浏览阅读1k次。复合材料是一种具有优异性能的材料,广泛应用于航空、汽车、建筑、船舶、体育器材等领域。ABAQUS 作为现阶段应用最广泛的有限元仿真模拟软件,优秀的分析能力和模拟复杂系统的可靠性使得 ABAQUS 被各国的工业和科学研究中广泛采用。通过合理的建模和分析,可以更好地理解复合材料的力学行为,为复合材料的设计和应用提供参考。(2D 网格划分、3D 网格划分、过渡网格划分、网格质量检查)四、钢筋混凝土结构静力与动力分析模拟实例(一)10、钢筋混凝土柱的轴压与偏压模拟(实例)4、 ABAQUS 中的混凝土材料模型。_abaqus中混凝土本构模型
文章浏览阅读748次,点赞37次,收藏14次。音乐制作人:无论是专业的音乐制作人还是初学者,FL Studio 2024都为他们提供了一个完整的音乐制作环境。音乐爱好者和独立音乐人:即使是没有专业音乐背景的音乐爱好者和独立音乐人,也可以通过FL Studio 21.2.3.4004轻松入门音乐制作。声音设计师和音效师:对于需要创作和处理各种声音效果的声音设计师和音效师来说,FL Studio 21.2.3.4004提供了强大的音频编辑和处理工具,可以帮助他们创作出独特而富有创意的声音效果。_fl studio21.2.3.4004
文章浏览阅读529次。一. 介绍 HBase是一个分布式的、面向列的开源数据库,源于google的一篇论文《bigtable:一个结构化数据的分布式存储系统》。HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服务。 HBase以表_hbase shell下载表
文章浏览阅读7.5k次,点赞2次,收藏10次。本文素材来自于华为工业云平台组织的工业数字化大讲堂,本期主题为:制造业企业数据平台建设最佳实践分享。我们将从制造业的发展趋势出发,分享华为云在制造领域里建设数据平台的最佳实践,帮助企业解决在数字化转型中面临的挑战,并结合华为云数据平台架构设计和数据应用等方面的丰富经验,助力企业挖掘数据价值、驱动数字化转型、创造发展新机会。_华为云数字工厂企业平台
文章浏览阅读3.9k次,点赞3次,收藏4次。一、格式化符号含义格式符号 转换 %s 字符串 %d 有符号的十进制数 %f 浮点数 %c 字符 %u 无符号的十进制数 %o 八进制整数 %x 十六进制整数(小写ox) %X 十六进制整数(大写OX) %e 科学计数法(小写‘e’) %E 科学计数法(大写‘E’) %g %f和%e的简写 %G %f和%E的简写 ..._python格式符号什么意思