【最后的冲刺】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 ...
随机推荐
- C# web server的开发流程
http://blog.csdn.net/h0322/article/details/4776819
- aliyun
阿里云启动不了网站 1 将网站的目录属性-安全中加入IUSER_计算机名字的访问权限 和 加入NER SERVICE的访问权限 2 IIS打开网站属性--目录--执行权限改为顺脚本 3 ...
- Codeforces 938D Buy a Ticket (转化建图 + 最短路)
题目链接 Buy a Ticket 题意 给定一个无向图.对于每个$i$ $\in$ $[1, n]$, 求$min\left\{2d(i,j) + a_{j}\right\}$ 建立超级源点$ ...
- ARC 098 D - Xor Sum 2
Problem Statement There is an integer sequence A of length N. Find the number of the pairs of intege ...
- [Contest20180418]物理竞赛
题意:在一个三维空间中有一个轴,轴上有一个垂直于轴的半径为$R$的凸透镜(光心在轴上)和$n$个点光源,假设每个点光源发出的$1$单位光都刚好覆盖凸透镜,现在有一个半径为$r$的圆形光屏,问光屏最多能 ...
- 链接服务器 "(null)" 的 OLE DB 访问接口 "SQLNCLI11" 指示该对象没有列,或当前用户没有访问该对象的权限。
原文:链接服务器 "(null)" 的 OLE DB 访问接口 "SQLNCLI11" 指示该对象没有列,或当前用户没有访问该对象的权限. SELECT * F ...
- Winform打砖块游戏制作step by step第4节---小球移动
一 引子 为了让更多的编程初学者,轻松愉快地掌握面向对象的思考方法,对象继承和多态的妙用,故推出此系列随笔,还望大家多多支持. 预备知识,无GDI画图基础的童鞋请先阅读一篇文章让你彻底弄懂WinFor ...
- 【java】在controller层使用的检查单一字段不能为null和检查属性中某些字段不能为null的工具
========================================================================================= 代码参考地址:Git ...
- uVa 12563 Jin Ge Jin Qu
分析可知,虽然t<109,但是总曲目时间大于t,实际上t不会超过180*n+678.此问题涉及到两个目标信息,首先要求曲目数量最多,在此基础上要求所唱的时间尽量长.可以定义 状态dp[i][j] ...
- 用curl获取https请求时出现错误的处理
今天一个同事反映,使用curl发起https请求的时候报错:“SSL certificate problem, verify that the CA cert is OK. Details: erro ...