以下是一个将 CSV 文件写入 SQLite 数据库的 Android 项目代码示例:
- 在您的 Android 项目的 build.gradle 文件中添加 SQLite 和 CSV 相关依赖项:
implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1'
implementation 'com.opencsv:opencsv:5.4'
- 创建一个名为 CsvDatabaseHelper 的辅助类,继承自 SQLiteAssetHelper 类:
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;
public class CsvDatabaseHelper extends SQLiteAssetHelper {
private static final String DATABASE_NAME = "database.db";
private static final int DATABASE_VERSION = 1;
public CsvDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
setForcedUpgrade();
}
}
- 创建一个名为 CsvImporter 的类来读取 CSV 文件并将其写入 SQLite 数据库:
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteStatement;
import com.opencsv.CSVReader;
import java.io.FileReader;
import java.util.Arrays;
public class CsvImporter {
private static final String CSV_FILE_PATH = "path/to/your/csv/file.csv";
public static void importCSV(Context context) {
CsvDatabaseHelper dbHelper = new CsvDatabaseHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase();
try {
CSVReader reader = new CSVReader(new FileReader(CSV_FILE_PATH));
String[] nextLine;
String tableName = "your_table_name";
String columns = "column1, column2, column3"; // 根据实际表结构修改
String placeholders = "?, ?, ?"; // 根据实际表结构修改
db.beginTransaction();
SQLiteStatement statement = db.compileStatement(
"INSERT INTO " + tableName + " (" + columns + ") VALUES (" + placeholders + ")"
);
// 读取 CSV 文件中的每一行并插入到数据库中
while ((nextLine = reader.readNext()) != null) {
statement.clearBindings();
for (int i = 0; i < nextLine.length; i++) {
statement.bindString(i + 1, nextLine[i]);
}
statement.execute();
}
db.setTransactionSuccessful();
} catch (Exception e) {
e.printStackTrace();
} finally {
db.endTransaction();
db.close();
}
}
}
- 在您的 Activity 或 Fragment 中调用
CsvImporter.importCSV(context)
方法来执行导入操作:
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class YourActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 调用 CsvImporter 类的 importCSV 方法来导入 CSV 数据到 SQLite 数据库
CsvImporter.importCSV(this);
}
}
请注意,您需要将 path/to/your/csv/file.csv
替换为您实际 CSV 文件的路径,并根据实际表结构修改表名、列名和占位符等信息。
希望以上代码能帮到您!如果您有任何更多的问题,请随时提问。
以下是一个示例代码,展示了如何将CSV文件写入SQLite数据库。请注意,你需要根据你的具体要求进行适当的修改和调整。
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class DBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "mydatabase.db";
private static final int DATABASE_VERSION = 1;
private static final String TABLE_NAME = "mytable";
private static final String COLUMN_NAME = "name";
private static final String COLUMN_AGE = "age";
private Context context;
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
String createTableQuery = "CREATE TABLE " + TABLE_NAME + " (" + COLUMN_NAME + " TEXT, " + COLUMN_AGE + " INTEGER)";
db.execSQL(createTableQuery);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
public void insertCSVToDatabase() {
SQLiteDatabase db = this.getWritableDatabase();
InputStream inputStream = context.getResources().openRawResource(R.raw.csv_file); // 替换为你的CSV文件名称
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
try {
while ((line = reader.readLine()) != null) {
String[] values = line.split(",");
ContentValues contentValues = new ContentValues();
contentValues.put(COLUMN_NAME, values[0]);
contentValues.put(COLUMN_AGE, Integer.parseInt(values[1]));
db.insert(TABLE_NAME, null, contentValues);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
db.close();
}
}
将上述代码中的mydatabase.db
替换为你想要创建的数据库名称,mytable
替换为你想要创建的表名称,name
和age
替换为你的CSV文件中列的名称。另外,你需要将CSV文件放置在res/raw
目录下,并将其命名为csv_file.csv
或者你自己的文件名,并在代码中相应地引用它(替换R.raw.csv_file
部分)。
调用insertCSVToDatabase
方法将会读取CSV文件的内容,并将每行数据插入SQLite数据库的表中。请确保在使用此代码之前已经创建好了SQLite数据库和表。
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/136729.html