为 Android 应用程序复制 Sqlite 数据库

2024-04-19

我正在尝试使用本教程在我的 Android 应用程序中使用我自己创建的数据库http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/ http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

我的资产文件夹中有我的数据库,我已经工作了 5 个小时来解决这个问题,但徒劳无功。我总是不断地得到

01-17 04:09:07.111: E/Database(1060): sqlite3_open_v2("/data/data/com.rahul.besttracker/databases/route", &handle, 1, NULL) failed

and

01-17 04:09:07.271: E/AndroidRuntime(1060): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.rahul.besttracker/com.rahul.besttracker.Busdisplay}: android.database.sqlite.SQLiteException: unable to open database file

my code

public class Busdisplay extends ListActivity {
    TextView source, destination;
    String src, dest;
    ArrayList<String> mArrayList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        init();
        Bundle caught = getIntent().getExtras();
        src = caught.getString("source");
        dest = caught.getString("dest");

        DataBaseHelper entry = null;

        entry = new DataBaseHelper(Busdisplay.this);

        entry.openDataBase();

        mArrayList = entry.readEntry(src, dest);

        entry.close();

        setListAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, mArrayList));
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);
    }

    void init() {
        source = (TextView) findViewById(R.id.textView1);
        destination = (TextView) findViewById(R.id.textView2);
    }

}

我的 DBhelper 类

public class DataBaseHelper extends SQLiteOpenHelper {

    // The Android's default system path of your application database.
    private static final String DB_PATH =   "/data/data/com.rahul.besttracker/databases/";

    private static final String DB_NAME = "route.db";
    private static final String DB_TABLE1 = "route1";
    private static final String DB_TABLE2 = "route2";
    private SQLiteDatabase myDataBase;

    private final Context myContext;

    /**
     * Constructor Takes and keeps a reference of the passed context in order to
     * access to the application assets and resources.
     * 
     * @param context
     */
    public DataBaseHelper(Context context) {

        super(context, DB_NAME, null, 1);
        this.myContext = context;
    }

    /**
     * Creates a empty database on the system and rewrites it with your own
     * database.
     * */
    public void createDataBase() throws IOException {

        boolean dbExist = checkDataBase();

        if (dbExist) {
            // do nothing - database already exist
        } else {

            // By calling this method and empty database will be created into
            // the default system path
            // of your application so we are gonna be able to overwrite that
            // database with our database.
            this.getReadableDatabase();

            try {

                copyDataBase();

            } catch (IOException e) {

                throw new Error("Error copying database");

            }
        }

    }

    /**
     * Check if the database already exist to avoid re-copying the file each
     * time you open the application.
     * 
     * @return true if it exists, false if it doesn't
     */
    private boolean checkDataBase() {

        SQLiteDatabase checkDB = null;

        try {
            String myPath = DB_PATH + DB_NAME;
            checkDB = SQLiteDatabase.openDatabase(myPath, null,
                    SQLiteDatabase.OPEN_READONLY);

        } catch (SQLiteException e) {

            System.out.print("ERROR");
        }

        if (checkDB != null) {

            checkDB.close();

        }

        return checkDB != null ? true : false;
    }

    /**
     * Copies your database from your local assets-folder to the just created
     * empty database in the system folder, from where it can be accessed and
     * handled. This is done by transfering bytestream.
     * */
    private void copyDataBase() throws IOException {

        // Open your local db as the input stream
        InputStream myInput = myContext.getAssets().open(DB_NAME);

        // Path to the just created empty db
        String outFileName = DB_PATH + DB_NAME;

        // Open the empty db as the output stream
        OutputStream myOutput = new FileOutputStream(outFileName);

        // transfer bytes from the inputfile to the outputfile
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer)) > 0) {
            myOutput.write(buffer, 0, length);
        }

        // Close the streams
        myOutput.flush();
        myOutput.close();
        myInput.close();

    }

    public void openDataBase() throws SQLException {

        // Open the database
        String myPath = DB_PATH + DB_NAME;
        myDataBase = SQLiteDatabase.openDatabase(myPath, null,
                SQLiteDatabase.OPEN_READONLY);

    }

    @Override
    public synchronized void close() {

        if (myDataBase != null)
            myDataBase.close();

        super.close();

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        try {
            createDataBase();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE1);
        db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE2);
        onCreate(db);
    }

    public ArrayList<String> readEntry(String src, String dest) {

        // TODO Auto-generated method stub
        Cursor c = myDataBase.rawQuery("SELECT route_no from " + DB_TABLE1
                + " WHERE stops LIKE '%" + src + "%,%" + dest + "%';", null);
        ArrayList<String> mArrayList = new ArrayList<String>();
        int index = c.getColumnIndex("route_no");
        for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
            // The Cursor is now set to the right position
            mArrayList.add(c.getString(index));
        }
        return mArrayList;
    }

    // Add your public helper methods to access and get content from the
    // database.
    // You could return cursors by doing "return myDataBase.query(....)" so it'd
    // be easy
    // to you to create adapters for your views.

}

我什至遇到了同样的问题,并且对此感到非常沮丧,即使我使用了本教程,但它不起作用。我搜索了很多关于此的线程并找到了一个......甚至这也不起作用......但我做了一个简单的改变。首先,创建两个类DatabaseHelper和CopyAdapter:

数据库助手

    public class DatabaseHelper extends SQLiteOpenHelper{
private static String TAG = "TAG";
private static String DB_PATH = "/data/data/PLACE_HERE_YOUR_INTERNAL_PATH/databases/";
private static String DB_NAME = "PLACE_HERE_YOUR_DATABASE_NAME_WITH_EXTENSION";
private SQLiteDatabase mDataBase; 
private final Context mContext;

public DatabaseHelper(Context context) 
{
    super(context, DB_NAME, null, 1);
    DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
    this.mContext = context;
}   

public void createDataBase() throws IOException
{
    boolean mDataBaseExist = checkDataBase();
    Log.d(TAG,"create DB in Helper. Data exists?"+mDataBaseExist);
    if(!mDataBaseExist)
    {
        Log.d(TAG,"get Writable in DatabaseHelper");
        this.getWritableDatabase();
        try 
        {
            Log.d(TAG,"copy Database");
            copyDataBase();
        } 
        catch (IOException mIOException) 
        {Log.d(TAG,"copy not succeed");
            throw new Error("ErrorCopyingDataBase");

        }
    }
}

private boolean checkDataBase()
{
    SQLiteDatabase mCheckDataBase = null;
    try
    {
        String myPath = DB_PATH + DB_NAME;
        mCheckDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
    }
    catch(SQLiteException mSQLiteException)
    {
        Log.e(TAG, "DatabaseNotFound " + mSQLiteException.toString());
    }

    if(mCheckDataBase != null)
    {
        mCheckDataBase.close();
    }
    return mCheckDataBase != null;
}

private void copyDataBase() throws IOException
{
    Log.d(TAG,"copy");
    InputStream mInput = mContext.getResources().getAssets().open(DB_NAME);

    String outFileName = DB_PATH + DB_NAME;
    Log.d(TAG,"Output:"+outFileName);
    File createOutFile = new File(outFileName);
    if(!createOutFile.exists()){
        createOutFile.mkdir();
    }
    OutputStream mOutput = new FileOutputStream(outFileName);
    byte[] mBuffer = new byte[1024];
    int mLength;
    while ((mLength = mInput.read(mBuffer))>0)
    {
        mOutput.write(mBuffer, 0, mLength);
    }
    mOutput.flush();
    mOutput.close();
    mInput.close();
}

public boolean openDataBase() throws SQLException
{
    String mPath = DB_PATH + DB_NAME;
    mDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
    return mDataBase != null;
}

@Override
public synchronized void close() 
{
    if(mDataBase != null)
        mDataBase.close();
    super.close();
}

@Override
public void onCreate(SQLiteDatabase db) 
{ }

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
{
    Log.vTAG, "UpgradingDatabase, This will drop current database and will recreate it");
}
   }

复制适配器

    public class CopyAdapter {

private final Context mContext;
private SQLiteDatabase mDb;
private DatabaseHelper mDbHelper;
    private static String TAG = "TAG";
private static String ACCOUNT_TABLE = "account";
public static String ACCOUNT_EXTRADATA = "extraData";
public static String ACCOUNT_ID = "ID";
public static String ACCOUNT_ADDITIONALDATA = "additionalData";
public static String ACCOUNT_DATA = "data";

public CopyAdapter(Context context) 
{
    this.mContext = context;
    mDbHelper = new DatabaseHelper(mContext);
    Log.d(TAG,"done");
}

public CopyAdapter createDatabase() throws SQLException 
{
    try 
    {
        Log.d(TAG,"create database");
        mDbHelper.createDataBase();
    } 
    catch (IOException mIOException) 
    {
        Log.e(TAG, mIOException.toString() + "  UnableToCreateDatabase");
        throw new Error("UnableToCreateDatabase");
    }
    return this;
}

public CopyAdapter open() throws SQLException 
{
    try 
    {
        Log.d(TAG,"Open");
        mDbHelper.openDataBase();
        mDbHelper.close();
        mDb = mDbHelper.getWritableDatabase();
    } 
    catch (SQLException mSQLException) 
    {
        Log.e(TAG, mSQLException.toString());
        throw mSQLException;
    }
    return this;
}

public void close() 
{
    mDbHelper.close();
}

public int countAccountData() 
{
    Cursor mCoursor = mDb.query(ACCOUNT_TABLE, new String[] {}, null, null, null, null, null);
    int mReturnedCount = mCoursor.getCount();
    mCoursor.close();
    return mReturnedCount;
}

public long insertData(String mExtra, String mAdditionalData, String mData) 
{
    ContentValues initialValues = new ContentValues();
    initialValues.put(ACCOUNT_EXTRADATA, mExtra);
    initialValues.put(ACCOUNT_ADDITIONALDATA, mAdditionalData);
    initialValues.put(ACCOUNT_DATA, mData);
    return mDb.insert(ACCOUNT_TABLE, null, initialValues);
}

public boolean updateData(int mPosition, String mExtra, String mAdditionalData, String mData) 
{
    ContentValues initialValues = new ContentValues();
    initialValues.put(ACCOUNT_EXTRADATA, mExtra);
    initialValues.put(ACCOUNT_ADDITIONALDATA, mAdditionalData);
    initialValues.put(ACCOUNT_DATA, mData);
    return mDb.update(ACCOUNT_TABLE, initialValues, "ID=" + mPosition, null) > 0;
}

public String retriveData(int mPosition)
{
    Cursor mCursor = mDb.query(ACCOUNT_TABLE, new String[] {ACCOUNT_DATA}, "ID=" + mPosition, null, null, null, null);
    mCursor.moveToFirst();
    String mReturn = mCursor.getString(mCursor.getColumnIndex(ACCOUNT_DATA));
    mCursor.close();
    return mReturn;
}

public String retriveAdditionalData(int mPosition)
{
    Cursor mCursor = mDb.query(ACCOUNT_TABLE, new String[] {ACCOUNT_ADDITIONALDATA}, "ID=" + mPosition, null, null, null, null);
    mCursor.moveToFirst();
    String mReturn = mCursor.getString(mCursor.getColumnIndex(ACCOUNT_ADDITIONALDATA));
    mCursor.close();
    return mReturn;
}

public boolean deleteAccount(int mPosition) 
{
    return mDb.delete(ACCOUNT_TABLE, ACCOUNT_ID + "=" + mPosition, null) > 0;
}
   }

然后只要在需要的地方调用即可:

   CopyAdapter  mDbHelper = new CopyAdapter(YourActivity.this);
    mDbHelper.createDatabase();

并确保您设置

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

在你的manifest.xml中

我读过很多变体,例如,将您的数据库文件放入资产文件夹中的另一个文件夹中,或者将您的数据库文件的结尾重命名为 jpg,或者在将数据库文件添加到资产之前将其压缩...忘记这一点。我能够使我的应用程序工作的唯一方法是将数据库文件放在我的资产文件夹中,而不使用文件夹或重命名或压缩。只是纯文件。从那时起,它就没有问题了。

我不知道从哪里得到上面的例子,我再也找不到这个网站了(但它在 stackoverflow 上),但是,通过一些解决方法并将纯数据库文件放入资产文件夹中,这就是解决方案。希望能帮助到你..

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为 Android 应用程序复制 Sqlite 数据库 的相关文章

  • Android/Java 创建辅助类来创建图表

    Goal 创建用于图形生成的辅助类 背景 我有 3 个片段 每个片段收集一些传感器数据 加速度计 陀螺仪 旋转 并使用 GraphView 绘制图表 以下是其中一个片段的代码 该代码当前工作正常 public class Gyroscope
  • Android:拍照后调用裁剪活动

    我在解析拍摄照片的 uri 来裁剪活动时遇到问题 在我的应用程序中 用户可以拍摄一张照片或从图库中选择一张照片 然后裁剪并上传 一切听起来都很简单 从图库中选择时 图库应用程序会返回所选照片的 uri 如下所示 content media
  • 有没有办法替代Android中的标准Log?

    有没有办法以某种方式拦截对 android 中标准 Log 的调用并执行其他操作 在桌面 Java 中 人们通常会得到一些记录器 因此有多种方法可以安装不同的日志处理程序 实现 但是 Android似乎对Log有静态调用 我找不到任何有关替
  • Android Studio:Android 设备监视器未显示我的设备

    我的真实设备是索尼 Xperia c6502安卓版本4 3 我确定我将其连接到我的计算机然后打开开发者选项 USB调试 on 在 SDK 管理器中 Google USB 驱动程序已安装 I downloaded Xperia Z Drive
  • Android 导航回到 Activity;不要重新加载父级

    我有一个场景 我单击 ListFragment 并启动一个新的 Activity 如下所示 public void onListItemClick ListView l View v int position long id super o
  • SQL Server 大小写/排序规则问题

    今天我在客户数据库中遇到了一个奇怪的情况 SQL Server 2005 数据库排序规则不区分大小写 因此我可以使用任何大小写编写 SQL 查询 没有任何问题 除了一个 一张特定表中的一个特定列称为 DeadZone 如果我这样查询 从表名
  • AOSP 中 android.Build.SERIAL 何时何地生成?

    我知道android Build SERIAL是在第一次设备启动时生成的 但我无法准确定位位置和时间 我正在建造AOSP Jelly Bean Android平板电脑 nosdcard 第二个问题 这个是序列号吗 really对所有人来说都
  • 如何在虚拟机 VirtualBox 上运行 Android-x86 4.2 iso?

    我想用Android x86测试和调试我的应用程序 我之前成功尝试过其他版本的Android x86 但是关于android x86 4 2有一个错误 所以我在这里问我的问题 因为它可能会发生在其他人身上 我安装了oracle VM vir
  • VBScript:从 Scripting.Dictionary 中对项目进行排序

    我有下面的代码 它获取这样的数据 姓名 1 姓名 4 姓名 2 姓名 3 并像这样列出 是一个复选框 姓名 1 姓名 4 姓名 2 姓名 3
  • 无法在 Java 中输出正确的哈希值。怎么了?

    在我的 Android 应用程序中 我有一个 SHA256 哈希值 我必须使用 RIPEMD160 消息摘要算法进一步对其进行哈希值 我可以输出任何字符串的正确 sha256 和ripemd160 哈希值 但是当我尝试使用ripemd160
  • Android - 正确使用 invalidateOptionsMenu()

    我一直在寻找很多invalidateOptionsMenu 我知道它的作用 但我想不出这种方法在现实生活中有用的任何例子 我的意思是 例如 假设我们要添加一个新的MenuItem to our ActionBar 我们可以简单地获取菜单on
  • 与 Dagger 一起使用时,Espresso 生成 FileNotFoundException

    我一直在研究旧版 Android 应用程序 尝试为其添加测试和适当的架构 该应用程序有一个主要LaunchActivity它在启动时运行一系列检查 最初 该活动使用 Dagger 来 注入依赖项 活动将使用它来运行检查 但效果相当糟糕 我转
  • 使用 Glide 库设置图像加载完成后进度条的可见性

    您好 我想要一个图像进度条 该进度条将在图像加载时显示 但当图像加载完成时 我想将其设置为消失 早些时候我为此使用了毕加索库 但我不知道如何将它与 Glide 库一起使用 我知道有一些资源就绪功能 但我不知道如何使用它 谁能帮我 毕加索图书
  • 在 Android ADT Eclipse 插件中滚动布局编辑器

    有谁知道当布局编辑器的内容溢出一个 屏幕 时如何滚动这些内容 我说的是在设计时使用 ADT 布局编辑器 而不是在物理设备上运行时滚动 效果很好 关闭 Android 布局编辑器中的剪辑 切换剪辑 按钮位于 Android 布局编辑器的右上角
  • 如何在 PostgreSQL 中使用条件和子查询创建唯一索引?

    我使用 PGSQL 并尝试添加下面的索引 CREATE UNIQUE INDEX fk client ON user client fk client WHERE fk client NOT IN SELECT fk client FROM
  • 为什么 ExpandableListView 更改 ChildView 设置(Android)?

    我对使用 ExpandableListView 有疑问 就我而言 我有两个组视图和两个子视图 而子视图由一个带有多个按钮 文本视图等的相对布局组成 例如 当首先扩展第二组并对视图持有者进行一些更改并随后扩展第一组时 先前所做的更改也会自动应
  • 如何以编程方式创建 CardView

    我正在开发一个 Android 应用程序Java Android Studio 我想在活动中创建CardView以编程方式 我想将以下属性设置为CardView layout width wrap content layout row 0
  • Android BLE 扫描永远找不到设备

    几天以来 我尝试在我的应用程序中实现 BLE 连接 我知道我尝试连接的设备功能齐全 因此问题一定是我的代码 我用BluetoothLeScanner startScan 方法 但回调方法永远不会被调用 public void startSc
  • 如何让用户在android列表视图中选择主题?

    我有一个带有两个标签的列表视图 标题和副标题 我想要深色和浅色背景作为用户选项 标题具有 textAppearanceMedium 副标题具有 textAppearanceSmall 我希望样式 MyTheme Dark 具有白色文本 My
  • 进程被杀死后不会调用 onActivityResult

    我有一个主要活动 Main 和另一个活动 Sub 由 Main 调用 startActivityForResult new Intent this SubActivity class 25 当我在 Sub 时 我终止该进程 使用任务管理器或

随机推荐

  • 通过javascript在html表格中动态添加一列

    我正在编写一个java脚本代码 它将在html中已经存在的表中动态附加一列复选框 我的 html 代码是这样的 table border 1 tr th Email id th th Em th tr table
  • QSignal Manager - 无法将多个信号连接到一个插槽

    我有 4 个 QLineEdits 和 4 个 QPushButtons 如果我单击 QPushButton 我想在相应的 QLineEdit 内设置一些文本 我想使用QSignalMapper来区分每个QButton及其对应的QLineE
  • 用于教育目的的公共 SQL 数据库

    我正在寻找一个可以免费访问的公开可用的 SQL 数据库 可以在其中运行一些SELECT免费查询一些有意义的数据 不是 item1 item2 item3 你见过吗 如果能附上一些教程就更好了 供应商并不那么重要 只要可以使用通用 JDBC
  • 复杂类型中的 XJC javaType 适配器

    我想让 XJC 在生成 bean 时在复杂类型中使用 javaType 标记 这是不允许的吗 我真的缺少好的文档和一些可以理解的错误消息 这是我正在尝试的操作 但失败并出现错误 编译器无法支持此转换自定义 它附加到错误的位置 或者与其他绑定
  • Django Rest Framework如何禁止用户更改用户名?

    我正在创造UserSerializer并希望允许用户创建新帐户但禁止他们更改用户名 有一个read only我可以应用该属性 但用户在创建新用户名时将无法设置用户名 但如果没有它 它允许我改变它 还有一个required不幸的是 该属性不能
  • Jquery 数据表主题隐藏页眉/页脚块

    我正在尝试删除该表的页眉 页脚块 Picture of what I am trying to remove 该表的Jquery代码 document ready function var oTable tableSmooth dataTa
  • 迭代器模式 - 错误 C2679:二进制 '<<':找不到采用 'std::string' 类型的右侧操作数的运算符 [重复]

    这个问题在这里已经有答案了 我正在尝试使用迭代器模式进行迭代和打印 但出现错误 这是错误 error C2679 binary lt lt no operator found which takes a right hand operand
  • C++11:如何使用 设置种子

    我正在练习随机库 这是 C 11 的新功能 我编写了以下最小程序 include
  • Angular 和 Sails 路由配置

    是否有任何 Sails js 或 Node 配置可以阻止 Angular 路由工作 无论我采取什么方法 除了 sails 的routes js 中的路线之外 每条路线都会返回 404 我尝试过 1 2 和 1 3 Angular 版本 并且
  • 部署到 Digital Ocean 的 Meteor 应用卡在 100% CPU 和 OOM

    我有一个使用 Meteor Up 部署到 Digital Ocean 的 Meteor 0 8 0 应用程序 该应用程序一直卡在 100 CPU 只是因内存不足而崩溃 然后以 100 CPU 再次启动 过去24小时就这样卡住了 奇怪的是没有
  • Rails 4.0 强参数嵌套属性,其键指向哈希值

    我正在使用 Rails 4 x beta 并尝试让嵌套属性与 Carrierwave 一起使用 不确定我正在做的事情是否是正确的方向 经过一番搜索 最后查看了 Rails 源代码和强大的参数 我发现了以下注释 Note that if yo
  • 卸载应用程序 uninstallreceiver 未调用

    经过大量谷歌后 我找到了一些很好的解决方案来找出应用程序的卸载接收器 我指的是第一个链接 https stackoverflow com questions 18692571 how it works warning that app is
  • ReferenceError:错误#1065:变量 JSON 未定义

    我快要爆炸了 想弄清楚如何解决这个问题 所以在我这样做之前 也许你可以帮助我 我正在 flash builder 4 5 1 21328 中的 flash Player 11 下开发一个游戏 我想尝试一下新功能 例如本机 JSON 支持 但
  • 检测请求是否是 jQuery 中的 post

    我试图以不同的方式加载页面 如果它是一个帖子或一个获取 并且似乎 jQuery 会有一些东西所以我可以做 if isPost do something if this page was a post 我正在根据请求类型显示 隐藏某些内容 并
  • Ruby:C 类包含模块 M;在 M 中包含模块 N 不会影响 C。什么给出?

    更详细地说 我有一个模块Narf 它为一系列类提供了基本功能 具体来说 我想影响所有继承的类Enumerable So I include Narf in Enumerable Array是一个类 其中包括Enumerable默认情况下 然
  • Android 解析无法将子类列表固定到缓存

    如图所示http blog parse com 2013 05 30 parse on android just got classier http blog parse com 2013 05 30 parse on android ju
  • 复特征向量

    R 如何表示复特征向量 例如 gt eigen matrix c 2 1 0 2 2 2 values 1 2 2 vectors 1 2 1 0 4 440892e 16 2 1 1 000000e 00 这并不表明特征向量是复数 那么如
  • Get-AdUser,其中邮件不为空

    我正在尝试获取 AD 中拥有电子邮件 邮件属性 的所有用户的列表 我有这个命令 Get AdUser filter Properties mail Select SAMAccountName mail Export CSV Path use
  • Redis键空间事件不触发

    我有两个 Redis 客户端 在一个文件中我有一个简单的脚本设置并删除了 Redis 键 var redis require redis var client redis createClient 6379 127 0 0 1 client
  • 为 Android 应用程序复制 Sqlite 数据库

    我正在尝试使用本教程在我的 Android 应用程序中使用我自己创建的数据库http www reigndesign com blog using your own sqlite database in android applicatio