(原创)写篇手动编写的原生数据库的增删查改的demo

效果图:



1、创建数据库

<pre name="code" class="java">import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;

/**
 * 创建p2p.db数据库文件,并创建p2pParamsTable表
 *
 * @author zhou
 * @since 2016-08-09
 */
public class P2PHelper extends SQLiteOpenHelper {
    private static final AtomicReference<P2PHelper> arHelper = new AtomicReference<>();
    private AtomicInteger mOpenCounter = new AtomicInteger();
    private SQLiteDatabase mWriteDatabase;

    public static P2PHelper instance(Context context) {
        for (; ; ) {
            P2PHelper mHelper = arHelper.get();
            if (mHelper != null) {
                return mHelper;
            }
            mHelper = new P2PHelper(context);
            if (arHelper.compareAndSet(null, mHelper)) {
                return mHelper;
            }
        }
    }

    private P2PHelper(Context context) {
        super(context, "p2p.db", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table  if not exists params_table (_id integer primary key autoincrement,fileId varchar" +
                ",trackIp varchar,trackId integer,trackPort integer,path varchar" +
                ",noData integer,shareTime integer,size integer,timeout integer,fileMD5 varchar)");
    }

    /**
     * 数据库版本发生变化的回调方法
     *
     * @param db
     * @param oldVersion
     * @param newVersion
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists params_table;");
        onCreate(db);
    }

    /**
     * 同步获取数据库写入操作类
     *
     * @return
     */
    public synchronized SQLiteDatabase getWriteDatabase() {
        if (mOpenCounter.incrementAndGet() == 1) {
            mWriteDatabase = getWritableDatabase();
            mWriteDatabase.enableWriteAheadLogging();
        }
        return mWriteDatabase;
    }

    /**
     * 关闭数据库写入操作类
     */
    public synchronized void closeWriteDatabase() {
        if (mOpenCounter.decrementAndGet() == 0) {
            mWriteDatabase.close();

        }
    }
}


 

2、实现增删查改的dao

<pre name="code" class="java">import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.vsoontech.p2p.P2PParams;

import java.util.ArrayList;
import java.util.List;

/**
 * 数据库dao
 *
 * @author zhou
 * @since 2016-08-09
 */
public class P2PParamsDao {
    private P2PHelper helper;

    public P2PParamsDao(Context context) {
        helper = P2PHelper.instance(context);
    }

    /**
     * 添加数据
     *
     * @param p2PParams
     * @return
     */
    public synchronized long add(P2PParams p2PParams) {
        SQLiteDatabase db = helper.getWriteDatabase();
        ContentValues values = new ContentValues();
        values.put("fileId", p2PParams.fileId);
        values.put("trackIp", p2PParams.trackIp);
        values.put("trackId", p2PParams.trackId);
        values.put("trackPort", p2PParams.trackPort);
        values.put("path", p2PParams.path);
        values.put("noData", p2PParams.noData);
        values.put("shareTime", p2PParams.shareTime);
        values.put("size", p2PParams.size);
        values.put("timeout", p2PParams.timeout);
        values.put("fileMD5", p2PParams.fileMD5);
        long rowID = db.insert("params_table", null, values);
        helper.closeWriteDatabase();
        return rowID;
    }

    /**
     * 判断是否数据已经存在
     *
     * @param fileId
     * @return
     */
    public synchronized boolean isFileIdExist(String fileId) {
        boolean result = false;
        SQLiteDatabase db = helper.getReadableDatabase();
        Cursor cursor = db.query("params_table", null, "fileId=?", new String[]{fileId}, null, null, null);
        if (cursor.moveToNext()) {
            result = true;
        }
        if (!cursor.isClosed())
            cursor.close();
        db.close();
        return result;
    }

    /**
     * 通过fileId删除相应的数据
     *
     * @param fileId
     * @return
     */
    public synchronized boolean delete(String fileId) {
        try {
            SQLiteDatabase db = helper.getWriteDatabase();
            int result = db.delete("params_table", "fileId=?", new String[]{fileId});
            helper.closeWriteDatabase();
            if (result > 0) {
                return true;
            } else {
                return false;
            }
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 通过fileId更新数据
     *
     * @param p2PParams
     * @return
     */
    public synchronized boolean update(P2PParams p2PParams) {
        try {
            SQLiteDatabase db = helper.getWriteDatabase();
            ContentValues values = new ContentValues();
            values.put("trackIp", p2PParams.trackIp);
            values.put("trackId", p2PParams.trackId);
            values.put("trackPort", p2PParams.trackPort);
            values.put("path", p2PParams.path);
            values.put("noData", p2PParams.noData);
            values.put("shareTime", p2PParams.shareTime);
            values.put("size", p2PParams.size);
            values.put("timeout", p2PParams.timeout);
            int result = db.update("params_table", values, "fileId=?", new String[]{p2PParams.fileId});
            helper.closeWriteDatabase();
            if (result > 0) {
                return true;
            } else {
                return false;
            }

        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 通过fileId查询单条数据
     *
     * @param fileId
     * @return
     */
    public synchronized P2PParams query(String fileId) {
        P2PParams pParams = null;
        try {
            SQLiteDatabase db = helper.getReadableDatabase();
            Cursor cursor = db.query("params_table", null, "fileId=?", new String[]{fileId}, null, null, null);
            if (cursor.moveToNext() && !cursor.isClosed()) {
                pParams = new P2PParams();
                pParams.fileId = cursor.getString(1);
                pParams.trackIp = cursor.getString(2);
                pParams.trackId = cursor.getInt(3);
                pParams.trackPort = cursor.getInt(4);
                pParams.path = cursor.getString(5);
                pParams.noData = cursor.getInt(6);
                pParams.shareTime = cursor.getInt(7);
                pParams.size = cursor.getInt(8);
                pParams.timeout = cursor.getInt(9);
                pParams.fileMD5 = cursor.getString(10);
            }
            if (!cursor.isClosed())
                cursor.close();
            db.close();
        } catch (Exception e) {

        }
        return pParams;
    }

    /**
     * 查询所有数据
     *
     * @return
     */
    public synchronized List<P2PParams> queryAll() {
        List<P2PParams> p2PParamsList = new ArrayList<>();
        try {
            SQLiteDatabase db = helper.getReadableDatabase();
            Cursor cursor = db.query("params_table", new String[]{"_id", "fileId", "trackIp", "trackId", "trackPort"
                    , "path", "noData", "shareTime", "size", "timeout", "fileMD5"}, null, null, null, null, null);
            while (cursor.moveToNext() && !cursor.isClosed()) {
                P2PParams pParams = new P2PParams();
                pParams.fileId = cursor.getString(1);
                pParams.trackIp = cursor.getString(2);
                pParams.trackId = cursor.getInt(3);
                pParams.trackPort = cursor.getInt(4);
                pParams.path = cursor.getString(5);
                pParams.noData = cursor.getInt(6);
                pParams.shareTime = cursor.getInt(7);
                pParams.size = cursor.getInt(8);
                pParams.timeout = cursor.getInt(9);
                pParams.fileMD5 = cursor.getString(10);
                p2PParamsList.add(pParams);
            }
            if (!cursor.isClosed())
                cursor.close();
            db.close();
        } catch (Exception e) {

        }
        return p2PParamsList;
    }

    /**
     * 清除表
     */
    public synchronized void clearTable(String table) {
        String sql = "delete from " + table + ";";
        SQLiteDatabase db = helper.getReadableDatabase();
        db.execSQL(sql);
        revertSeq(table);
        db.close();
    }

    private void revertSeq(String table) {
        String sql = "update sqLite_sequence set seq=0 where name='" + table + "'";
        SQLiteDatabase db = helper.getWriteDatabase();
        db.execSQL(sql);
        helper.closeWriteDatabase();
    }
}


 

 

3、调用mainActivity

<pre name="code" class="java">package com.example.lainanzhou.databasedemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;

import com.example.lainanzhou.databasedemo.db.dao.DatabaseDao;

public class MainActivity extends AppCompatActivity {
    private DatabaseDao mDatabaseDao;
    private int i;
    private final String TAG = this.getClass().getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mDatabaseDao = new DatabaseDao(this);
    }

    //添加一条数据
    public void add(View v) {
        i += 1;
        Log.d(TAG, "" + mDatabaseDao.add("joker" + i, i));
    }

    //更新数据
    public void update(View v) {
        Log.d(TAG, "" + mDatabaseDao.update("joker" + i, i + 100));
    }

    public void query(View v) {
        Log.d(TAG, "" + mDatabaseDao.getUserMoney("joker" + i));
    }

    public void queryAll(View view) {
        Log.d(TAG, "" + mDatabaseDao.findAllUser());
    }

    public void delete(View view) {
        Log.d(TAG, "" + mDatabaseDao.delete("joker" + i));
    }

    public void deleteAll(View view) {
        mDatabaseDao.clearTable();
    }

}

 

xml布局文件

<pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.lainanzhou.databasedemo.MainActivity">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="add"
        android:text="添加数据"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="update"
        android:text="更新数据"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="query"
        android:text="查询一条数据"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="queryAll"
        android:text="查询所有数据"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="delete"
        android:text="删除一条数据"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="deleteAll"
        android:text="删除所有数据"/>
</LinearLayout>


 

附带源码下载地址:



### 回答1: WinForm是.NET Framework下的一种GUI应用程序开发框架,SQLite是一种轻量级的嵌入式数据库引擎。使用WinForm结合SQLite实现增删查改操作可以通过以下步骤实现: 1. 引入SQLite的相关命名空间和引用 在WinForm项目中,首先需要添加SQLite的引用,可以通过NuGet包管理器引入System.Data.SQLite.Core。然后,在代码中引入SQLite的命名空间。 2. 创建SQLite数据库文件 使用SQLite的API和语法,可以创建一个SQLite数据库文件。可以使用SQLiteConnection类来连接数据库,并传入相应的数据库文件路径。 3. 创建数据表 使用SQLite的语法,可以通过SQLiteConnection类的ExecuteNonQuery方法执行创建表的SQL语句。 4. 插入数据 使用SQLite的语法,可以通过SQLiteConnection类的ExecuteNonQuery方法执行插入数据的SQL语句。 5. 查询数据 使用SQLite的语法,可以通过SQLiteDataAdapter类执行查询数据的SQL语句,并将结果存储在DataSet中。 6. 更新数据 使用SQLite的语法,可以通过SQLiteConnection类的ExecuteNonQuery方法执行更新数据的SQL语句。 7. 删除数据 使用SQLite的语法,可以通过SQLiteConnection类的ExecuteNonQuery方法执行删除数据的SQL语句。 以上就是使用WinForm结合SQLite实现增删查改操作的基本步骤。除了使用原生的SQLite语法,还可以借助ORM框架,如Entity Framework或Dapper来简化SQLite操作。另外,在编写代码时要注意异常处理、连接状态管理和安全性等方面的问题。 ### 回答2: 在WinForm中使用SQLite实现增删查改是一种简单而且有效的数据库操作方法。下面以300字回答增删查改的具体步骤: 增(Insert):首先需要在WinForm中创建SQLite数据库文件,并建立表格用于存储数据。然后,在代码中连接数据库,并使用INSERT语句将新的数据插入到表格中。 删(Delete):在WinForm中,可以通过用户输入的方式获取要删除的数据的特定标识,然后使用DELETE语句从数据库中删除相应的数据。 查(Select):通过SQLite提供的SELECT语句可以查询数据库中的数据。在WinForm中,可以根据用户的输入条件构建相应的SELECT语句,然后执行查询操作,并将获取到的数据展示在界面上。 改(Update):与删除类似,在WinForm中可以通过用户输入获取要修改的数据的特定标识,然后使用UPDATE语句更新数据库中对应的数据。 需要注意的是,在使用WinForm和SQLite进行数据库操作时,应遵循良好的编程规范,确保数据的完整性和安全性。同时,需要处理好异常情况,使用try...catch结构来处理可能出现的错误,以提高程序的稳定性。 总结起来,使用WinForm和SQLite实现增删查改的步骤包括:建立数据库和表格、连接数据库、构建相应的SQL语句、执行SQL语句、处理异常情况。这些步骤可以帮助我们高效地进行数据库操作,并提供可靠的数据存储和查询功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值