Android 数据库demo

Demo下载地址:http://download.csdn.net/detail/u011634756/5997835免积分哦
++++++++++++++++++++++++++++++++++++++++++++++++

一. Demo主要内容


1. SQLiteOpenHelper 和 数据库的增删改查

2. ListView 自定义显示数据库的内容(例如:给每一个item添加删除按钮)

注:Demo中有插入和删除按钮,长按是进行修改


二. Demo重点代码


1. SQLiteOpenHelper 的建立 和增删改查 和添加默认数据

首先 SQLiteOpenHelper 的建立创建一个类 来继承 SQLiteOpenHelper 它即可。

其次是数据库的增删改查实现,如下代码

[java]  view plain  copy
  1. /** 
  2.  * 往数据库里面插入数据  
  3.  * @param data 
  4.  * @return 
  5.  */  
  6. public long insertData(String data[]){        
  7.     ContentValues insertValues = new ContentValues();  
  8.     insertValues.put(KEY_NAME, data[0]);  
  9.     insertValues.put(KEY_SEX, data[1]);  
  10.     insertValues.put(KEY_ADDRESS,data[2]);  
  11.     return mSqLiteDatabase.insert(DB_TABLE, KEY_ID, insertValues) ;  
  12. }  
  13.   
  14. /** 
  15.  * 根据 _id 来删除数据库中的某一条数据 
  16.  * @param _id 
  17.  * @return 
  18.  */  
  19. public boolean deleteData(long _id){  
  20.     return mSqLiteDatabase.delete(DB_TABLE, KEY_ID + "=" + _id, null) > 0 ;  
  21. }  
  22.   
  23. /** 
  24.  * 通过_id 来更新某一条数据 
  25.  * @param _id 
  26.  * @param data 
  27.  * @return 
  28.  */  
  29. public boolean updateData( long _id ,String data[]){  
  30.     getWritableDatabase();  
  31.     ContentValues updataValues = new ContentValues();  
  32.     updataValues.put(KEY_NAME, data[0]);  
  33.     updataValues.put(KEY_SEX, data[1]);  
  34.     updataValues.put(KEY_ADDRESS,data[2]);  
  35.     return  mSqLiteDatabase.update(DB_TABLE, updataValues, KEY_ID + " = " + _id, null)>0;  
  36. }  
  37.   
  38. /** 
  39.  * 查询数据 , 当前的所有数据 
  40.  * @return 
  41.  */  
  42. public Cursor fetchAllData(){         
  43.     return mSqLiteDatabase.query(DB_TABLE, null , nullnullnullnullnull);  
  44. }  
  45.   
  46. /** 
  47.  * 通过Id来查询 当前id下的数据 
  48.  * @param _id 
  49.  * @return 
  50.  */  
  51. public Cursor fetchDataById(long _id){  
  52.     return mSqLiteDatabase.query(DB_TABLE, null ,KEY_ID + "=" + _id, nullnullnullnull);  
  53. }  

最后是往数据库添加默认数据,在onCreate 里面 创建表后立马就进行insert操作。

[java]  view plain  copy
  1. @Override  
  2. public void onCreate(SQLiteDatabase db) {  
  3.     db.execSQL(CREATE_DB);  
  4.     // 添加一些默认数据  
  5.     db.execSQL(TEST_INSERT);  
  6. }  

2.  ListView 显示数据库的内容

在显示数据库的时候,Android已经封装好了一个SimpleCursorAdapter可以直接使用,但是如果要自定一个界面(例如在界面中添加一个 删除按钮)我们就需要继承于CursorAdapter来实现我们自定义的布局。

继承CursorAdapter 主要会实现一个构造方法和一个newView和bindView 

[java]  view plain  copy
  1. public SqlAdapter(Context context, Cursor c, int layout) {  
  2.     super(context, c );  
  3.     res_layout = layout;  
  4. }  
  5.   
  6. @Override  
  7. public void bindView(View view, Context context, Cursor c) {  
  8.     Log.v(TAG," Adapter , bindView");  
  9.     final Context _context = context;  
  10.     final Cursor cursor = c;  
  11.     final ViewHolder holder = (ViewHolder) view.getTag();  
  12.     holder.id.setText(cursor.getString(cursor.getColumnIndex(KEY_ID)));  
  13.     holder.name.setText(cursor.getString(cursor.getColumnIndex(KEY_NAME)));  
  14.     holder.sex.setText(cursor.getString(cursor.getColumnIndex(KEY_SEX)));  
  15.     holder.address.setText(cursor.getString(cursor.getColumnIndex(KEY_ADDRESS)));  
  16.   
  17.     holder.removeButton.setOnClickListener(new Button.OnClickListener() {  
  18.   
  19.         @Override  
  20.         public void onClick(View v) {  
  21.             long id = Long.parseLong(holder.id.getText().toString());  
  22.   
  23.             SQLDemoOpenHelper mHelper = new SQLDemoOpenHelper(_context);  
  24.             mHelper.open();  
  25.             mHelper.deleteData(id);  
  26.             Cursor newCursor = mHelper.fetchAllData();  
  27.             changeCursor(newCursor);  
  28.             notifyDataSetChanged();  
  29.             mHelper.close();  
  30.   
  31.         }  
  32.     });  
  33. }  
  34.   
  35. /** 
  36.  * 说一个我理解的哈, newView相当于 Service的onCreate 
  37.  * 而bindView 相当于 Service的onStart  
  38.  * 2者的区别就很明显了 
  39.  */  
  40. @Override  
  41. public View newView(Context context, Cursor c, ViewGroup arg2) {  
  42.     Log.i(TAG," Adapter , newView");  
  43.     View view = View.inflate(context, res_layout, null);  
  44.     ViewHolder holder = new ViewHolder();  
  45.     holder.name = (TextView) view.findViewById(R.id.tv_item_name);  
  46.     holder.sex = (TextView) view.findViewById(R.id.tv_item_sex);  
  47.     holder.address = (TextView) view.findViewById(R.id.tv_item_address);  
  48.     holder.removeButton = (Button) view.findViewById(R.id.bu_remove);  
  49.     holder.id = new TextView(context);  
  50.     holder.id.setVisibility(View.INVISIBLE);  
  51.     view.setTag(holder);  
  52.     return view;  
  53. }  
  54.   
  55. /** 
  56.  * 通过一个隐藏的 TextView 来记住当前item对应数据库的 _id 
  57.  * 这个样子来实现 删除按钮时候的操作 
  58.  * @author yuhaiyang 
  59.  * 
  60.  */  
  61. final static class ViewHolder {  
  62.     public TextView id;  
  63.     public TextView name;  
  64.     public TextView sex;  
  65.     public TextView address;          
  66.     public Button removeButton;  
  67.   
  68. }  

下面我们说一下 实现那个删除按钮

在bindView里面的Cursor是每一个Item的Cursor所以我们可以获取当前Cursor的Id来删除,想法是好的但是现实是残酷的,问题来了,删除的时候不是删除的当前id而是别的Id ,通过观察发现获取的id是最后一次调用bindView的那个id,也就是说 这种方法是不可取的。 

那么我继续来观察一下,id获取这个是有问题的那么,我们现在的内容怎么没有混乱呀,这个我们可以利用这个东西进行白标记,即:使用建立一个隐藏的TextView来记录每一个Item的_id 然后在删除的时候获取这个id,立马行动发现真的可行哦

xx 代码上面已经贴出来了。。。。


三.效果图



====================关注小鱼===================

新浪微博http://weibo.com/AwareMissing

腾讯微博http://t.qq.com/y_haiyang


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Java连接MySQL数据库Android示例代码: 1. 添加MySQL驱动程序依赖项 在项目的build.gradle文件中添加以下依赖项: ``` dependencies { implementation 'mysql:mysql-connector-java:8.0.20' } ``` 2. 编写数据库连接代码 在Android应用程序中,连接MySQL数据库的步骤与普通Java应用程序相同。以下是一个简单的示例代码: ``` import java.sql.*; public class MySQLConnection { private static Connection conn = null; public static Connection getConnection() { if (conn != null) { return conn; } else { try { String driver = "com.mysql.cj.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/mydatabase"; String username = "root"; String password = "mypassword"; Class.forName(driver); conn = DriverManager.getConnection(url, username, password); } catch (Exception e) { e.printStackTrace(); } return conn; } } } ``` 在上面的代码中,getConnection()方法返回一个打开的数据库连接。驱动程序,URL,用户名和密码是连接数据库所需的必要参数。 3. 使用连接执行SQL查询 在连接到数据库后,您可以使用Connection对象执行SQL查询。以下是一个示例代码: ``` import java.sql.*; public class MySQLQuery { public static void main(String[] args) { try { Connection conn = MySQLConnection.getConnection(); String query = "SELECT * FROM mytable"; Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(query); while (rs.next()) { System.out.println(rs.getString("mycolumn")); } conn.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的代码中,我们从名为mytable的表中选择所有行,并打印名为mycolumn的列的值。您可以根据需要更改查询。请注意,我们在完成查询后手动关闭了连接。这是非常重要的,因为它会释放数据库资源并防止连接泄漏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值