Android 根据sql文件创建数据库并插入数据
2014-10-08 15:24
459 查看
因为在开发客户端的时候,服务器端的有写数据是重复的,不需要再去访问服务器的,然后服务器端提供的是一个sql文件,里面包含了数据库和数据,我们这些开发客户端的不可能一行一行的进行手动入库吧?所以我就想到了直接读取sql文件进行创建数据并插入数据好了。
创建DBHelp并继承SQLiteOpenHelper
Configuration.java是一些常量
其实这个过程非常的简单易懂,就是根据路径去读取文件,然后读取文件里面的内容,再根据关键字,sqllite会自动进行相应的操作,所以这个sql文件中的sql语句一定要规范,不然会写入不了的。
在activity中调用:
创建DBHelp并继承SQLiteOpenHelper
public class DBHelper extends SQLiteOpenHelper { private Context mContext; public DBHelper(Context context, String databaseName, CursorFactory factory, int version) { super(context, databaseName, factory, version); mContext = context; } /** * 数据库第一次创建时调用 * */ @Override public void onCreate(SQLiteDatabase db) { if (!tabIsExist("test", db)) { executeAssetsSQL(db, "test.sql"); // db.execSQL(sql); //System.out.println("创建表"); } } /** * 数据库升级时调用 * */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 数据库不升级 if (newVersion <= oldVersion) { return; } Configuration.oldVersion = oldVersion; int changeCnt = newVersion - oldVersion; for (int i = 0; i < changeCnt; i++) { // 依次执行updatei_i+1文件 由1更新到2 [1-2],2更新到3 [2-3] String schemaName = "update" + (oldVersion + i) + "_" + (oldVersion + i + 1) + ".sql"; executeAssetsSQL(db, schemaName); } } /** * 读取数据库文件(.sql),并执行sql语句 * */ private void executeAssetsSQL(SQLiteDatabase db, String schemaName) { BufferedReader in = null; try { in = new BufferedReader(new InputStreamReader(mContext.getAssets() .open(Configuration.DB_PATH + "/" + schemaName))); //System.out.println("路径:" + Configuration.DB_PATH + "/" + schemaName); String line; String buffer = ""; while ((line = in.readLine()) != null) { buffer += line; if (line.trim().endsWith(";")) { db.execSQL(buffer.replace(";", "")); buffer = ""; } } } catch (IOException e) { Log.e("db-error", e.toString()); } finally { try { if (in != null) in.close(); } catch (IOException e) { Log.e("db-error", e.toString()); } } } public List<Area> selectAllCities(SQLiteDatabase db) { List<Area> areas = new ArrayList<Area>(); Area area; String sql = "select * from test where area_level=?"; Cursor cursor = db.rawQuery(sql, new String[] { "" + 0 }); while(cursor.moveToNext()){ area = new Area(); area.setId(cursor.getInt(0)); area.setArea_name(cursor.getString(2)); areas.add(area); area = null; } cursor.close(); return areas; } public List<Area> selectAllAreas(SQLiteDatabase db,int parent_id) { List<Area> areas = new ArrayList<Area>(); Area area; String sql = "select * from test where parent_id=?"; Cursor cursor = db.rawQuery(sql, new String[] { "" + parent_id }); while(cursor.moveToNext()){ area = new Area(); area.setId(cursor.getInt(0)); area.setArea_name(cursor.getString(2)); areas.add(area); area = null; } cursor.close(); return areas; } /** * 判断是否存在某一张表 * @param tabName * @param db * @return */ public boolean tabIsExist(String tabName, SQLiteDatabase db) { boolean result = false; if (tabName == null) { return false; } Cursor cursor = null; try { String sql = "select count(*) as c from sqlite_master where type ='table' and name ='" + tabName.trim() + "' "; cursor = db.rawQuery(sql, null); if (cursor.moveToNext()) { int count = cursor.getInt(0); if (count > 0) { result = true; } } } catch (Exception e) { } return result; } }
Configuration.java是一些常量
public class Configuration { public static final String DB_PATH = "schema"; public static final String DB_NAME = "test.db"; public static final int DB_VERSION = 1; public static int oldVersion = -1; }sql文件是放在assets->schema->test.sql
其实这个过程非常的简单易懂,就是根据路径去读取文件,然后读取文件里面的内容,再根据关键字,sqllite会自动进行相应的操作,所以这个sql文件中的sql语句一定要规范,不然会写入不了的。
在activity中调用:
dbHelper = new DBHelper(this, "test", null, 1); dbHelper.onCreate(dbHelper.getWritableDatabase());
相关文章推荐
- Android 根据sql文件创建数据库并插入数据
- Java实现把excel xls中数据转为可直接插入数据库的sql文件
- 读sql文件执行创建数据库 插入数据库
- 【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建
- (大数据工程师学习路径)第四步 SQL基础课程----创建数据库并插入数据
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 通过 java 把excel xls中数据转为可直接插入数据库的sql文件
- 【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建
- 使用SQLiteHelper创建数据库并插入数据 分类: H1_ANDROID 2013-11-05 22:44 1398人阅读 评论(0) 收藏
- 将txt文件中的数据批量插入到数据库中SqlBulkCopy
- phpMyAdmin怎么创建数据库如何导入SQL数据文件
- 笔记:读取sql文件,然后将数据批量插入数据库
- C#使用SqlBulkCopy将DataTable写入数据库的表中(表不存在则创建新表,数据存在则更新,不存在则插入)
- 根据数据库名创建实体类文件
- SQL语句创建(数据库|数据表|索引)
- linq to sql 中从dbml文件中创建数据库
- 采用SqlBulkCopy向数据库批量插入数据(大数据效果显著)
- linq to sql 中从dbml文件中创建数据库
- Visual Studio 2008不能创建数据库连接出现:未能加载文件或程序集“Microsoft.SqlServer.Management.Sdk.Sfc, Version=10.0.0.0, Culture=neutral,Publi
- PHP 操作数据库 创建数据库,导入数据文件,备份数据库