【最后的冲刺】android中excel表的导入和数据处理
【最后的冲刺】android中excel表的导入和数据处理 ——学校课程的查询和修改
1.编写 The Class类把课程表courses.db当做一个实体类,hashcode和equals这两个类是为了判断输入的查询内容和Excel表中的内容是否一致。
并在java里面区别两个对象是否一致
public class TheClass {
private String classname;
private String type;
private String teacher;
private String classroom;
public String getClassname() {
return classname;
}
public void setClassname(String classname) {
this.classname = classname;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getTeacher() {
return teacher;
}
public void setTeacher(String teacher) {
this.teacher = teacher;
}
public String getClassroom() {
return classroom;
}
public void setClassroom(String classroom) {
this.classroom = classroom;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((classname == null) ? 0 : classname.hashCode());
result = prime * result
+ ((classroom == null) ? 0 : classroom.hashCode());
result = prime * result + ((teacher == null) ? 0 : teacher.hashCode());
result = prime * result + ((type == null) ? 0 : type.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
TheClass other = (TheClass) obj;
if (classname == null) {
if (other.classname != null)
return false;
} else if (!classname.equals(other.classname))
return false;
if (classroom == null) {
if (other.classroom != null)
return false;
} else if (!classroom.equals(other.classroom))
return false;
if (teacher == null) {
if (other.teacher != null)
return false;
} else if (!teacher.equals(other.teacher))
return false;
if (type == null) {
if (other.type != null)
return false;
} else if (!type.equals(other.type))
return false;
return true;
}
}
这里必须注意的是hashset是个集合,必须两者是不同的,那么怎么进行区分呢,就是通过hashcode和equals这两个类
2.编写Readfile类,导入Excle的类进入sqlite
public class ReadFile {
public static boolean read2DB(File f, Context con) {
try {
Workbook course = null;
course = Workbook.getWorkbook(f);
Sheet sheet = course.getSheet(0);
HashSet<TheClass> subjects = new HashSet<TheClass>();
Cell cell = null;
for (int i = 1; i < sheet.getRows(); i++) {
TheClass tc = new TheClass();
cell = sheet.getCell(2, i);
tc.setClassname(cell.getContents());
cell = sheet.getCell(10, i);
tc.setType(cell.getContents());
cell = sheet.getCell(12, i);
tc.setTeacher(cell.getContents());
cell = sheet.getCell(18, i);
tc.setClassroom(cell.getContents());
System.out.println(tc.getClassname() + tc.getType()
+ tc.getTeacher() + tc.getClassroom());
subjects.add(tc);
}
SQLiteDatabase db = new SQLiteHelper(con, "courses.db")
.getWritableDatabase();
for (TheClass tc : subjects) {
ContentValues cv = new ContentValues();
cv.put("classname", tc.getClassname());
cv.put("type", tc.getType());
cv.put("teacher", tc.getTeacher());
cv.put("classroom", tc.getClassroom());
db.insert("table1", null, cv);
}
return true;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
}
3.编写sqlite帮助类,通过它可以比较快的创建数据对象,创建表,删除表
public class SQLiteHelper extends SQLiteOpenHelper {
public SQLiteHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}
public SQLiteHelper(Context con, String name){
this(con, name, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("create table table1(classname varchar(20), type varchar(10), teacher varchar(20), classroom varchar(20))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldv, int newv) {
// TODO Auto-generated method stub
db.execSQL("drop table if exists table1");
onCreate(db);
}
}
4.编写主函数MainActivity,添加查询课程,老师,修改教室,老师等点击事件,还有刚开始加载Excel表的数据
public class MainActivity extends Activity {
private TextView hello;
private Button b1;
private EditText et;
// private Spinner sp;
private EditText et2;
private SQLiteDatabase db = null;
private TextView type;
private TextView classroom;
private Button editclassroom;
private Button del;
private String classname;
private String teachername;
private EditText edclassroom;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
db = new SQLiteHelper(this, "courses.db").getWritableDatabase();
hello = (TextView) findViewById(R.id.hello);
b1 = (Button) findViewById(R.id.button1);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
LayoutInflater li = LayoutInflater.from(MainActivity.this);
View view = li.inflate(R.layout.quer, null);
et = (EditText) view.findViewById(R.id.editText1);
// sp = (Spinner) findViewById(R.id.spinner1);
et2 = (EditText) view.findViewById(R.id.EditText01);
new AlertDialog.Builder(MainActivity.this)
.setTitle("查询")
.setView(view)
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0,
int arg1) {
classname = et.getText().toString();
teachername = et2.getText().toString();
if (null != classname
&& null != teachername) {
Cursor c = db
.rawQuery(
"select type,classroom from table1 where classname = ? and teacher = ? ",
new String[] {
classname,
teachername });
LayoutInflater li = LayoutInflater
.from(MainActivity.this);
View view = li.inflate(
R.layout.show, null);
type = (TextView) view
.findViewById(R.id.type);
classroom = (TextView) view
.findViewById(R.id.classroom);
editclassroom = (Button) view
.findViewById(R.id.button1);
del = (Button) view
.findViewById(R.id.button2);
c.moveToNext();
type.setText(c.getString(c
.getColumnIndex("type")));
classroom.setText(c.getString(c
.getColumnIndex("classroom")));
new AlertDialog.Builder(
MainActivity.this)
.setTitle("查询结果")
.setView(view)
.setPositiveButton("确定",
null).show();
editclassroom
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(
View arg0) {
LayoutInflater li = LayoutInflater
.from(MainActivity.this);
View editview = li
.inflate(
R.layout.editclassroom,
null);
edclassroom = (EditText) editview
.findViewById(R.id.editText1);
new AlertDialog.Builder(
MainActivity.this)
.setTitle(
"新的教室:")
.setView(
editview)
.setPositiveButton(
"确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
ContentValues cv = new ContentValues();
cv.put("classroom", edclassroom.getText().toString());
db.update("table1", cv, "classname = ? and teacher = ?",
new String[] {
classname,
teachername });
}
})
.setNegativeButton(
"取消",
null)
.show();
}
});
del.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
new AlertDialog.Builder(
MainActivity.this)
.setTitle("警告")
.setMessage(
"您正在删除记录,确定删除?")
.setPositiveButton(
"确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(
DialogInterface arg0,
int arg1) {
db.delete(
"table1",
"classname = ? and teacher = ?",
new String[] {
classname,
teachername });
}
})
.setNegativeButton(
"取消", null)
.show();
}
});
}
}
}).show();
}
});
File sdpath = Environment.getExternalStorageDirectory();
File coursefile = new File(sdpath + File.separator + "courses.xls");
if (!coursefile.exists()) {
new AlertDialog.Builder(this).setTitle("错误").setMessage("未找到文件")
.setPositiveButton("确定", null).show();
b1.setVisibility(View.INVISIBLE);
} else {
hello.setText("找到了文件!");
new Important().execute();
b1.setVisibility(View.VISIBLE);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
class Important extends AsyncTask<Integer, String, Boolean> {
private ProgressDialog pDialog = null;
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("正在导入课程,请稍候");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected void onPostExecute(Boolean imp) {
// TODO Auto-generated method stub
super.onPostExecute(imp);
pDialog.dismiss();
String result = "";
if (imp == true) {
result = "读取成功!";
} else {
result = "读取失败!";
}
new AlertDialog.Builder(MainActivity.this).setTitle("提示")
.setMessage(result).setPositiveButton("确定", null).show();
}
@Override
protected void onProgressUpdate(String... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
}
@Override
protected Boolean doInBackground(Integer... params) {
File sdpath = Environment.getExternalStorageDirectory();
File coursefile = new File(sdpath + File.separator + "courses.xls");
return ReadFile.read2DB(coursefile, MainActivity.this);
}
}
}
5.总结一下
整个过程不是太难,不过要记得导入jxl.jar这个包,整体技术方面就是用到了安卓本身自带的Sqlite操作方法
【最后的冲刺】android中excel表的导入和数据处理的更多相关文章
- Excel表数据导入数据库表中
***Excel表数据导入到数据库表中 通过数据库表的模板做成‘Excel’表的数据导入到数据库相应的表中(注意:主表 和 从表的关系,要先导‘主表’在导入从表) 过程:通过数据库的导入工具—先导入为 ...
- Excel表数据导入Sql Server数据库中
Excel表数据导入Sql Server数据库的方法很多,这里只是介绍了其中一种: 1.首先,我们要先在test数据库中新建一个my_test表,该表具有三个字段tid int类型, tname nv ...
- VB中Excel 2010的导入导出操作
VB中Excel 2010的导入导出操作 编写人:左丘文 2015-4-11 近来这已是第二篇在讨论VB的相关问题,今天在这里,我想与大家一起分享一下在VB中如何从Excel中导入数据和导出数据到Ex ...
- Asp.Net中使用OpenRowSet操作Excel表,导入Sql Server(实例)
有两种接口可供选择:Microsoft.Jet.OLEDB.4.0(以下简称 Jet 引擎)和Microsoft.ACE.OLEDB.12.0(以下简称 ACE 引擎). Jet 引擎大家都很熟悉,可 ...
- yii2 中excel表导出
首先下载phpexcel 在引入类文件(在web中index.php入口文件或者控制器中引入) require_once dirname(dirname(__FILE__)).'/excel/PHPE ...
- python中Excel表操作
python中关于excel表个的操作 使用 python中的xlwt和xlrd模块进行操作 # 2003之前:Excel:xls# 2003之后:Excel:xlsx# xlrd:读取的模块:xls ...
- oracle 两个网络不通的远程数据库如何将一个库中的表数据导入到另一个库中?
1.情景展示 本地可以直接连接2个不同的远程数据库: 两个数据库由于网络不通,无法建立DBLINK完成数据传输: 将A库中C表的数据插入到B库中C表,如何快速实现? 2.解决方案 通过kettle ...
- laravel实现excel表的导入导出功能
1.这是个我去公司之后曾经折磨我很久很久的功能查阅了很多资料但是功夫不负有心人在本人的不懈努力下还是实现了这个功能 (ps看不懂我下面说讲述的可以参考这个laravel学院的官方文档 https:// ...
- Java版将EXCEL表数据导入到数据库中
1.采用第三方控件JXL实现 try { //实例化一个工作簿对象 Workbook workBook=Workbook.getWorkbook(new File("F://qzlx.xls ...
随机推荐
- spring3.2事物配置异常
异常如下: org.springframework.beans.factory.support.DefaultListableBeanFactory@1b4c1d7: defining beans [ ...
- 陕西师范大学第七届程序设计竞赛网络同步赛 J 黑猫的小老弟【数论/法拉数列/欧拉函数】
链接:https://www.nowcoder.com/acm/contest/121/J来源:牛客网 题目描述 大家知道,黑猫有很多的迷弟迷妹,当然也有相亲相爱的基友,这其中就有一些二五仔是黑猫的小 ...
- 51nod 1091 线段的重叠【贪心/区间覆盖类】
1091 线段的重叠 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 X轴上有N条线段,每条线段包括1个起点和终点.线段的重叠是这样来算的,[10 2 ...
- 测试工具APPScan安装与使用教程
- [BZOJ5288][HNOI2018]游戏(拓扑排序)
传送门:https://www.luogu.org/problemnew/show/P4436 20分的暴力加一个Random_shuffle就A了.我还能说什么.. 不过这个也不是毫无道理,复杂度应 ...
- 【bzoj2839】【集合计数】容斥原理+线性求阶乘逆元小技巧
(上不了p站我要死了,侵权度娘背锅) Description 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得 它们的交集的元素个数为K,求取 ...
- highcharts 图例详解
highcharts 图例 tooltip: { }, legend: { ...
- Shader与AGAL(From 7yue)
- IIS7.5 部署WCF项目问题集锦
HTTP 错误 500.19 - Internal Server Error 描述:配置错误: 不能在此路径中使用此配置节.如果在父级别上锁定了该节,便会出现这种情况.锁定是默认设置的 (overri ...
- 使用MySQL正则表达式 __MySQL必知必会
正则表达式作用是匹配方本,将一个模式(正则表达式)与一个文本串进行比较. MySQL用WHERE子句对正则表达式提供了初步的支持,允许你指定用正则表达式过滤SELECT检索出的数据. MySQL仅支持 ...