精华内容
下载资源
问答
  • I'm trying to store a picture in sqlite3 table. I'm using python and sqlite3.Please let me know if you have a sample code or how to save a picture to a sqlite3 table.解决方案You can either encode it ...

    I'm trying to store a picture in sqlite3 table. I'm using python and sqlite3.

    Please let me know if you have a sample code or how to save a picture to a sqlite3 table.

    解决方案

    You can either encode it as a base64 string, like Yogesh mentioned, or try to store the binary.

    import sqlite3

    import base64

    conn = sqlite3.connect('example.db')

    c = conn.cursor()

    c.execute('''CREATE TABLE images (image text)''')

    # binary

    c.execute("INSERT INTO images VALUES ({})".format(sqlite3.Binary(file.read())))

    # base64

    c.execute("INSERT INTO images VALUES ({})".format(base64.b64encode(file.read())))

    conn.commit()

    conn.close()

    展开全文
  • iOS - SQLite 数据库存储

    2017-02-23 13:48:06
    原文地址:... iOS - SQLite 数据库存储 本文目录 1、SQLite 数据库2、iOS 自带 SQLite 的使用3、fmdb 的使用4、fmdb 多线程操作5、其他 SQLite 的第三方封装库 回到顶部 1、SQLite 数据库

    http://www.cnblogs.com/QianChia/p/6218993.html 点击打开链接


    1、SQLite 数据库

    • SQLite 是一种轻型的嵌入式数据库,安卓和 iOS 开发使用的都是 SQLite 数据库。它占用资源非常低,在嵌入式设备中,可能需要几百 K 的内存数据就够了。他的处理速度比 Mysql、PostgreSQL 这两款著名的数据库都要快。数据库的存储和 Excel 很像,以表(table)为单位。表由多个字段(列、属性、column)组成,表里面的每一行数据称为记录。数据库操作包含打开数据库、创建表,表的增、删、改、查。

    • SQL(Structured Query Language)结构化查询语言,SQL 是一种对数据库中的数据进行定义和操作的语言。使用 SQL 语言编写出来的句子/代码叫 SQL 语句,在程序运行过程中,想要操作(增删改查,CRUD)数据库中的数据,必须使用 SQL 语句。SQL 语句不区分大小写,每句语句都必须以分号结尾。

    • SQL 中常用的关键字有 select、insert、update、delete、from、create、where、desc、orderby、table,数据库中不可以使用关键字来命名表、字段。SQL 语句中用 ?来作为占位符,不管字段是何种类型。

    • SQLite 语句的种类:
      • 数据定义语句(DDL:Data Definition Language):包括 create 和 drop 等操作,在数据库中创建新表或删除表(create table 或 drop table)。
      • 数据操作语句(DML:Data Manipulation Language):包括 insert、update、delete 等操作,上面的三种操作分别用于添加、修改、删除表中的数据。
      • 数据查询语句(DQL:Data Query Language):可以用于查询获得表中的数据,关键字 select 是 SQL(也是所有 SQL)用的最多的操作,其他 DQL 常用的关键字有 where、order by、group by 和 having。
    • 注意:写入数据库,字符串可以采用 char 方式,而从数据库中取出 char 类型,当 char 类型有表示中文字符时,会出现乱码。这是因为数据库默认使用 ASCII 编码方式。所以要想正确从数据库中取出中文,需要用 NSString 来接收从数据库取出的字符串。

    • SQLite 操作方法

    sqlite3 *db 数据库句柄,跟文件句柄很类似  

    sqlite3_stmt *stmt 这个相当于 ODBC 的 Command 对象,用于保存编译好的 SQL 语句  

    sqlite3_open() 打开数据库,没有数据库时创建。  

    sqlite3_exec() 执行非查询的 sql 语句  

    sqlite3_prepare_v2 执行查询的 sql 语句  

    Sqlite3_step() 在调用 

    sqlite3_prepare 后,使用这个函数在记录集中移动。  

    sqlite3_free() 清空变量  

    Sqlite3_close() 关闭数据库文件 还有一系列的函数,用于从记录集字段中获取数据,如:  

    sqlite3_column_text() 取 text 类型的数据。  

    sqlite3_column_blob() 取 blob 类型的数据  

    sqlite3_column_int() 取 int 类型的数据


    SQLite 命令行

    .help :帮助 .quit :退出 .database:列出数据库信息 .dump :查看所有的 sql 语句 .schema :查看表结构 .tables :显示所有的表


    SQL 语句常用数据类型

    (1)整型:

    bigint :整形数据,大小为 8 个字节
    integer :整形数据,大小为 4 个字节
    smallint:整形数据,大小为 2 个字节
    tinyint :从 0 到 255 的整形数据,存储大小为 1 字节

    (2)浮点型:

    float :4 字节浮点数
    double:8 字节浮点数
    real :8 字节浮点数

    (3)字符型:

    char(n) :n 长度的字串,n 不能超过 254
    varchar(n):长度不固定且其长度为 n 的字串,n 不能超过 4000
    text :text 存储可变长度的非 unicode 数据,存放比 varchar 更大的字符串

    注意事项:

    尽量用 varchar
    超过 255 字节的只能用 varchar 或 text
    能用 varchar 的地方不用 text

    SQLite 字符串区别:

    char 存储定长数据很方便,char 字段上的索引效率极高,比如定义 char(10),那么不论你存储的数据是否达到了 10 个字节,都要占去 10 个字节的空间,不足的自动用空格填充。
    varchar 存储变长数据,但存储效率没有 char 高,如果一个字段可能的值是不固定长度的,我们只知道它不可能超过 10 个 > 字符,把它定义为 varchar(10) 是最合算的,varchar 类型的实际长度是它的值的实际长度 +1,为什么 +1 呢 ?这个字节用于保存实际使用了多大的长度。因此,从空间上考虑,用 varchar 合适,从效率上考虑,用 char 合适,关键是根据情况找到权衡点。
    text 存储可变长度的非 Unicode 数据,最大长度为 2^31-1(2147483647)个字符。

    (4)日期类型:

    date :包含了年份,月份,日期
    time :包含了小时,分钟,秒
    datetime :包含了年,月,日,时,分,秒
    timestamp:包含了年,月,日,时,分,秒,千分之一秒

    注意:datetime 包含日期时间格式,必须写成 ‘2010-08-05’不能写为‘2010-8-5’,否则在读取时会产生错误。

    (5)其他类型:

    null :空值
    blob :二进制对象,主要用来存放图片和声音文件等
    default :缺省值
    primary key :主键值
    autoincrement:主键自动增长

    (6)什么是主键:

    primary key,主键就是一个表中,有一个字段,里面的内容不可以重复,一般一个表都需要设置一个主键,autoincrement 让主键自动增长。

    (7)注意事项:

    所有字符串必须要加 ‘ ’ 单引号
    整数和浮点数不用加 ‘ ’
    日期需要加单引号 ‘ ’
    字段顺序没有关系,关键是 key 与 value 要对应
    对于自动增长的主键不需要插入字段


    简单基本的 SQL 语句

    (1) 数据记录筛选:

    sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]"
    sql="select * from 数据表 where 字段名 like '%字段值%' order by 字段名 [desc]"
    sql="select top 10 * from 数据表 where 字段名=字段值 order by 字段名 [desc]"
    sql="select top 10 * from 数据表 order by 字段名 [desc]"
    sql="select * from 数据表 where 字段名 in ('值1','值2','值3')"
    sql="select * from 数据表 where 字段名 between 值1 and 值2"

    (2) 更新数据记录:
      
    sql="update 数据表 set 字段名=字段值 where 条件表达式"
    sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式"

    (3) 删除数据记录:
      
    sql="delete from 数据表 where 条件表达式"
    sql="delete from 数据表" (将数据表所有记录删除)

    (4) 添加数据记录:
      
    sql="insert into 数据表 (字段1,字段2,字段3 …) values (值1,值2,值3 …)"
    sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表)

    (5) 数据记录统计函数:
      
    AVG(字段名) 得出一个表格栏平均值
    COUNT(*;字段名) 对数据行数的统计或对某一栏有值的数据行数统计
    MAX(字段名) 取得一个表格栏最大的值
    MIN(字段名) 取得一个表格栏最小的值
    SUM(字段名) 把数据栏的值相加
      
    引用以上函数的方法:
      
    sql="select sum(字段名) as 别名 from 数据表 where 条件表达式"
      
    //set rs=conn.excute(sql)
    用 rs("别名") 获取统计的值,其它函数运用同上。
      
    查询去除重复值:select distinct * from table1
      
    (6) 数据表的建立和删除:
      
      CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… )


    2、iOS 自带 SQLite 的使用

    • 1、环境配置

      • 在 TARGETS => Build Phases => Link Binary With Libraries => 中添加:libsqlite3.0.tbd

        SQLite1



    2、使用

     1 . 添加头文件:

    2. 配置数据库路径

    // 设置数据库文件路径
    NSString *databaseFilePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
    NSUserDomainMask,
    YES).lastObject
    stringByAppendingPathComponent:@"mydb.sqlite"];

    // 创建数据库句柄
    sqlite3 *db;

    // 错误记录
    char *error;

    3、打开数据库

    // 数据库文件不存在时,自动创建文件

    if (sqlite3_open([databaseFilePath UTF8String], &db) == SQLITE_OK) {

    NSLog(@"sqlite dadabase is opened.");
    } else {

    NSLog(@"sqlite dadabase open fail.");
    }


    4、创建数据表

    /*
    sql 语句,专门用来操作数据库的语句。
    create table if not exists 是固定的,如果表不存在就创建。
    myTable() 表示一个表,myTable 是表名,小括号里是字段信息。
    字段之间用逗号隔开,每一个字段的第一个单词是字段名,第二个单词是数据类型,primary key 代表主键,autoincrement 是自增。
    */

    // create table if not exists 表名(主键名 主键类型 primary key autoincrement, 键名 键类型, 键名 键类型, ...)
    NSString *createSql = @"create table if not exists myTable(id integer primary key autoincrement, name text, age integer, address text)";

    if (sqlite3_exec(db, [createSql UTF8String], NULL, NULL, &error) == SQLITE_OK) {

    NSLog(@"create table is ok.");
    } else {

    NSLog(@"error: %s", error);

    // 每次使用完毕清空 error 字符串,提供给下一次使用
    sqlite3_free(error);
    }


    5、插入记录

    // insert into 表名(键名, 键名, ...) values('键值', '键值', '...')
    NSString *insertSql = @"insert into myTable(name, age, address) values('小新', '8', '东城区')";

    if (sqlite3_exec(db, [insertSql UTF8String], NULL, NULL, &error) == SQLITE_OK) {

    NSLog(@"insert operation is ok.");
    } else {

    NSLog(@"error: %s", error);

    // 每次使用完毕清空 error 字符串,提供给下一次使用
    sqlite3_free(error);
    }

    6、删除记录

    // delete from 表名 查询条件(where id = 2)
    NSString *deleteSql = @"delete from myTable where id = 2";

    if (sqlite3_exec(db, [deleteSql UTF8String], NULL, NULL, &error) == SQLITE_OK) {

    NSLog(@"delete operation is ok.");
    } else {

    NSLog(@"error: %s", error);

    // 每次使用完毕清空 error 字符串,提供给下一次使用
    sqlite3_free(error);
    }

    7、修改记录

    // update 表名 set 键名 = '键值', 键名 = '键值', ... 查询条件(where id = 3)
    NSString *updateSql = @"update myTable set name = '小白', age = '10', address = '西城区' where id = 3";

    if (sqlite3_exec(db, [updateSql UTF8String], NULL, NULL, &error) == SQLITE_OK) {

    NSLog(@"update operation is ok.");
    } else {

    NSLog(@"error: %s", error);

    // 每次使用完毕清空 error 字符串,提供给下一次使用
    sqlite3_free(error);
    }

    8、查询记录

    sqlite3_stmt *statement;

    // select 键名, 键名, ... from 表名,select * from 表名:查询所有 key 值内容
    NSString *selectSql = @"select id, name, age, address from myTable";

    if (sqlite3_prepare_v2(db, [selectSql UTF8String], -1, &statement, nil) == SQLITE_OK) {

    while(sqlite3_step(statement) == SQLITE_ROW) {

    // 查询 id 的值
    int _id = sqlite3_column_int(statement, 0);

    // 查询 name 的值
    NSString *name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)];

    // 查询 age
    int age = sqlite3_column_int(statement, 2);

    // 查询 address 的值
    NSString *address = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 3)];

    NSLog(@"id: %i, name: %@, age: %i, address: %@", _id, name, age, address);
    }
    } else {
    NSLog(@"select operation is fail.");
    }

    sqlite3_finalize(statement);

    9、关闭数据库

    if (sqlite3_close(db) == SQLITE_OK) {

    NSLog(@"sqlite dadabase is closed.");
    } else {

    NSLog(@"sqlite dadabase close fail.");
    }


    展开全文
  • 2、将图像数据转换二进制写入数据库ContentValues values = new ContentValues();final ByteArrayOutputStream os = new ByteArrayOutputStream();bmp.compress(Bitmap.CompressFormat.PNG, 100, os);values.put...

    1、HttpConnect获取图片数据;

    2、将图像数据转换二进制写入数据库

    ContentValues values = new ContentValues();

    final ByteArrayOutputStream os = new ByteArrayOutputStream();

    bmp.compress(Bitmap.CompressFormat.PNG, 100, os);

    values.put("express_img", os.toByteArray());

    values.put("express_name","zf");

    values.put("express_no","zf");

    getContentResolver().insert("express", values);

    3、从SQLite中读取Bitmap

    byte[] in=cur.getBlob(cur.getColumnIndex("express_img"));

    bmpout=BitmapFactory.decodeByteArray(in,0,in.length);

    4、 显示在ImageView上

    ImageView imageView = (ImageView) view.findViewById(R.id.img);

    ByteArrayInputStream stream = new ByteArrayInputStream(cur.getBlob(cur.getColumnIndex("express_img")));

    imageView.setImageDrawable(Drawable.createFromStream(stream, "img"));

    展开全文
  • 案例————商品展示(SQLite数据库存储
                         案例————商品展示(SQLite数据库存储)
          1.创建程序
     首先创建一个名为 “商品展示 ” 的应用程序,设计用户交互界面:
      “商品展示” 程序对应的布局文件(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"
    android:layout_margin="8dp"
    tools:context="cn.edu.bzu.productdisplay.MainActivity">
    <LinearLayout
    android:id="@+id/addLL"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <EditText
    android:id="@+id/nameET"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:hint="商品名称"
    android:inputType="textPersonName"/>
    <EditText
    android:id="@+id/balanceET"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:hint="金额"
    android:inputType="number"/>
    <ImageView
    android:onClick="add"
    android:id="@+id/addIV"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:srcCompat="@android:drawable/ic_input_add"/>
    </LinearLayout>
    <ListView
    android:id="@+id/accountLV"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@id/addLL"
    >

    </ListView>
    </LinearLayout>
    ————————————————————————————————————————————————
    2.创建ListView Item 布局
    在res/layout 目录下创建一个item.xml文件,编写如图1所示界面。
    item.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"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="10dp">

    <TextView
    android:id="@+id/idTV"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="13"
    android:textColor="#000000"
    android:textSize="20sp" />

    <TextView
    android:id="@+id/nameTV"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="2"
    android:singleLine="true"
    android:text="PQ"
    android:textColor="#000000"
    android:textSize="20sp" />

    <TextView
    android:id="@+id/balanceTV"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="2"
    android:singleLine="true"
    android:text="12345"
    android:textColor="#000000"
    android:textSize="20sp" />


    <LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <ImageView
    android:id="@+id/upIV"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="2dp"
    app:srcCompat="@android:drawable/arrow_up_float" />

    <ImageView
    android:id="@+id/downIV"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:srcCompat="@android:drawable/arrow_down_float" />

    </LinearLayout>
    <ImageView
    android:id="@+id/deleteIV"
    android:layout_width="25dp"
    android:layout_height="25dp"
    android:src="@android:drawable/ic_menu_delete"/>
    </LinearLayout>
    图一

    _____________________________________________________________________________________________


    3.创建数据库

    创建一个名为dao的包,并在该包下定义一个MyHelper类继承自SQLiteOpenHelper,创建数据库的代码如下:


    public class MyHelper extends SQLiteOpenHelper {
    public MyHelper(Context context){
    super(context,"itcast.db",null,2);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
    System.out.println("onCreate");
    db.execSQL("CREATE TABLE account(_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(20),balance INTEGER)");
    }
    public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
    System.out.println("onUpgrade");
    }
    }

    _______________________________________________________________________________________________

    4.创建Account类


    为了操作方便,创建一个Bean包用于存放Javabean类,该类具体代码如下:

    public class Account {
    private Long id;
    private String name;
    private Integer balance;

    public Long getId() {
    return id;
    }

    public void setId(Long id) {
    this.id = id;
    }

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    public Integer getBalance() {
    return balance;
    }

    public void setBalance(Integer balance) {
    this.balance = balance;
    }

    public Account(Long id, String name, Integer balance) {
    super();
    this.id = id;
    this.name = name;
    this.balance = balance;
    }

    public Account(String name, Integer balance) {
    super();
    this.name = name;
    this.balance = balance;
    }

    public Account() {
    super();
    }

    public String toString() {
    return "[序号:" + id + ",商品名称:" + name + ",余额:" + balance + "]";
    }
    }


    ________________________________________________________________________________________________________________________

    5.创建数据操作逻辑类

    在dao包下创建一个AccountDao类用于操作数据,具体代码如下所示:

    public class AccountDao {
    private MyHelper helper;
    public AccountDao(Context context){
    //创建dao时,创建Helper;
           helper =new MyHelper(context);
    }
    public void insert(Account account){
    //创建数据库对象
           SQLiteDatabase db=helper.getWritableDatabase();
    //用来装载要插入的数据的Map<列名,列的值>
           ContentValues values=new ContentValues();
    values.put("name",account.getName());
    values.put("balance",account.getBalance());
    long id =db.insert("account",null,values);
    account.setId(id);       //得到id
           db.close();         //关闭数据库

       }
    //根据id删除数据
       public int delete(long id){
    SQLiteDatabase db=helper.getWritableDatabase();
    //按条件删除指定表中的数据,返回受影响的行数
           int count=db.delete("account","_id=?",new String[]{id+""});
    db.close();
    return count;
    }
    //更新数据
       public int update(Account account){
    SQLiteDatabase db=helper.getWritableDatabase();
    ContentValues values=new ContentValues();      //要修改 的数据
    values.put("name",account.getName());
    values.put("balance",account.getBalance());
    int count=db.update("account",values,"_id=?",new String[]{account.getId()+""});   //更新并得到行数
    db.close();
    return count;
    }
    //查询所有数据倒序排列
       public List<Account> queryAll(){
    SQLiteDatabase db=helper.getWritableDatabase();
    Cursor c=db.query("account",null,null,null,null,null,"balance DESC");
    List<Account>list=new ArrayList<Account>();
    while (c.moveToNext()){
    //可以根据列名获取索引
               long id=c.getLong(c.getColumnIndex("_id"));
    String name=c.getString(1);
    int balance=c.getInt(2);
    list.add(new Account(id,name,balance));
    }
    c.close();
    db.close();
    return list;
    }
    }

    ___________________
    ________________________________________________________________________________________________________


    6.编写界面交互代码(MainActivity)

    数据库的操作完成之后需要界面与数据库进行交互,用于实现将数据库中的数据以ListView的形式展示在界面上,具体代码如下:


    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.BaseAdapter;
    import android.widget.EditText;
    import android.widget.ImageView;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import java.util.List;
    
    import cn.edu.bzu.myapplication.bean.Account;
    import cn.edu.bzu.myapplication.dao.AccountDao;
    
    public class MainActivity extends AppCompatActivity {
        //需要适配的数据集合
        private List<Account> list;
        //数据库增删改查操作类
        private AccountDao dao;
        //输入姓名的EditText
        private EditText nameET;
        //输入金额的EditText
        private EditText balanceET;
        //适配器
        private MyAdapter adapter;
        //ListView
        private ListView accountLV;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //初始化控件
            initView();
            dao = new AccountDao(this);
            //从数据库查询出所有数据
            list = dao.queryAll();
            adapter = new MyAdapter();
            accountLV.setAdapter(adapter);   //给ListView添加适配器(自动把数据生成条目)
        }
    
        //初始化控件
        private void initView() {
            accountLV = (ListView) findViewById(R.id.accountLV);
            nameET = (EditText) findViewById(R.id.nameET);
            balanceET = (EditText) findViewById(R.id.balanceET);
            //添加监听器,监听条目点击事件
            accountLV.setOnItemClickListener(new MyOnItemClickListener());
        }
    
        //activity_main.xml 对应 ImageView的点击事件触发的方法
        public void add(View v) {
            String name = nameET.getText().toString().trim();
            String balance = balanceET.getText().toString().trim();
            //三目运算 balance.equals("")则等于0
            //如果balance不是空字符串 则进行类型转换
            Account a = new Account(name, balance.equals("") ? 0 : Integer.parseInt(balance));
            dao.insert(a);      //插入数据库
            list.add(a);         //插入集合
            adapter.notifyDataSetChanged();          //刷新界面
            //选中最后一个
            accountLV.setSelection(accountLV.getCount() - 1);
            nameET.setText("");
            balanceET.setText("");
        }
        //自定义一个适配器(把数据装到ListView的工具)
    
        private class MyAdapter extends BaseAdapter {
            public int getCount() {            //获取条目总数
                return list.size();
            }
    
            public Object getItem(int position) {           //根据位置获取对象
                return list.get(position);
            }
    
            public long getItemId(int position) {          //根据位置获取id
                return position;
            }
            //获取一个条目视图
    
            public View getView(int position, View convertView, ViewGroup parent) {
                //重用convertView
                View item = convertView != null ? convertView : View.inflate(getApplicationContext(), R.layout.item, null);
                //获取 该视图中的TextView
                TextView idTV = (TextView) item.findViewById(R.id.idTV);
                TextView nameTV = (TextView) item.findViewById(R.id.nameTV);
                //根据当前位置获取Account对象
                TextView balanceTV = (TextView) item.findViewById(R.id.balanceTV);
                //把Account对象中的数据放到TextView中
                final Account a = list.get(position);
                idTV.setText(a.getId() + "");
                nameTV.setText(a.getName());
                balanceTV.setText(a.getBalance() + "");
                ImageView upIV = (ImageView) item.findViewById(R.id.upIV);
                ImageView downIV = (ImageView) item.findViewById(R.id.downIV);
                ImageView deleteIV = (ImageView) item.findViewById(R.id.deleteIV);
                //向上箭头的点击事件触发的方法
                upIV.setOnClickListener(new View.OnClickListener() {
    
                    public void onClick(View v) {
                        a.setBalance(a.getBalance() + 1);    //修改值
                        notifyDataSetChanged();            //刷新界面
                        dao.update(a);              //更新数据库
                    }
                });
                //向下箭头的点击事件触发的方法
                downIV.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        a.setBalance(a.getBalance() - 1);
                        notifyDataSetChanged();
                        dao.update(a);
                    }
                });
                //删除图片的点击事件触发的方法
                deleteIV.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        //删除数据之前首先弹出一个对话框
                        android.content.DialogInterface.OnClickListener listener = new android.content.DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                list.remove(a);          //从集合中删除
                                dao.delete(a.getId());          //从数据库中删除
                                notifyDataSetChanged();               //刷新界面
                            }
                        };
                        //创建对话框
                        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                        builder.setTitle("确定要删除吗?");   //设置标题
                        //设置确定按钮的文本以及监听器
                        builder.setPositiveButton("确定", listener);
                        builder.setNegativeButton("取消", null);   //设置取消按钮
                        builder.show();  //显示对话框
                    }
                });
                return item;
            }
        }
        //ListView 的 Item 点击事件
    
        private class MyOnItemClickListener implements AdapterView.OnItemClickListener {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //获取点击位置上的数据
                Account a = (Account) parent.getItemAtPosition(position);
                Toast.makeText(getApplicationContext(), a.toString(), Toast.LENGTH_SHORT).show();
            }
        }
    }
    
    
    7.运行界面展示商品






    展开全文
  • 本文目录 1、SQLite 数据库 2、iOS 自带 SQLite 的...SQLite 是一种轻型的嵌入式数据库,安卓和 iOS 开发使用的都是 SQLite 数据库。它占用资源非常低,在嵌入式设备中,可能需要几百 K 的内存数据就够了。他的...
  • Androidsqlite数据库存取图片信息存储图片:bitmapprivate byte[] getIconData(Bitmap bitmap){int size = bitmap.getWidth()*bitmap.getHeight()*4;ByteArrayOutputStream out = new ByteArrayOutputStream(size);...
  • > 最近在测试项目是否可以采用SQLite数据库来做DB,昨天跑了一晚上程序,向单表 写入了2075981(两百万)条数据,总占用空间2,147,483,648byte(2G),然后就不能插入数据。 # 驱动返回异常 ![图片说明]...
  • 自己看 WPF 加密记事本存储图片-sqlite数据库
  • Androidsqlite数据库存取图片信息 存储图片:bitmap private byte[] getIconData(Bitmap bitmap){ int size = bitmap.getWidth()*bitmap.getHeight()*4; ByteArrayOutputStream out = new ...
  • 【python3】 sqlite3操作SQLite数据库存取图片1.背景2.code3.运行结果 1.背景 SQLite 原生支持如下的类型: NULL,INTEGER,REAL,TEXT,BLOB。 因此可以将以下Python类型发送到SQLite而不会出现任何问题: 这是...
  • sqlite数据库存取图片信息。 存储图片:bitmap private byte[] getIconData(Bitmap bitmap){ int size = bitmap.getWidth()*bitmap.getHeight()*4; ByteArrayOutputStream out = new ...
  • sqlite数据库存取图片信息。 存储图片:bitmap [code="java"]private byte[] getIconData(Bitmap bitmap){ int size = bitmap.getWidth()*bitmap.getHeight()*4; ByteArrayOutputStream out =...
  • 在iOS下用sqlite数据库存储图片,先把你的图片转换成 NSData 形式,然后在数据库添加一行 blob 数据 假定数据库中存在表 test_table(name,image), 下面代码将图片文件test.png的二进制数据写到sqlite数据库: 例...
  • iOS sqlite数据库插入和读取图片数据

    千次阅读 2013-11-27 02:33:44
    在iOS下用sqlite数据库存储图片,先把你的图片转换成 NSData 形式,然后在数据库添加一行 blob 数据 假定数据库中存在表 test_table(name,image), 下面代码将图片文件test.png的二进制数据写到sqlite数据库: 01...
  • SQLite数据库

    2019-09-01 11:10:24
    偶尔会使用sqlite数据库,不是经常用,但用的时候,总是想不全命令,所以写下这篇算是笔记吧!以后方便复习和使用sqlite数据库。 sqlite可视化相关软件参考地址: ... linux下安装sqlite3 ...在线安装:sudo apt-get ...
  • 数据库sqlite 存储图片

    2013-07-08 17:16:00
    SQLite可以存储 BLOB(binary large object,二进制大对象)格式数据,利用它可以在安卓应用开发中存储图片资源。 这里先讲下,怎样把数据从数据库中取出,并显示在imagView中。 代码如下: private ImageView ...
  • 文件存储 SharePreferences存储 SQLite数据库存储 Android操控数据库的方法 sqlite数据库-insert、update、query、delete操作
  • 在iOS下用sqlite数据库存储图片,先把你的图片转换成 NSData 形式,然后在数据库添加一行 blob 数据 假定数据库中存在表 test_table(name,image), 下面代码将图片文件test.png的二进制数据写到sqlite数据库: ...
  • 前面我们介绍了Android数据存储的两种方法:文件存储和SharedPreference存储,这一篇我们来学习一下Android存储数据的另外一种方式——SQLite数据库存储。1、SQlite数据库简介 现在的主流移动智能设备中,比如...
  • //向数据库中插入图片 $db = new PDO("sqlite:D:/WWW/smarthome/db/serverdatabase"); //获取文件2进制流 $filename = "d:/a.gif"; $handle = fopen($filename, "r"); $contents = fread($handle,filesize($

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,135
精华内容 9,254
关键字:

sqlite数据库存储图片