1. 程式人生 > >開源庫xUtils3使用詳解

開源庫xUtils3使用詳解

xUtils3是一個很好開發框架,它可以幫助我們在應用開發中簡化很多工作,與老版本xUtils2.x相比API和結構有較大的重構,因此在使用前有必要詳細學習它的使用。關於xUtils3的簡介請看另一篇文章:xUtils3簡介

1 框架結構概覽

在使用之前應該瞭解下它的主要類及介面關係,看下圖:
類圖
下面我直接介紹它的詳細使用吧。

2 在AndroidManifest.xml檔案中配置xUtils3需要的許可權

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

3 xUtils3初始化工作

// 在application的onCreate中初始化
    public class MyApplication extends Application {
     @Override
     public void onCreate() {
    super.onCreate();
    x.Ext.init(this);
    x.Ext.setDebug(true); // 是否輸出debug日誌
    ...
    }

同時要在AndroidManifest.xml的application標籤中新增如下程式碼:

android:name=”MyApplication”

這樣初始化就完成了。

4 使用註解模組

view初始化,view繫結事件監聽器等操作。注意看以下例子中@Event、@ViewInject、@ContentView的使用方法。

/**
     * 1. 方法必須私有限定,
     * 2. 方法引數形式必須和type對應的Listener介面一致.
     * 3. 註解引數value支援陣列: value={id1, id2, id3}
     * 4. 其它引數說明見{@link org.xutils.event.annotation.Event}類的說明.
     **/
@Event(value = R.id.btn_test_baidu1, type = View.OnClickListener.class/*可選引數, 預設是View.OnClickListener.class*/) private void onTestBaidu1Click(View view) { ... }

例如:

public class DownloadItemViewHolder extends DownloadViewHolder {
        @ViewInject(R.id.download_label)
        TextView label;
        @ViewInject(R.id.download_state)
        TextView state;
        @ViewInject(R.id.download_pb)
        ProgressBar progressBar;
        @ViewInject(R.id.download_stop_btn)
        Button stopBtn;

        public DownloadItemViewHolder(View view, DownloadInfo downloadInfo) {
            super(view, downloadInfo);
            refresh();
        }

        @Event(R.id.download_stop_btn)/*可選引數, 預設是View.OnClickListener.class*/
        private void toggleEvent(View view) {
            DownloadState state = downloadInfo.getState();
            switch (state) {
                case WAITING:
                case STARTED:
                    downloadManager.stopDownload(downloadInfo);
                    break;
                case ERROR:
                case STOPPED:

                case FINISHED:
                    Toast.makeText(x.app(), "已經下載完成", Toast.LENGTH_LONG).show();
                    break;
                default:
                    break;
            }
        }

        @Event(R.id.download_remove_btn)/*可選引數, 預設是View.OnClickListener.class*/
        private void removeEvent(View view) {
            try {
                downloadManager.removeDownload(downloadInfo);
                downloadListAdapter.notifyDataSetChanged();
            } catch (DbException e) {
                Toast.makeText(x.app(), "移除任務失敗", Toast.LENGTH_LONG).show();
            }
        }

例如

@ContentView(R.layout.fragment_http)
    public class HttpFragment extends BaseFragment {


    /**
     * 1. 方法必須私有限定,
     * 2. 方法引數形式必須和type對應的Listener介面一致.
     * 3. 註解引數value支援陣列: value={id1, id2, id3}
     * 4. 其它引數說明見{@link org.xutils.view.annotation.Event}類的說明.
     **/
    @Event(value = R.id.btn_test1,
            type = View.OnClickListener.class/*可選引數, 預設是View.OnClickListener.class*/)
    private void onTest1Click(View view) {
    ........
        }
    }

5 使用網路模組

5.1 上傳多檔案示例

 @Event(value = R.id.btn_test2)
    private void onTest2Click(View view) {
        RequestParams params = new RequestParams("http://192.168.0.13:8080/upload");
        // 加到url裡的引數, http://xxxx/s?wd=xUtils
        params.addQueryStringParameter("wd", "xUtils");
        // 新增到請求body體的引數, 只有POST, PUT, PATCH, DELETE請求支援.
        // params.addBodyParameter("wd", "xUtils");

        // 使用multipart表單上傳檔案
        params.setMultipart(true);
        params.addBodyParameter(
                "file",
                new File("/sdcard/test.jpg"),
                null); // 如果檔案沒有副檔名, 最好設定contentType引數.
        try {
            params.addBodyParameter(
                    "file2",
                    new FileInputStream(new File("/sdcard/test2.jpg")),
                    "image/jpeg",
                    // 測試中文檔名
                    "你+& \" 好.jpg"); // InputStream引數獲取不到檔名, 最好設定, 除非服務端不關心這個引數.
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }
        x.http().post(params, new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String result) {
                Toast.makeText(x.app(), result, Toast.LENGTH_LONG).show();
            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show();
            }

            @Override
            public void onCancelled(CancelledException cex) {
                Toast.makeText(x.app(), "cancelled", Toast.LENGTH_LONG).show();
            }

            @Override
            public void onFinished() {

            }
        });

5.2 載入網路圖片資料到Listview的示例

private void loadImgList(String url) {
        x.http().get(new RequestParams(url), new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String result) {
                imageListAdapter.addSrc(getImgSrcList(result));
                imageListAdapter.notifyDataSetChanged();//通知listview更新資料
            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {

            }

            @Override
            public void onCancelled(CancelledException cex) {

            }

            @Override
            public void onFinished() {

            }
        });
    }
}

6 使用image載入模組

6.1 載入圖片的例子

載入網路圖片到imageView中:

x.image().bind(image,”http://pic.baike.soso.com/p/20090711/20090711101754-314944703.jpg“);

也可先設定相關引數,再載入圖片:

ImageOptions imageOptions =newImageOptions.Builder()
        .setSize(DensityUtil.dip2px(120), DensityUtil.dip2px(120))//圖片大小
        .setRadius(DensityUtil.dip2px(5))//ImageView圓角半徑
        .setCrop(true)// 如果ImageView的大小不是定義為wrap_content, 不要crop.
        .setImageScaleType(ImageView.ScaleType.CENTER_CROP)
        .setLoadingDrawableId(R.mipmap.ic_launcher)//載入中預設顯示圖片
        .setFailureDrawableId(R.mipmap.ic_launcher)//載入失敗後預設顯示圖片
        .build();
    x.image().bind(image,"http://pic.baike.soso.com/p/20090711/20090711101754-314944703.jpg",imageOptions);

bind()方法的第二個引數換成本地圖片地址,就可以載入本地儲存的圖片。

帶有回撥方法的載入圖片:

    // 設定載入圖片的引數  
            ImageOptions options = new ImageOptions.Builder()  
                    // 是否忽略GIF格式的圖片  
                    .setIgnoreGif(false)  
                    // 圖片縮放模式  
                    .setImageScaleType(ScaleType.CENTER_CROP)  
                    // 下載中顯示的圖片  
                    .setLoadingDrawableId(R.drawable.ic_launcher)  
                    // 下載失敗顯示的圖片  
                    .setFailureDrawableId(R.drawable.ic_launcher)  
                    // 得到ImageOptions物件  
                    .build();  
            // 載入圖片  
            x.image().bind(imgv, imagUrl, options, new CommonCallback<Drawable>() {  
                @Override  
                public void onSuccess(Drawable arg0) {  
                    LogUtil.e("下載成功");  
                }  

                @Override  
                public void onFinished() {  
                    LogUtil.e("下載完成");  
                }  

                @Override  
                public void onError(Throwable arg0, boolean arg1) {  

                    LogUtil.e("下載出錯," + arg0.getMessage());  
                }  

                @Override  
                public void onCancelled(CancelledException arg0) {  
                    LogUtil.e("下載取消");  
                }  
            });  
            // 載入本地圖片  
            // x.image().bind(imgv, "assets://test.gif", options);  
            // x.image().bind(iv_big_img, new  
            // File("/sdcard/test.gif").toURI().toString(), imageOptions);  
            // x.image().bind(iv_big_img, "/sdcard/test.gif", imageOptions);  
            // x.image().bind(iv_big_img, "file:///sdcard/test.gif", imageOptions);  
            // x.image().bind(iv_big_img, "file:/sdcard/test.gif", imageOptions);  

7 使用資料庫操縱模組

這部分,我們先分析下相關的原始碼介面,後面再給出一個使用的範例。

DbManager部分原始碼如下:

/**
     * 資料庫訪問介面
     */
    public interface DbManager extends Closeable {

    DaoConfig getDaoConfig();

    SQLiteDatabase getDatabase();

    /**
     * 儲存實體類或實體類的List到資料庫,
     * 如果該型別的id是自動生成的, 則儲存完後會給id賦值.
     *
     * @param entity
     * @return
     * @throws DbException
     */
    <pre name="code" class="java">    boolean saveBindingId(Object entity) throws DbException;

    /**
     * 儲存或更新實體類或實體類的List到資料庫, 根據id對應的資料是否存在.
     *
     * @param entity
     * @throws DbException
     */
    void saveOrUpdate(Object entity) throws DbException;

    /**
     * 儲存實體類或實體類的List到資料庫
     *
     * @param entity
     * @throws DbException
     */
    void save(Object entity) throws DbException;
    /**
     * 儲存或更新實體類或實體類的List到資料庫, 根據id和其他唯一索引判斷資料是否存在.
     *
     * @param entity
     * @throws DbException
     */
    void replace(Object entity) throws DbException;

    ///////////// delete
    void deleteById(Class<?> entityType, Object idValue) throws DbException;

    void delete(Object entity) throws DbException;

    void delete(Class<?> entityType) throws DbException;

    int delete(Class<?> entityType, WhereBuilder whereBuilder) throws DbException;

    ///////////// update
    void update(Object entity, String... updateColumnNames) throws DbException;

    int update(Class<?> entityType, WhereBuilder whereBuilder, KeyValue... nameValuePairs) throws DbException;

    ///////////// find
    <T> T findById(Class<T> entityType, Object idValue) throws DbException;

    <T> T findFirst(Class<T> entityType) throws DbException;

    <T> List<T> findAll(Class<T> entityType) throws DbException;

    <T> Selector<T> selector(Class<T> entityType) throws DbException;

    DbModel findDbModelFirst(SqlInfo sqlInfo) throws DbException;

    List<DbModel> findDbModelAll(SqlInfo sqlInfo) throws DbException;

    ///////////// table

    /**
     * 獲取表資訊
     *
     * @param entityType
     * @param <T>
     * @return
     * @throws DbException
     */
    <T> TableEntity<T> getTable(Class<T> entityType) throws DbException;

    /**
     * 刪除表
     *
     * @param entityType
     * @throws DbException
     */
    void dropTable(Class<?> entityType) throws DbException;

    /**
     * 新增一列,
     * 新的entityType中必須定義了這個列的屬性.
     *
     * @param entityType
     * @param column
     * @throws DbException
     */
    void addColumn(Class<?> entityType, String column) throws DbException;

    ///////////// db

    /**
     * 刪除庫
     *
     * @throws DbException
     */
    void dropDb() throws DbException;

    /**
     * 關閉資料庫,
     * xUtils對同一個庫的連結是單例項的, 一般不需要關閉它.
     *
     * @throws IOException
     */
    void close() throws IOException;

    ///////////// custom
    int executeUpdateDelete(SqlInfo sqlInfo) throws DbException;

    int executeUpdateDelete(String sql) throws DbException;

    void execNonQuery(SqlInfo sqlInfo) throws DbException;

    void execNonQuery(String sql) throws DbException;

    Cursor execQuery(SqlInfo sqlInfo) throws DbException;

    Cursor execQuery(String sql) throws DbException;
    ........
    }

通過DbManager這個類我們知道主要它做了以下幾件事情:

7.1 getDaoConfig 獲取資料庫的配置資訊

 DaoConfig getDaoConfig();

7.2 getDatabase 獲取資料庫例項

SQLiteDatabase getDatabase();

7.3 saveBindingId saveOrUpdate save 插入資料的3個方法(儲存資料)

/**
         * 儲存實體類或實體類的List到資料庫,
     * 如果該型別的id是自動生成的, 則儲存完後會給id賦值.
     *
     * @param entity
     * @return
     * @throws DbException
     */


        boolean saveBindingId(Object entity) throws DbException;

    /**
     * 儲存或更新實體類或實體類的List到資料庫, 根據id對應的資料是否存在.
     *
     * @param entity
     * @throws DbException
     */
    void saveOrUpdate(Object entity) throws DbException;

    /**
     * 儲存實體類或實體類的List到資料庫
     *
     * @param entity
     * @throws DbException
     */
    void save(Object entity) throws DbException;

save和saveOrUpdate的區別就是當一個實體裡面的主鍵一樣時如果使用saveOrUpdate會將當前主鍵對應的這條資料進行替換,而如果你使用了save就會報錯。
saveBindingId主要是存進去的資料如果當前表有主鍵回合主鍵進行繫結關聯。

7.4 replace 只有存在唯一索引時才有用 慎重

/**
     * 儲存或更新實體類或實體類的List到資料庫, 根據id和其他唯一索引判斷資料是否存在.
     *
     * @param entity
     * @throws DbException
     */
    void replace(Object entity) throws DbException;

7.5 delete操作的4種方法(刪除資料)

///////////// delete
    void deleteById(Class<?> entityType, Object idValue) throws DbException;

    void delete(Object entity) throws DbException;

    void delete(Class<?> entityType) throws DbException;

    int delete(Class<?> entityType, WhereBuilder whereBuilder) throws DbException;

7.6 update操作的2種方法(修改資料)

///////////// update
    void update(Object entity, String... updateColumnNames) throws DbException;

    int update(Class<?> entityType, WhereBuilder whereBuilder, KeyValue... nameValuePairs) throws DbException;

7.7 find操作6種方法(查詢資料)

///////////// find
    <T> T findById(Class<T> entityType, Object idValue) throws DbException;

    <T> T findFirst(Class<T> entityType) throws DbException;

    <T> List<T> findAll(Class<T> entityType) throws DbException;

    <T> Selector<T> selector(Class<T> entityType) throws DbException;

    DbModel findDbModelFirst(SqlInfo sqlInfo) throws DbException;

    List<DbModel> findDbModelAll(SqlInfo sqlInfo) throws DbException;

六中查詢方法的使用舉例:

當前資料庫中的表的效果如下:
這裡寫圖片描述

1.findById的使用

該方法主要是通過主鍵的值來進行查詢表裡面的資料
需求:查詢上方person表裡面id為3的資料

private void query(){  
            try {  
                PersonTable person = db.findById(PersonTable.class, "2");  
                Log.e("person",person.toString());  
            } catch (DbException e) {  
                e.printStackTrace();  
            }  
        }  

結果如下:
這裡寫圖片描述

2.findFirst的使用

該方法主要是返回當前表裡面的第一條資料
需求:查詢上方person表裡面的第一條資料

 private void query() {  
            try {  
                PersonTable person = db.findFirst(PersonTable.class);  
                Log.e("person", person.toString());  
            } catch (DbException e) {  
                e.printStackTrace();  
            }  
        }  

這裡寫圖片描述

3.findAll的使用

該方法主要是返回當前表裡面的所有資料
需求:查詢person表裡面的所有資料

 private void query() {  
            try {  
                List<PersonTable> persons = db.findAll(PersonTable.class);  
                Log.e("persons", persons.toString());  
            } catch (DbException e) {  
                e.printStackTrace();  
            }  
        }  

這裡寫圖片描述

4.selector的使用

該方法主要是用來進行一些特定條件的查詢
需求:查詢person表裡面age大於30並且性別為man的資料

private void query() {  
            try {  
                List<PersonTable> persons = db.selector(PersonTable.class).where("age", ">", 30).and("sex", "=", "man").findAll();  
                for(PersonTable person:persons){  
                    Log.e("person",person.toString());  
                }  
            } catch (DbException e) {  
                e.printStackTrace();  
            }  
        }  

這裡寫圖片描述

5.findDbModelFirst的使用

說起這個方法,該方法返回一個DbModel物件,那麼該物件是什麼呢?
DbModel原始碼如下:

 public final class DbModel {  

        /** 
         * key: columnName 
         * value: valueStr 
         */  
        private HashMap<String, String> dataMap = new HashMap<String, String>();  

        public String getString(String columnName) {  
            return dataMap.get(columnName);  
        }  

        public int getInt(String columnName) {  
            return Integer.valueOf(dataMap.get(columnName));  
        }  

        public boolean getBoolean(String columnName) {  
            String value = dataMap.get(columnName);  
            if (value != null) {  
                return value.length() == 1 ? "1".equals(value) : Boolean.valueOf(value);  
            }  
            return false;  
        }  

        public double getDouble(String columnName) {  
            return Double.valueOf(dataMap.get(columnName));  
        }  

        public float getFloat(String columnName) {  
            return Float.valueOf(dataMap.get(columnName));  
        }  

        public long getLong(String columnName) {  
            return Long.valueOf(dataMap.get(columnName));  
        }  

        public Date getDate(String columnName) {  
            long date = Long.valueOf(dataMap.get(columnName));  
            return new Date(date);  
        }  

        public java.sql.Date getSqlDate(String columnName) {  
            long date = Long.valueOf(dataMap.get(columnName));  
            return new java.sql.Date(date);  
        }  

        public void add(String columnName, String valueStr) {  
            dataMap.put(columnName, valueStr);  
        }  

        /** 
         * @return key: columnName 
         */  
        public HashMap<String, String> getDataMap() {  
            return dataMap;  
        }  

        /** 
         * @param columnName 
         * @return 
         */  
        public boolean isEmpty(String columnName) {  
            return TextUtils.isEmpty(dataMap.get(columnName));  
        }  
    }  

通過原始碼,我們分析發現DbModel本質就是一個key為當前表的欄位,value為當前某條記錄的值的一個HashMap.
需求:查詢person表中第一條資料的那個人的年齡age是多少。

 private void query() {  
            try {  
                DbModel model = db.findDbModelFirst(new SqlInfo("select * from person"));  
                Log.e("age", model.getString("age"));  
            } catch (DbException e) {  
                e.printStackTrace();   
            }  
        }  

這裡寫圖片描述
注意上面的sqlInfo物件的建立的構造引數只需要傳入一個sql語句即可。

6.findDbModelAll的用法

該方法的用途就是返回滿足sqlInfo資訊的所有資料的欄位的一個集合。
需求:查詢person表中年齡age大於25裡面的所有人的姓名
[java] view plain copy print?在CODE上檢視程式碼片派生到我的程式碼片

 private void query() {  
            try {  
                List<DbModel> persons = db.findDbModelAll(new SqlInfo("select * from person where age > 25"));  
                for(DbModel person:persons){  
                    Log.e("name", person.getString("name"));  
                }  
            } catch (DbException e) {  
                e.printStackTrace();  
            }  
        }  

這裡寫圖片描述
基本把查詢的6種方式都說了一遍,當然上面的6種需求不一定完全用上面的查詢方法可以查出結果,我這麼查詢的目的主要是帶領大家熟悉一下XUtils3的6種查詢方法是如何使用的,會了上面的6種方法,我相信你的查詢不會有太大問題,至於複雜的查詢無非就是sql語句的基本功力了。

7.8 dropTable 刪除表

 /**
     * 刪除表
     *
     * @param entityType
     * @throws DbException
     */
    void dropTable(Class<?> entityType) throws DbException;

7.9 addColumn 新增一列

/**
     * 新增一列,
     * 新的entityType中必須定義了這個列的屬性.
     *
     * @param entityType
     * @param column
     * @throws DbException
     */
    void addColumn(Class<?> entityType, String column) throws DbException;

7.10 dropDb 刪除資料庫

 /**
     * 刪除庫
     ***重點內容**
     * @throws DbException
     */
    void dropDb() throws DbException;

7.11 資料庫操作模組使用的DEMO

先建一個類,用來生成資料庫中的表,這裡新建一個StudentInfo類(注意裡面的@標籤的使用,使用這些標籤生成表的結構資訊)內容如下:

    @Table(name = "info")  
    public class StudentInfo {  
        @Column(name = "id", isId = true)  
        private int id;  
        @Column(name = "name")  
        private String name;  
        @Column(name = "age")  
        private int age;  

        public int getId() {  
            return id;  
        }  

        public void setId(int id) {  
            this.id = id;  
        }  

        public String getName() {  
            return name;  
        }  

        public void setName(String name) {  
            this.name = name;  
        }  

        public int getAge() {  
            return age;  
        }  

        public void setAge(int age) {  
            this.age = age;  
        }  

    }  

然後看如何使用:

    DbManager.DaoConfig daoConfig = new DaoConfig()  
                // 資料庫的名字  
                .setDbName("SudentInfo")  
                // 儲存到指定路徑  
                // .setDbDir(new  
                // File(Environment.getExternalStorageDirectory().getAbsolutePath()))  
                // 資料庫的版本號  
                .setDbVersion(1)  
                // 資料庫版本更新監聽  
                .setDbUpgradeListener(new DbUpgradeListener() {  
                    @Override  
                    public void onUpgrade(DbManager arg0, int arg1, int arg2) {  
                        LogUtil.e("資料庫版本更新了!");  
                    }  
                });  
        DbManager manager = x.getDb(daoConfig);  
        try {  
            //建立物件,用來生成表  
            StudentInfo info = new StudentInfo();  
            info.setAge(16);  
            info.setName("小花");  
            //建立表  
            manager.saveOrUpdate(info);  
        } catch (DbException e) {  
            e.printStackTrace();  
        }  

8 使用task管理模組

此模組使用比較簡單,主要是使用任務管理介面TaskController提供的方法,大大簡化了對任務的操作。

下圖是TaskController介面方法列表:
這裡寫圖片描述

TaskController介面的詳細定義如下:

public interface TaskController {

    /**
     * 在UI執行緒執行runnable.
     * 如果已在UI執行緒, 則直接執行.
     *
     * @param runnable
     */
    void autoPost(Runnable runnable);

    /**
     * 在UI執行緒執行runnable.
     * post到msg queue.
     *
     * @param runnable
     */
    void post(Runnable runnable);

    /**
     * 在UI執行緒執行runnable.
     *
     * @param runnable
     * @param delayMillis 延遲時間(單位毫秒)
     */
    void postDelayed(Runnable runnable, long delayMillis);

    /**
     * 在後臺執行緒執行runnable
     *
     * @param runnable
     */
    void run(Runnable runnable);

    /**
     * 移除post或postDelayed提交的, 未執行的runnable
     *
     * @param runnable
     */
    void removeCallbacks(Runnable runnable);

    /**
     * 開始一個非同步任務
     *
     * @param task
     * @param <T>
     * @return
     */
    <T> AbsTask<T> start(AbsTask<T> task);

    /**
     * 同步執行一個任務
     *
     * @param task
     * @param <T>
     * @return
     * @throws Throwable
     */
    <T> T startSync(AbsTask<T> task) throws Throwable;

    /**
     * 批量執行非同步任務
     *
     * @param groupCallback
     * @param tasks
     * @param <T>
     * @return
     */
    <T extends AbsTask<?>> Callback.Cancelable startTasks(Callback.GroupCallback<T> groupCallback, T... tasks);
}

9、文件參考

相關推薦

開源xUtils3使用

xUtils3是一個很好開發框架,它可以幫助我們在應用開發中簡化很多工作,與老版本xUtils2.x相比API和結構有較大的重構,因此在使用前有必要詳細學習它的使用。關於xUtils3的簡介請看另一篇文章:xUtils3簡介。 1 框架結構概覽 在使用

PLSQL連接Oracle 數據配置

evel 目錄 win32 asi ges network con 配置詳解 soft 1. 下載instantclient-basic-win32-11.2.0.1.0 (oracle官網下載地址:http://www.oracle.com/technetwork/t

oracle數據歸檔

oracle什麽是Oracle歸檔模式? Oracle數據庫有聯機重做日誌,這個日誌是記錄對數據庫所做的修改,比如插入,刪除,更新數據等,對這些操作都會記錄在聯機重做日誌裏。一般數據庫至少要有2個聯機重做日誌組。當一個聯機重做日誌組被寫滿的時候,就會發生日誌切換,這時聯機重做日誌組2成為當前使用的日誌,當聯機

JMeter數據操作

idt .cn username logs word api family -1 用戶名 Jmeter提供了JDBC連接的插件,通過執行SQL語句的java API,實現對數據庫的訪問和查詢。 一、安裝驅動包   將需要連接JDBC的jar包放入jmeter安裝文件的lib

11.Python-第三方requests(三)

raise upload int exce strong gbk auth 並且 exc Response對象 使用requests方法後,會返回一個response對象,其存儲了服務器響應的內容,如上實例中已經提到的 r.text、r.status_code……獲取文本方

深入探討Linux靜態與動態(轉)

share 分享 命名 one .com 過程 程序 簡單介紹 mage 2.生成動態庫並使用 linux下編譯時通過 -shared 參數可以生成動態庫(.so)文件,如下 庫從本質上來說是一種可執行代碼的二進制格式,可以被載入內存中執行。庫分靜態庫和動態庫兩種。

大數據量高並發的數據優化(MSSQL)

臨時表 引用 edi 強制 順序存儲 實現 好的 float 空間 轉載自:http://www.jb51.net/article/71041.htm 如果不能設計一個合理的數據庫模型,不僅會增加客戶端和服務器段程序的編程和維護的難度,而且將會影響系統實際運行的性能。所以,

數據規範

ipv4 舉例 eat sta 改變 image 字母 lin use 一、數據庫的庫名、表名、字段名命名規範: 1、駝峰表示法:即參考java中命名變量名的規範來命名,也就是如果只有一個單詞時,全部小寫;多個單詞時,第一個單詞全小寫,後面的所有單詞都是首字母大寫。舉

Oracle數據序列

art term ffffff TP 執行 清空 調用 滿足 sel 前言: 做過web開發的人員基本上都知道,數據庫表中的主鍵值有的時候我們會用數字類型的並且自增。這樣mysql、sql server中的都可以使用工具創建表的時候很容易實現。但是oracle中沒有設置自增

NCBI SRA數據使用

macos study trace bsp 使用詳解 srx inf 下載地址 fetch 轉:https://shengxin.ren/article/16 https://www.cnblogs.com/lmt921108/p/7442699.html SRA(

【Python爬蟲學習筆記8-2】MongoDB數據操作

參考資料 adding ocl 切換 username 詳解 top .com min 上一篇學習筆記8-1中介紹了MySQL和MongoDB的安裝、啟動和配置,本節我們接著學習有關MongoDB的一些概念、基本操作和在python中的使用。 MongoDB常用概念 為更好

Linux下oracle12c數據安裝

shadow follow glibc 格式化磁盤 www ech etc 12c 接收 簡介: oracle12c概述 oracle12c數據庫屬於關系型數據庫,采用C/S模式、支持SQL語言,穩定性、高性能、安全性優於其他官方網站: https://www.oracle

PyQuery使用

PyQuery是python中一個強大而又靈活的網頁解析庫,如果你覺得正則寫起來太麻煩,又覺得BeautifulSoup語法太難記,如果你熟悉jQuery的語法那麼,PyQuery就是你絕佳的選擇。 安裝:pip3 install pyquery 一、初始化 下面介紹三種初始化PyQ

BeautifulSoup使用

BeautifulSoup庫是靈活又方便的網頁解析庫,處理高效,支援多種解析器。利用它不用編寫正則表示式即可方便地實現網頁資訊的提取。 安裝:pip3 install beautifulsoup4 解析庫 解析器 使用方法 優勢

Urllib(urlopen,response,request,Headler,異常處理,URL解析)

簡介 Urllib是Python內建的HTTP請求庫。它包含四個模組: urllib.request :請求模組 urllib.error :異常處理模組 urllib.parse url : 解析模組 urllib.robotparser :robots.

Java JNI呼叫本地動態使用

java native方法與JNI實現 native方法定義:               簡單地講,一個Native Method就是一個java呼叫非java程式碼的介面。一個Native Method是

python tkinker模組

1、指令碼名稱不能命名為模組名,否則會報: Traceback (most recent call last):   File "C:/Users/Administrator/PycharmProjects/untitled/python/web/tkinter.py", line 1

Python-第三方requests

Requests 是用語言編寫,基於 urllib,採用 Apache2 Licensed 開源協議的 HTTP 庫。它比 urllib 更加方便,可以節約我們大量的工作,完全滿足 HTTP 測試需求。Requests 的哲學是以 PEP 20 的習語為中心開發的,所以它比

Python強大的第三方requests

Requests 是用語言編寫,基於 urllib,採用 Apache2 Licensed 開源協議的 HTTP 庫。它比 urllib 更加方便,可以節約我們大量的工作,完全滿足 HTTP 測試需求。Requests 的哲學是以 PEP 20 的習語為中心開發的,所以它比

STM32函式----(外部中斷/事件控制器 EXTI)

1.void EXTI_DeInit  (void) 函式解釋:將EXTI外設暫存器重置為默註釋。RCC_APB2PeriphResetCmd引數中沒有EXTI外設的的巨集,該外設重置採取的是直接向暫存器賦預設值的操作。 例子:EXTI_DeInit ( );