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