andriod小型sql数据库

最近学习了安卓的小型数据库,在网上找了很多资料,感觉有点乱,或许我是小白的原因吧,所以自己整理了一下,功能有插入、修改、查询,都是可视化界面。刚开始运行程序数据库里面是没数据的,需要自己手动添加(可添加空白文字),修改的时候单击对应的列表即可,查询的时候在对应的文本框中输入查询的字符即可。有些人批评别人拿来主义,可是像我等小白不拿怎么会呢?但是我学习完了也会共享啊!


SplActivity .java

package com.example.sql;

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


import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
@SuppressLint("SdCardPath")
public class SplActivity extends Activity implements OnClickListener{
private Button insertBtn, selectBtn,displayBtn;
private ListView mListView;
private SQLiteDatabase db;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sql_activity);
        mListView=new ListView(this);
        BtnInit();
        OpenCreateDB();
        //单击事件
        mListView.setOnItemClickListener(new OnItemClickListener(){


@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {

final Cursor c = db.rawQuery("SELECT * FROM HomeLibrary WHERE _id = ?", new String[]{""+(arg2+1)});
           if(c.moveToFirst())
           {
                    View view1=LayoutInflater.from(SplActivity.this).inflate(R.layout.dialog, null);
                    final TextView idd=(TextView) view1.findViewById(R.id.textView1);
                    final EditText command=(EditText) view1.findViewById(R.id.editText2);
                    final EditText result=(EditText) view1.findViewById(R.id.editText3);
                    
idd.setText(c.getInt(0)+"");
command.setText(c.getString(1));
result.setText(c.getString(2));


new AlertDialog.Builder(SplActivity.this)
.setTitle("手动修改数据")
.setView(view1)
.setPositiveButton("确定修改", new AlertDialog.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
ContentValues cv = new ContentValues();  
    cv.put("command",command.getText().toString());  
    db.update("HomeLibrary", cv, "_id = ?", new String[]{idd.getText().toString()});    
    cv.put("result",result.getText().toString());  
    db.update("HomeLibrary", cv, "_id = ?", new String[]{idd.getText().toString()});
}
}).create().show();
            }
            }
    });
    }
   
    public void BtnInit(){
    insertBtn=(Button)findViewById(R.id.insert);
        selectBtn=(Button)findViewById(R.id.select);
        displayBtn=(Button)findViewById(R.id.display);
        mListView=(ListView)findViewById(R.id.listview);
        insertBtn.setOnClickListener(this);
        selectBtn.setOnClickListener(this);
        displayBtn.setOnClickListener(this);
    }
    
    public class DTData {
        int _id;//与所建立的表对应
    String command;
    String result;
    public DTData(String command,String result){
    this.command=command;
    this.result=result;
    }
    }
    
    public void OpenCreateDB(){
    db = openOrCreateDatabase("/sdcard/douting/HomeLibrary.db", Context.MODE_PRIVATE, null);
    //db.execSQL("DROP TABLE IF EXISTS HomeLibrary");  //初始化数据库
    //判断文件是否建立了表格,没有这生成表格  
        db.execSQL("CREATE TABLE IF NOT EXISTS HomeLibrary (_id INTEGER PRIMARY KEY AUTOINCREMENT, command VARCHAR, result VARCHAR)");
    }
    
    //加载数据到HomeLibrary表
    public void InsertData(){
    View view1=LayoutInflater.from(SplActivity.this).inflate(R.layout.dialog, null);
    final TextView idd=(TextView) view1.findViewById(R.id.textView1);
        final EditText command=(EditText) view1.findViewById(R.id.editText2);
        final EditText result=(EditText) view1.findViewById(R.id.editText3);
        idd.setText("序号自动生成");
new AlertDialog.Builder(SplActivity.this)
.setTitle("手动加载数据")
.setView(view1)
.setPositiveButton("确定加载", new AlertDialog.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) { 
    db.execSQL("INSERT INTO HomeLibrary VALUES (NULL,?,?)",
    new Object[]{command.getText().toString(),result.getText().toString()});
       Log.d("msg","加载成功");
}
}).create().show();
    }

    

//简单的寻找算法,有点小漏洞,不过也无伤大雅,要求苛刻的可自己写算法。

    public void Find(String str1,int key)
    {
    List<String> list=new ArrayList<String>();
    Cursor c = db.rawQuery("SELECT * FROM HomeLibrary", null);
    int[] num = new int[c.getCount()]; //定义和数据库指令条数相等大小的数组
    Log.d("msg","--------------全部数据----------------------------");
    Log.d("msg",""+str1.length());//获得字符串中的对应字符
    int k=0;
    while (c.moveToNext()) {
    if(c.getString(key).indexOf(str1.charAt(0))>=0)
    {
    num[k++] = c.getInt(0);
    Log.d("msg",""+str1.charAt(0)+num[k-1]);
    }
    }
    //循环匹配到最后一个字符
   for (int i = 1; i < str1.length(); i++) {
    int j=k=0;
    while(num[j]!=0){
    c.moveToFirst(); //每次使用c.move()的时候都会报错,但是加了这句话就程序就不死了,我也不知道为什么,求大神告诉我。。
    c.move(num[j]-1); //移动的时候要减1,否则会移动到下一个
    if(c.getString(key).indexOf(str1.charAt(i))>=0)
    {
    num[j]=0;
    num[k++] = c.getInt(0);
    Log.d("msg",""+str1.charAt(i)+num[k-1]);
    }
    j++;
}
        }
   c.moveToFirst();//每次使用c.move()的时候都会报错,但是加了这句话就程序就不死了,我也不知道为什么,求大神告诉我。。
   if(num[0]!=0)
    c.move(num[0]-1); //移动的时候要减1,否则会移动到下一个
   else
    c.move(0); //防止都查不到出错,回到第一条
    String string=""+c.getInt(0)+" "+c.getString(1)+" "+c.getString(2);
list.add(string);
        c.close();
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,list);
        mListView.setAdapter(adapter);
    }
    
    //查找数据
    public void Select(){
    View view1=LayoutInflater.from(SplActivity.this).inflate(R.layout.dialog, null);
    final TextView idd=(TextView) view1.findViewById(R.id.textView1);
        final EditText command=(EditText) view1.findViewById(R.id.editText2);
        final EditText result=(EditText) view1.findViewById(R.id.editText3);
        idd.setText("选择其中一个查询");
new AlertDialog.Builder(SplActivity.this)
.setTitle("手动查询数据")
.setView(view1)
.setPositiveButton("确定查询", new AlertDialog.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) { 
if(command.getText().toString().length()!=0)
Find(command.getText().toString(), 1);
else if(result.getText().toString().length()!=0)
Find(result.getText().toString(), 2);
       Log.d("msg","查询成功");
}
}).create().show();
    }
    
    //显示数据
    public void Display(){
    List<String> list=new ArrayList<String>();
    Cursor c = db.rawQuery("SELECT * FROM HomeLibrary", null);
        while (c.moveToNext()) {
        String string=""+c.getInt(0)+" "+c.getString(1)+" "+c.getString(2);
        list.add(string);
        Log.d("msg",string);
        }
        c.close();
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,list);
        mListView.setAdapter(adapter);
    }
    
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.insert:
InsertData();
break;

case R.id.display:
Display();
break;


case R.id.select:
Select();
break;
}
}

}


sql_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
<Button
   android:id="@+id/insert"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="插入"/>
   <Button
   android:id="@+id/select"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="查找"/>
<Button
   android:id="@+id/display"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="显示当前数据库"/>

<ListView 
   android:id="@+id/listview"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"></ListView>
</LinearLayout>


dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="TextView"
        android:textSize="30px" />

    <EditText
        android:id="@+id/editText2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" />

    <EditText
        android:id="@+id/editText3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" />

</LinearLayout>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值