您的位置:首页 > 数据库 > SQL

SQLiteOpenHelper使用之英文生词本

2016-09-10 10:25 417 查看
界面效果如下:布局代码如下:<span style="font-size:14px;"><?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"
tools:context="com.example.sqliteopenhelper.MainActivity"
android:orientation="vertical"><EditText
android:id="@+id/et_word"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="input the word"/>
<EditText
android:id="@+id/et_explaination"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="输入单词解释 "/>
<Button
android:id="@+id/btn_insert"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="insert"/>
<EditText
android:id="@+id/et_search_content"
android:layout_width="match_parent"
android:layout_height="wrap_content" /><Button
android:id="@+id/btn_search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="search"/>
</LinearLayout></span>
第一步:创建一个MyDataBaseHelper类,继承SQLiteOpenHelper类,此类用于建立数据库(表),代码如下:
<span style="font-size:14px;">public class MyDataBaseHelper extends SQLiteOpenHelper{
final String CREATE_TABLE_SQL = "create table dict(_id integer primary key autoincrement," +
"word,detail)";
public MyDataBaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, null, version);
}

@Override
public void onCreate(SQLiteDatabase db) {
//  第一次使用数据库时自动建表
db.execSQL(CREATE_TABLE_SQL);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
System.out.println("onUpgrade Called-------oldVersion:"+
oldVersion+"newVersion:"+newVersion);
}
}</span>
MainActivity代码如下:
<span style="font-size:14px;">public class MainActivity extends Activity {
private MyDataBaseHelper helper;
private Button btn_insert,btn_search;
private EditText et_word,et_explanation,searchContent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
helper = new MyDataBaseHelper(this,"myDictionary.db3",null,1);
btn_insert = (Button) findViewById(R.id.btn_insert);
btn_search = (Button) findViewById(R.id.btn_search);
et_word = (EditText) findViewById(R.id.et_word);
searchContent = (EditText) findViewById(R.id.et_search_content);
et_explanation = (EditText) findViewById(R.id.et_explaination);
btn_insert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String word = et_word.getText().toString();
String detail = et_explanation.getText().toString();
//  helper.getReadableDataBase是用读写的方式打开数据库
insertData(helper.getReadableDatabase(),word,detail);
Toast.makeText(MainActivity.this, "添加单词成功!", Toast.LENGTH_SHORT).show();
}
});
btn_search.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String key = searchContent.getText().toString();
Cursor cursor = helper.getReadableDatabase().rawQuery("select * from dict where word " +
"like ? or detail like ?",new String[]{"%"+key+"%","%"+key+"%"});
Bundle data = new Bundle();
data.putSerializable("data", (Serializable) converCursorToList(cursor));
Intent intent = new Intent(MainActivity.this,ResultActivity.class);
intent.putExtras(data);
startActivity(intent);
}
});
}
private void insertData(SQLiteDatabase db,String word,String detail){
db.execSQL("insert into dict values(null,?,?)",new String[]{word,detail});
}

private List<Map<String,String>> converCursorToList(Cursor cursor){
ArrayList<Map<String,String>> wordList = new ArrayList<Map<String,String>>();
while(cursor.moveToNext()){
Map<String,String> map =  new HashMap<String,String>();
map.put("word",cursor.getString(1));
map.put("detail",cursor.getString(2));
wordList.add(map);
}
return wordList;
}
}</span><span style="font-size: 12pt;">
</span>
ResultActivity代码如下:
<span style="font-size:14px;">public class ResultActivity extends Activity {
ListView searchedList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.resultlist);
searchedList = (ListView) findViewById(R.id.searched_list);
Intent intent = getIntent();
Bundle data = intent.getExtras();
ArrayList<Map<String,String>> list =(ArrayList<Map<String,String>>)
data.getSerializable("data");
SimpleAdapter adapter = new SimpleAdapter(ResultActivity.this,list, R.layout.result,
new String[]{"word","detail"},new int[]{R.id.tv_word,R.id.tv_detail});
searchedList.setAdapter(adapter);
}
}</span>
注:将ResultActivity设置为对话框模式的Activity,在AndroidManifest.xml中设置:
<activity android:name=".ResultActivity" android:theme="@style/Theme.AppCompat.Dialog"></activity>
在ResultActivity中需要再新建2个xml布局文件resultlist.xml和result.xml
SimpleAdapter adapter = new SimpleAdapter(context,List<Map<String,?>>,int resource,String from[],int to[]);其中resource是要填充的布局文件,from[]对应list中存入的key,to[]对应布局文件中的组件的id,切记使用listView.setAdapter(adapeter)方法使listView按resource中的样式加载list中的数据
界面查询效果如下:

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息