1. 程式人生 > >GreenDao3.2使用詳解(增,刪,改,查,升級)

GreenDao3.2使用詳解(增,刪,改,查,升級)

首先看一下效果圖:


專案結構如下圖所示:

第一步:在build中新增配置如下:

projet 目錄下的build.gradle

 dependencies {
     
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
    }

moudle 下的build.gradle新增如下內容:
apply plugin: 'org.greenrobot.greendao'

 dependencies {
    .....................
	
    compile 'org.greenrobot:greendao:3.2.0'
}


新增完成之後點選sync一下工程

第二步:

首先在moudle下  build.gradle的根目錄下新增如下配置

greendao {
    //資料庫的schema版本,也可以理解為資料庫版本號
    schemaVersion 1
    //設定DaoMaster、DaoSession、Dao包名,也就是要放置這些類的包的全路徑。
    daoPackage 'com.koimy.greedaotest.dao'
    //設定DaoMaster、DaoSession、Dao目錄
    targetGenDir 'src/main/java'
}
在專案裡面新增實體類Student如下所示:
@Entity
public class Student {
    @Id
    private Long id;
    private String name;
    private int age;
    private String num;
}
此時專案目錄如下所示:

然後點選 android studio 的 build-->make project

此時專案結構如下:


其中dao目錄下的檔案是由greendao自動生成的,Student 類裡面的內容發生了編號如下:

/**
 * Created by hp on 2018/1/23.
 */
@Entity
public class Student {
    @Id
    private Long id;
    private String name;
    private int age;
    private String num;
    @Generated(hash = 1538557423)
    public Student(Long id, String name, int age, String num) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.num = num;
    }
    @Generated(hash = 1556870573)
    public Student() {
    }
    public Long getId() {
        return this.id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return this.age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getNum() {
        return this.num;
    }
    public void setNum(String num) {
        this.num = num;
    }
GreenDao幫助我們自動生成了一些get和set方法,以及構造方法

第三步:為了方便使用我們添加了一個 db包


DbManager類如下:

package com.koimy.greedaotest.db;

/**
 * Created by hp on 2018/1/23.
 */

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;

import com.koimy.greedaotest.dao.DaoMaster;
import com.koimy.greedaotest.dao.DaoSession;


public class DbManager {

    // 是否加密
    public static final boolean ENCRYPTED = true;

    private static final String DB_NAME = "test.db";
    private static DbManager mDbManager;
    private static DaoMaster.DevOpenHelper mDevOpenHelper;
    private static DaoMaster mDaoMaster;
    private static DaoSession mDaoSession;

    private Context mContext;

    private DbManager(Context context) {
        this.mContext = context;
        // 初始化資料庫資訊
        mDevOpenHelper = new DaoMaster.DevOpenHelper(context, DB_NAME);
        getDaoMaster(context);
        getDaoSession(context);
    }

    public static DbManager getInstance(Context context) {
        if (null == mDbManager) {
            synchronized (DbManager.class) {
                if (null == mDbManager) {
                    mDbManager = new DbManager(context);
                }
            }
        }
        return mDbManager;
    }

    /**
     * 獲取可讀資料庫
     *
     * @param context
     * @return
     */
    public static SQLiteDatabase getReadableDatabase(Context context) {
        if (null == mDevOpenHelper) {
            getInstance(context);
        }
        return mDevOpenHelper.getReadableDatabase();
    }

    /**
     * 獲取可寫資料庫
     *
     * @param context
     * @return
     */
    public static SQLiteDatabase getWritableDatabase(Context context) {
        if (null == mDevOpenHelper) {
            getInstance(context);
        }

        return mDevOpenHelper.getWritableDatabase();
    }

    /**
     * 獲取DaoMaster
     *
     * @param context
     * @return
     */
    public static DaoMaster getDaoMaster(Context context) {
        if (null == mDaoMaster) {
            synchronized (DbManager.class) {
                if (null == mDaoMaster) {
                    mDaoMaster = new DaoMaster(getWritableDatabase(context));
                }
            }
        }
        return mDaoMaster;
    }

//    /**
//     * 獲取DaoMaster
//     *
//     * 判斷是否存在資料庫,如果沒有則建立資料庫
//     * @param context
//     * @return
//     */
//    public static DaoMaster getDaoMaster(Context context) {
//        if (null == mDaoMaster) {
//            synchronized (DbManager.class) {
//                if (null == mDaoMaster) {
//                    MyOpenHelper helper = new MyOpenHelper(context,DB_NAME,null);
//                    mDaoMaster = new DaoMaster(helper.getWritableDatabase());
//                }
//            }
//        }
//        return mDaoMaster;
//    }

    /**
     * 獲取DaoSession
     *
     * @param context
     * @return
     */
    public static DaoSession getDaoSession(Context context) {
        if (null == mDaoSession) {
            synchronized (DbManager.class) {
                mDaoSession = getDaoMaster(context).newSession();
            }
        }
        return mDaoSession;
    }
}
SutdentDaoOpe類如下:
package com.koimy.greedaotest.db;

/**
 * Created by hp on 2018/1/23.
 */

import android.content.Context;


import com.koimy.greedaotest.dao.StudentDao;
import com.koimy.greedaotest.entity.Student;

import org.greenrobot.greendao.query.QueryBuilder;

import java.util.List;


public class StudentDaoOpe {

    /**
     * 新增資料至資料庫
     *
     * @param context
     * @param stu
     */
    public static void insertData(Context context, Student stu) {
        DbManager.getDaoSession(context).getStudentDao().insert(stu);
    }


    /**
     * 將資料實體通過事務新增至資料庫
     *
     * @param context
     * @param list
     */
    public static void insertData(Context context, List<Student> list) {
        if (null == list || list.size() <= 0) {
            return;
        }
        DbManager.getDaoSession(context).getStudentDao().insertInTx(list);
    }

    /**
     * 新增資料至資料庫,如果存在,將原來的資料覆蓋
     * 內部程式碼判斷了如果存在就update(entity);不存在就insert(entity);
     *
     * @param context
     * @param student
     */
    public static void saveData(Context context, Student student) {
        DbManager.getDaoSession(context).getStudentDao().save(student);
    }

    /**
     * 刪除資料至資料庫
     *
     * @param context
     * @param student 刪除具體內容
     */
    public static void deleteData(Context context, Student student) {
        DbManager.getDaoSession(context).getStudentDao().delete(student);
    }

    /**
     * 根據id刪除資料至資料庫
     *
     * @param context
     * @param id      刪除具體內容
     */
    public static void deleteByKeyData(Context context, long id) {
        DbManager.getDaoSession(context).getStudentDao().deleteByKey(id);
    }

    /**
     * 刪除全部資料
     *
     * @param context
     */
    public static void deleteAllData(Context context) {
        DbManager.getDaoSession(context).getStudentDao().deleteAll();
    }

    /**
     * 更新資料庫
     *
     * @param context
     * @param student
     */
    public static void updateData(Context context, Student student) {
        DbManager.getDaoSession(context).getStudentDao().update(student);
    }


    /**
     * 查詢所有資料
     *
     * @param context
     * @return
     */
    public static List<Student> queryAll(Context context) {
        QueryBuilder<Student> builder = DbManager.getDaoSession(context).getStudentDao().queryBuilder();

        return builder.build().list();
    }



    /**
     *  分頁載入
     * @param context
     * @param pageSize 當前第幾頁(程式中動態修改pageSize的值即可)
     * @param pageNum  每頁顯示多少個
     * @return
     */
    public static List<Student> queryPaging( int pageSize, int pageNum,Context context){
         StudentDao studentDao = DbManager.getDaoSession(context).getStudentDao();
        List<Student> listMsg = studentDao.queryBuilder()
                .offset(pageSize * pageNum).limit(pageNum).list();
        return listMsg;
    }
}

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.koimy.demo2.MainActivity">


    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="增" />

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="刪" />

    <Button
        android:id="@+id/button3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="改" />

    <Button
        android:id="@+id/button4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="查" />

    <LinearLayout
        android:layout_marginTop="20dp"
        android:gravity="center"
        android:layout_gravity="center_vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/btn_query_all"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="根據ID查詢(分頁查詢)" />

        <Button
            android:id="@+id/button5"
            android:layout_width="107dp"
            android:layout_height="wrap_content"
            android:text="刪除全部" />
    </LinearLayout>

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/tv_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </ScrollView>

</LinearLayout>

MainActivithy.java
package com.koimy.greedaotest;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.koimy.greedaotest.db.StudentDaoOpe;
import com.koimy.greedaotest.entity.Student;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.button)
    Button button;
    @BindView(R.id.button2)
    Button button2;
    @BindView(R.id.button3)
    Button button3;
    @BindView(R.id.button4)
    Button button4;
    @BindView(R.id.btn_query_all)
    Button btnQueryAll;
    @BindView(R.id.button5)
    Button button5;
    @BindView(R.id.tv_content)
    TextView tvContent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        initData();
    }

    private List<Student> studentList = new ArrayList<>();

    /**
     * 初始化資料
     */
    private void initData() {
        for (int i = 0; i < 100; i++) {
            Student student = new Student((long) i, "huang" + i, 25,"666"+i);
            studentList.add(student);
        }

    }

    int page;

    @OnClick({R.id.button, R.id.button2, R.id.button3, R.id.button4, R.id.button5, R.id.btn_query_all})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.button:
                StudentDaoOpe.insertData(this, studentList);
                break;
            case R.id.button2:
                Student student = new Student((long) 5, "haung" + 5, 25,"123456");
                /**
                 * 根據特定的物件刪除
                 */
                StudentDaoOpe.deleteData(this, student);
                /**
                 * 根據主鍵刪除
                 */
                StudentDaoOpe.deleteByKeyData(this, 7);
                StudentDaoOpe.deleteAllData(this);
                break;
            case R.id.button3:
                student = new Student((long) 2, "caojin", 1314,"888888");
                StudentDaoOpe.updateData(this, student);
                break;
            case R.id.button4:
                List<Student> students = StudentDaoOpe.queryAll(this);
                tvContent.setText(students.toString());
                for (int i = 0; i < students.size(); i++) {
                    Log.i("Log", students.get(i).getName());
                }

                break;
            case R.id.button5:
                StudentDaoOpe.deleteAllData(this);
                break;
            case R.id.btn_query_all:
                List<Student> students2 = StudentDaoOpe.queryPaging(page, 20, this);

                if (students2.size() == 0) {
                    Toast.makeText(this, "沒有更多資料了", Toast.LENGTH_SHORT).show();
                }
                for (Student st : students2) {
                    Log.e("TAG", "onViewClicked: ==" + st);
                    Log.e("TAG", "onViewClicked: == num = " + st.getNum());
                }
                page++;
                tvContent.setText(students2.toString());
                break;
        }
    }


}

最終在/data/data/包名/databases/資料庫名/表名 生成的表結構如下所示:


下面講一下資料庫的升級:

首先新建一個helper包引入兩個類,內容如下:

MigrationHelper類:

package com.koimy.greedaotest.helper;

/**
 * 資料庫更新輔助類
 *
 * 原理:建立臨時表-->刪除原表-->建立新表-->複製臨時表資料到新表並刪除臨時表;這樣資料庫表的更新就完成了
 */

import android.database.Cursor;
import android.text.TextUtils;
import android.util.Log;


import com.koimy.greedaotest.dao.DaoMaster;

import org.greenrobot.greendao.AbstractDao;
import org.greenrobot.greendao.database.Database;
import org.greenrobot.greendao.internal.DaoConfig;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


public class MigrationHelper {

    private static final String CONVERSION_CLASS_NOT_FOUND_EXCEPTION = "MIGRATION HELPER - CLASS DOESN'T MATCH WITH THE CURRENT PARAMETERS";
    private static MigrationHelper instance;

    public static MigrationHelper getInstance() {
        if (instance == null) {
            instance = new MigrationHelper();
        }
        return instance;
    }

    public void migrate(Database db, Class<? extends AbstractDao<?, ?>>... daoClasses) {

        generateTempTables(db, daoClasses);
        DaoMaster.dropAllTables(db, true);
        DaoMaster.createAllTables(db, false);
        restoreData(db, daoClasses);
    }

    /**
     * 生成臨時列表
     *
     * @param db
     * @param daoClasses
     */
    private void generateTempTables(Database db, Class<? extends AbstractDao<?, ?>>... daoClasses) {
        for (int i = 0; i < daoClasses.length; i++) {
            DaoConfig daoConfig = new DaoConfig(db, daoClasses[i]);

            String divider = "";
            String tableName = daoConfig.tablename;
            String tempTableName = daoConfig.tablename.concat("_TEMP");
            ArrayList<String> properties = new ArrayList<>();

            StringBuilder createTableStringBuilder = new StringBuilder();

            createTableStringBuilder.append("CREATE TABLE ").append(tempTableName).append(" (");

            for (int j = 0; j < daoConfig.properties.length; j++) {
                String columnName = daoConfig.properties[j].columnName;

                if (getColumns(db, tableName).contains(columnName)) {
                    properties.add(columnName);

                    String type = null;

                    try {
                        type = getTypeByClass(daoConfig.properties[j].type);
                    } catch (Exception exception) {
                        exception.printStackTrace();
                    }

                    createTableStringBuilder.append(divider).append(columnName).append(" ").append(type);

                    if (daoConfig.properties[j].primaryKey) {
                        createTableStringBuilder.append(" PRIMARY KEY");
                    }

                    divider = ",";
                }
            }
            createTableStringBuilder.append(");");

            db.execSQL(createTableStringBuilder.toString());

            StringBuilder insertTableStringBuilder = new StringBuilder();

            insertTableStringBuilder.append("INSERT INTO ").append(tempTableName).append(" (");
            insertTableStringBuilder.append(TextUtils.join(",", properties));
            insertTableStringBuilder.append(") SELECT ");
            insertTableStringBuilder.append(TextUtils.join(",", properties));
            insertTableStringBuilder.append(" FROM ").append(tableName).append(";");

            db.execSQL(insertTableStringBuilder.toString());

        }
    }

    /**
     * 儲存新的資料庫表 以及資料
     *
     * @param db
     * @param daoClasses
     */
    private void restoreData(Database db, Class<? extends AbstractDao<?, ?>>... daoClasses) {
        for (int i = 0; i < daoClasses.length; i++) {
            DaoConfig daoConfig = new DaoConfig(db, daoClasses[i]);
            String tableName = daoConfig.tablename;
            String tempTableName = daoConfig.tablename.concat("_TEMP");
            ArrayList<String> properties = new ArrayList();

            for (int j = 0; j < daoConfig.properties.length; j++) {
                String columnName = daoConfig.properties[j].columnName;

                if (getColumns(db, tempTableName).contains(columnName)) {
                    properties.add(columnName);
                }
            }

            StringBuilder insertTableStringBuilder = new StringBuilder();

            insertTableStringBuilder.append("INSERT INTO ").append(tableName).append(" (");
            insertTableStringBuilder.append(TextUtils.join(",", properties));
            insertTableStringBuilder.append(") SELECT ");
            insertTableStringBuilder.append(TextUtils.join(",", properties));
            insertTableStringBuilder.append(" FROM ").append(tempTableName).append(";");

            StringBuilder dropTableStringBuilder = new StringBuilder();
            dropTableStringBuilder.append("DROP TABLE ").append(tempTableName);
            db.execSQL(insertTableStringBuilder.toString());
            db.execSQL(dropTableStringBuilder.toString());
        }
    }

    private String getTypeByClass(Class<?> type) throws Exception {
        if (type.equals(String.class)) {
            return "TEXT";
        }
        if (type.equals(Long.class) || type.equals(Integer.class) || type.equals(long.class)) {
            return "INTEGER";
        }
        if (type.equals(Boolean.class)) {
            return "BOOLEAN";
        }

        Exception exception = new Exception(CONVERSION_CLASS_NOT_FOUND_EXCEPTION.concat(" - Class: ").concat(type.toString()));
        exception.printStackTrace();
        throw exception;
    }

    private List<String> getColumns(Database db, String tableName) {
        List<String> columns = new ArrayList<>();
        Cursor cursor = null;
        try {
            cursor = db.rawQuery("SELECT * FROM " + tableName + " limit 1", null);
            if (cursor != null) {
                columns = new ArrayList<>(Arrays.asList(cursor.getColumnNames()));
            }
        } catch (Exception e) {
            Log.v(tableName, e.getMessage(), e);
            e.printStackTrace();
        } finally {
            if (cursor != null)
                cursor.close();
        }
        return columns;
    }
}
MyOpenHelper類:
package com.koimy.greedaotest.helper;

/**
 * Created by hp on 2018/1/23.
 */

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


import com.koimy.greedaotest.dao.DaoMaster;
import com.koimy.greedaotest.dao.StudentDao;

import org.greenrobot.greendao.database.Database;


public class MyOpenHelper extends DaoMaster.OpenHelper {

    public MyOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
        super(context, name, factory);
    }

    /**
     * 資料庫升級
     * @param db
     * @param oldVersion
     * @param newVersion
     */
    @Override
    public void onUpgrade(Database db, int oldVersion, int newVersion) {
        //操作資料庫的更新 有幾個表升級都可以傳入到下面

        Log.i("version", oldVersion + "---先前和更新之後的版本---" + newVersion);
        if (oldVersion < newVersion) {
            Log.i("version", oldVersion + "---先前和更新之後的版本---" + newVersion);
            MigrationHelper.getInstance().migrate(db, StudentDao.class);
            //更改過的實體類(新增的不用加)   更新UserDao檔案 可以新增多個  XXDao.class 檔案
//             MigrationHelper.getInstance().migrate(db, UserDao.class,XXDao.class);
        }



        //MigrationHelper.getInstance().migrate(db,StudentDao.class);
    }

}
然後將
    /**
     * 獲取DaoMaster
     *
     * @param context
     * @return
     */
    public static DaoMaster getDaoMaster(Context context) {
        if (null == mDaoMaster) {
            synchronized (DbManager.class) {
                if (null == mDaoMaster) {
                    mDaoMaster = new DaoMaster(getWritableDatabase(context));
                }
            }
        }
        return mDaoMaster;
    }
換成如下所示:
  /**
     * 獲取DaoMaster
     *
     * 判斷是否存在資料庫,如果沒有則建立資料庫
     * @param context
     * @return
     */
    public static DaoMaster getDaoMaster(Context context) {
        if (null == mDaoMaster) {
            synchronized (DbManager.class) {
                if (null == mDaoMaster) {
                    MyOpenHelper helper = new MyOpenHelper(context,DB_NAME,null);
                    mDaoMaster = new DaoMaster(helper.getWritableDatabase());
                }
            }
        }
        return mDaoMaster;
    }

接下來:我們在Student類裡面新增一個 屬性 grade屬性,然後將build.gradle裡面schemaVersion改為 2


然後編譯,執行一下程式,然後我們再來看升級後的資料庫,如下圖所示成功添加了我麼新增的欄位,還保留了以前的資料




參考連結:http://blog.csdn.net/huangxiaoguo1/article/details/52916189

相關推薦

java中QueryRunner用法

1.匯入相應的JARs MySQL驅動jar包:mysql-connector-Java-5.1.28-bin.jar C3P0需要的jar包:c3p0-0.9.2-pre1.jar和mchange-commons-0.2.jar 2.在src下新增C3P0配置

關於SQL的常用操作

沒有 sql 獲取 臨時表 values 青雲 無需 內存 關於   關於SQL的常見操作主要是增、刪、改、查。   1、增,顧名思義就是新增數據(insert into)。該語句用於向表中插入新紀錄。insert into有兩種用法。     (1)、無需指定要插入數

Android SQLite資料庫:以及資料庫版本管理

建立資料庫版本v.1 /** * 作者:created by meixi * 郵箱:[email protected] * 日期:2018/10/9 11 */ public class DBHelper extends SQLiteOpenHelper

PHP操作MongoDB資料庫詳細例子介紹

PHP操作mongodb:PHP 要操作mongodb需要打模組官網可以下載:http://pecl.php.net/package/mongo 下載mongodb設定成使用者授權的啟動方式php手冊沒有些使用者授權方式登陸的方法:conn.php<?php$conn = new Mongo("mong

php專案核心業務第三篇

對增刪改查資料庫的封裝 //php對資料庫的封裝 //Mysql_fetach($sql)函式查詢所有的 function Mysql_fetach($sql){ $conn=mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD

mysql資料庫中命令列下常用命令的操作和資料型別

identified by "";   第四招: 操作資料庫   登入到mysql中,然後在mysql的提示符下執行下列命令,每個命令以分號結束。   1、 顯示資料庫列表。   show databases;   預設有兩個資料庫:mysql和 test。 mysql庫存放著mysql的系統和使

GreenDao3.2使用升級

首先看一下效果圖: 專案結構如下圖所示: 第一步:在build中新增配置如下: projet 目錄下的build.gradle dependencies { classpath 'org.greenrobot:greendao-gradl

Elasticsearch操作深入Elasticsearch教程02|MVP講堂

作者:阿里雲MVP 銘毅 往期內容:死磕 Elasticsearch 方法論:普通程式設計師高效精進的 10 大狠招!Elasticsearch學習,請先看這一篇!(Elasticsearch教程01) 引言:對於剛接觸ES的童鞋,經常搞不明白ES的各個概念的含義。尤其對“索引”二字更是與關係型資料庫混淆

Qt——資料庫操作資料庫的連線、

一:Oracle資料庫連線操作: 首先要引入標頭檔案:#include <QSqlDatabase> 1. 呼叫addDatabase();函式:確定你要連線的資料庫驅動。我這裡用的是Oracle資料庫所以是“QOCI”,使用mysql資料庫的話自然是"Q

微擎數據庫緩存的函數

一個 value conf 反序列化 詳解 數據操作 保存 name sea 函數所在文件:framework/function/cache.mysql.func.php目前微擎的個人真實調用:$setting = $this->module['config&

Elasticsearch操作深入

理解 依據 host aml pri lin mysql 數據信息 src 引言: 對於剛接觸ES的童鞋,經常搞不明白ES的各個概念的含義。尤其對“索引”二字更是與關系型數據庫混淆的不行。本文通過對比關系型數據庫,將ES中常見的增、刪、改、查操作進行圖文呈現。能加深你對ES

華芸ADM3.2 篇一:華芸NAS——AS6404T開箱ADM3.2簡析

原文網址:https://post.smzdm.com/p/778533/       經常關注我測評的人都知道我是個尤其喜歡玩各種儲存裝置和NAS的人,這次我要分享的是華芸的AS6404T,這是我第一次用華芸的NAS,和以往我分享的NAS不一樣的是640

Elasticsearch操作深入(二)

引言: 對於剛接觸ES的童鞋,經常搞不明白ES的各個概念的含義。尤其對“索引”二字更是與關係型資料庫混淆的不行。本文通過對比關係型資料庫,將ES中常見的增、刪、改、查操作進行圖文呈現。能加深你對ES的理解。同時,也列舉了kibana下的圖形化展示。 ES Restful API GET、PO

Elasticsearch操作深入(一)

1、RESTful介面使用方法 為了方便直觀我們使用Head外掛提供的介面進行演示,實際上內部呼叫的RESTful介面。 RESTful介面URL的格式:http://locahost:9200/...... 其中index、type是必須提供的。 id是可選的,不提供es會自

HibernateDaoSupport刪改時Dao常用

一,Spring為Hibernate的DAO提供工具類:HibernateDaoSupport。該類主要提供了兩個方法: public final HibernateTemplate getHibernateTemplate() ; public final void se

Ajax常見請求方式刪改

1、GET請求(查) 一般應用於從伺服器獲取資料,如果get請求向伺服器傳遞內容,一般使用url問號傳參的方式。 $.ajax({ url: "",

Scheme web頁面判斷是否安裝某app並判斷是否開啟該應用

參照頁面: demo例項:http://blog.csdn.net/qq_30740239/article/details/51969660 Scheme詳解:http://blog.csdn.net/wangkeke1860/article/details/4985

淺談表格jq

false als 刪除 parse ++ script span 原生js true html代碼: <table border="1" cellpadding="20" cellspacing="0"> <thead> <t

數據庫連接Oracle/sqlServer

ros tag .get driver database 字段名 數據類型 build rman 一、把ojdbc6.jar包導入項目中,並且Build path 二、 1.普通連接:    String className="oracle.jdbc.driver.Orac

Java封裝JDBC數據庫操作成JAR文件以供Web工程調用適用於多種數據庫

通過 ive trac end 使用方法 數據 div bstr 工程 廢話不多說,直接上源代碼,最後有使用方法,當然,也可以作為普通公用類使用,只是封裝成JAR更方便使用。 [java] view plain copy package db.util;