如何通过编程方式向SQLite数据库插入数据?
编程方式向Android SQLite数据库插入数据的实现方法
嘿,我懂你要的是纯代码层面操作SQLite插入数据的方案,毕竟搜出来的命令行/工具方法对实际开发没啥帮助对吧?我结合你给出的MainActivity代码,一步步给你讲清楚怎么实现~
第一步:先确保你的数据表已经创建
你代码里的final String CREATE_BOOKS_TABLE可以补全成这样,先把books表的结构定义好:
public class MainActivity extends AppCompatActivity { private SQLiteDatabase db; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); // 打开或创建数据库 db = openOrCreateDatabase("books.db", SQLiteDatabase.CREATE_IF_NECESSARY, null); // 设置数据库基础配置 db.setVersion(1); db.setLocale(Locale.getDefault()); db.setLockingEnabled(true); // 定义创建books表的SQL语句 final String CREATE_BOOKS_TABLE = "CREATE TABLE IF NOT EXISTS books (" + "_id INTEGER PRIMARY KEY AUTOINCREMENT," + // 自增主键 "title TEXT NOT NULL," + // 书名,非空约束 "author TEXT)"; // 作者字段 // 执行创建表的SQL db.execSQL(CREATE_BOOKS_TABLE); // 接下来就可以插入数据啦👇 } }
第二步:两种插入数据的常用方法
方法1:用ContentValues插入(推荐,安全且易维护)
ContentValues会自动帮你处理数据类型转换,还能避免SQL注入问题,是官方推荐的方式:
// 1. 封装要插入的数据 ContentValues bookValues = new ContentValues(); bookValues.put("title", "Android编程权威指南"); bookValues.put("author", "Bill Phillips"); // 2. 插入到books表 // insert方法返回插入行的ID,失败则返回-1 long insertedRowId = db.insert("books", null, bookValues); // 可以加个日志判断插入结果 if (insertedRowId != -1) { Log.d("MainActivity", "数据插入成功!行ID:" + insertedRowId); } else { Log.e("MainActivity", "数据插入失败"); }
方法2:直接执行INSERT SQL语句(适合简单场景)
如果是固定数据或者你自己拼SQL(注意:绝对不要直接拼接用户输入的内容,要用占位符?来避免SQL注入):
// 用占位符代替具体值,第二个参数是占位符对应的实际数据 String insertSql = "INSERT INTO books (title, author) VALUES (?, ?)"; db.execSQL(insertSql, new Object[]{"Head First Android", "Dawn Griffiths"});
第三步:别忘了关闭数据库释放资源
数据库连接用完一定要关闭,不然会浪费系统资源,你可以在Activity的onDestroy方法里处理:
@Override protected void onDestroy() { super.onDestroy(); // 检查数据库是否打开,再关闭 if (db != null && db.isOpen()) { db.close(); } }
额外建议:用SQLiteOpenHelper管理数据库(更规范)
虽然上面的代码能跑,但实际项目里更推荐用SQLiteOpenHelper来管理数据库的创建、版本升级,这样能避免很多潜在问题。给你个简单的示例:
// 先写一个继承SQLiteOpenHelper的类 public class BookDatabaseHelper extends SQLiteOpenHelper { // 数据库名称和版本号 private static final String DB_NAME = "books.db"; private static final int DB_VERSION = 1; public BookDatabaseHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) { // 在这里创建表 String CREATE_BOOKS_TABLE = "CREATE TABLE IF NOT EXISTS books (" + "_id INTEGER PRIMARY KEY AUTOINCREMENT," + "title TEXT NOT NULL," + "author TEXT)"; db.execSQL(CREATE_BOOKS_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 版本升级时的处理,比如删除旧表重建(实际项目要考虑数据迁移) db.execSQL("DROP TABLE IF EXISTS books"); onCreate(db); } }
然后在MainActivity里使用这个Helper:
public class MainActivity extends AppCompatActivity { private BookDatabaseHelper dbHelper; private SQLiteDatabase db; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); // 初始化Helper dbHelper = new BookDatabaseHelper(this); // 获取可写的数据库实例 db = dbHelper.getWritableDatabase(); // 然后用上面的方法插入数据即可... } @Override protected void onDestroy() { super.onDestroy(); // 关闭Helper,会自动关闭数据库连接 dbHelper.close(); } }
这样你的数据库管理会更规范,后续版本升级也更方便~
内容的提问来源于stack exchange,提问作者Brendan
相关产品推荐
相关产品推荐

