3

テーブルを含む Sqlite ブラウザーからエクスポートされた csv ファイルがあり、それを sdcard に配置しました。Androidアプリのデータベースにプログラムでインポートできたらいいのにと思います。いろいろ試してみましたが、助けてもらえませんでした。私はAndroidで同じタブを作成しましたが、csvファイルから1行ずつコンテンツを読み取り、挿入するたびにクエリを実行することはしたくありません...したがって、重要なポイントは直接インポートです

ねえ、私はこのコードを通過しました

public static void InsertCSVFile(String FilePath, String filename,
        String TableName) {
    try {
        FileReader fr = new FileReader(new File("mnt/sdcard/",
                "olinecsv.csv"));
        BufferedReader br = new BufferedReader(fr);
        String data = "";
        String tableName = "Test";
        String columns = "ID,NAME,TYPE";
        String InsertString1 = "INSERT INTO " + tableName + " (" + columns
                + ") values(";
        String InsertString2 = ");";

        mainDatabase.beginTransaction();
        while ((data = br.readLine()) != null) {
            StringBuilder sb = new StringBuilder(InsertString1);
            String[] sarray = data.split(",");
            sb.append(sarray[0] + ",");
            sb.append( sarray[1] + ",");
            sb.append(sarray[2]);
            sb.append(InsertString2);
            if(sarray[0].contains("ID"))
                continue;
            mainDatabase.rawQuery(sb.toString(), null);
            //mainDatabase.execSQL(sb.toString());
        }

そのファイルをsdcardに配置し、クエリStringBuilderを取得していますが、エラーまたは例外が発生し、テーブルに何も入力されませんが、Sqliteプログラムで実行した同じクエリをデバッグしている間、それは機能します提案をいただければ幸いです

4

2 に答える 2

2

組み込みの CSV インポート機能はありません。CSV ファイルを 1 行ずつ読み込んで挿入する必要があります。ディスク上のCSVファイルから読み取り、行を抽出する優れた仕事をする多くのCSV解析プログラム(私は個人的にOpenCSVを使用しています)があります。有効な挿入関数の作成に問題がある場合は、質問してコードを含めてください。

于 2012-04-24T06:04:54.917 に答える
1

このコードを試して、

res>raw にフォルダーを作成し、yourfile.csv ファイルを raw フォルダーに配置します。

このメソッドを追加して、sqlite にデータを挿入します。

  public void insertCSVData(Activity activity, InputStream is, String tableName) {

    String colunmNames = null, str1 = null;
    open();

    try {

        BufferedReader buffer = new BufferedReader(new InputStreamReader(is));
        String line = "";

        String str2 = ");";

        db.beginTransaction();

        int i = 0;
        while ((line = buffer.readLine()) != null) {
            i++;
            if (i == 1) {
                colunmNames = line;
                str1 = "INSERT INTO " + tableName + " (" + colunmNames + ") values (";
            } else {

                StringBuilder sb = new StringBuilder(str1);
                String[] str = line.split(",");

                for (int h = 0; h < str.length; h++) {

                    if (h == str.length - 1) {
                        sb.append("'" + str[h] + "'");
                    } else {
                        sb.append("'" + str[h] + "',");
                    }
                }

                sb.append(str2);
                db.execSQL(sb.toString());
            }
        }

        db.setTransactionSuccessful();
        db.endTransaction();

    } catch (Exception e) {

        close();

        e.printStackTrace();
    }

    close();
}
   public void open() {
    db = this.getWritableDatabase();
}

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

このメソッドを呼び出す

insertCSVData(Activity, getResources().openRawResource(R.raw.yourfile.csv), tableName);

このコードで問題が解決することを願っています...

于 2016-05-20T06:54:58.133 に答える