android 使用SQLite的基本操作
Android操作数据库SQLite使用sql语句基本操作
1:自定义自己的SQLiteOpenHelper
public class DBHelper extends SQLiteOpenHelper { //重写SQLiteOpenHelper的有参构造方法 public DBHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) { super(context, "my.db", null, 1); //第一个参数为Context对象,第二个参数为数据库名称,第三个设置为null,第四个为sql版本号 } @Override public void onCreate(SQLiteDatabase db) { //创建一张数据表并执行 String sql="create table person(id int,name varchar(10))"; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion{ } }
2:自定义一个javabean Person
public class Person { private String id; private String name; public Person(String id, String name) { this.id = id; this.name = name; } public Person() { } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
3:修改activity_main.xml文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <Button android:id="@+id/inserttButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="插入数据" android:textSize="16sp" /> <Button android:id="@+id/deletetButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="删除数据" android:textSize="16sp" /> <Button android:id="@+id/updateButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="修改数据" android:textSize="16sp" /> <Button android:id="@+id/querytButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="查询数据" android:textSize="16sp" /> </LinearLayout>
4:在MainActivity写
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button insertButton; private Button deletetButton; private Button updateButton; private Button queryButton; private SQLiteDatabase db; private DBHelper dbHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dbHelper = new DBHelper(MainActivity.this, "", null, 1); init(); } public void init() { insertButton = findViewById(R.id.inserttButton); deletetButton = findViewById(R.id.deletetButton); updateButton = findViewById(R.id.updateButton); queryButton = findViewById(R.id.querytButton); insertButton.setOnClickListener(this); deletetButton.setOnClickListener(this); updateButton.setOnClickListener(this); queryButton.setOnClickListener(this); } @Override public void onClick(View v) { db=dbHelper.getWritableDatabase(); switch (v.getId()) { //添加 case R.id.inserttButton: db = dbHelper.getWritableDatabase(); db.beginTransaction(); try{ db.execSQL("insert into person(id,name) values (?,?)", new String[]{"11", "黑夜"}); db.setTransactionSuccessful(); } finally { db.endTransaction(); } Toast.makeText(MainActivity.this, "数据插入成功!", Toast.LENGTH_LONG).show(); db.close(); break; //删除 case R.id.deletetButton: db = dbHelper.getWritableDatabase(); db.beginTransaction(); try{ db.execSQL("delete from person where name=?", new String[]{"黑夜"}); db.setTransactionSuccessful(); } finally { db.endTransaction(); } Toast.makeText(MainActivity.this, "删除成功!", Toast.LENGTH_LONG).show(); db.close(); break; //更新 case R.id.updateButton: db = dbHelper.getWritableDatabase(); db.beginTransaction(); try{ db.execSQL("update person set name=? where id=?", new String[]{"晓霞", "11"}); db.setTransactionSuccessful(); } finally { db.endTransaction(); } Toast.makeText(MainActivity.this, "修改成功!", Toast.LENGTH_LONG).show(); db.close(); break; //查询 case R.id.querytButton: db=dbHelper.getReadableDatabase(); Cursor cursor=db.rawQuery("select * from person where name=?",new String[]{"黑夜"}); ArrayList<Person> list=new ArrayList<>(); if (cursor!=null){ cursor.moveToFirst(); while(cursor.moveToNext()){ String id=cursor.getString(cursor.getColumnIndex("id")); String name=cursor.getString(cursor.getColumnIndex("name")); list.add(new Person(id,name)); } } cursor.close(); db.close(); System.out.println(list.toString()); Toast.makeText(MainActivity.this,list.toString(),Toast.LENGTH_LONG).show(); break; } } }
注意
在涉及到数据库的添加,修改,删除都要考虑到事务问题,可以参考下我的考虑流程:
//获取到数据库对象
try{
db.beginTransaction();//开启事务
try{db.endTransaction();
db.execSQL("sql语句");
db.setTransactionSuccessful();//标记事务成功
} finally{
db.endTransaction();//提交事务
db.close();//关闭数据库连接
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构