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 類裡面的內容發生了編號如下:
GreenDao幫助我們自動生成了一些get和set方法,以及構造方法/** * 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; }
第三步:為了方便使用我們添加了一個 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;