【最后的冲刺】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表的导入和数据处理的更多相关文章

  1. Excel表数据导入数据库表中

    ***Excel表数据导入到数据库表中 通过数据库表的模板做成‘Excel’表的数据导入到数据库相应的表中(注意:主表 和 从表的关系,要先导‘主表’在导入从表) 过程:通过数据库的导入工具—先导入为 ...

  2. Excel表数据导入Sql Server数据库中

    Excel表数据导入Sql Server数据库的方法很多,这里只是介绍了其中一种: 1.首先,我们要先在test数据库中新建一个my_test表,该表具有三个字段tid int类型, tname nv ...

  3. VB中Excel 2010的导入导出操作

    VB中Excel 2010的导入导出操作 编写人:左丘文 2015-4-11 近来这已是第二篇在讨论VB的相关问题,今天在这里,我想与大家一起分享一下在VB中如何从Excel中导入数据和导出数据到Ex ...

  4. Asp.Net中使用OpenRowSet操作Excel表,导入Sql Server(实例)

    有两种接口可供选择:Microsoft.Jet.OLEDB.4.0(以下简称 Jet 引擎)和Microsoft.ACE.OLEDB.12.0(以下简称 ACE 引擎). Jet 引擎大家都很熟悉,可 ...

  5. yii2 中excel表导出

    首先下载phpexcel 在引入类文件(在web中index.php入口文件或者控制器中引入) require_once dirname(dirname(__FILE__)).'/excel/PHPE ...

  6. python中Excel表操作

    python中关于excel表个的操作 使用 python中的xlwt和xlrd模块进行操作 # 2003之前:Excel:xls# 2003之后:Excel:xlsx# xlrd:读取的模块:xls ...

  7. oracle 两个网络不通的远程数据库如何将一个库中的表数据导入到另一个库中?

      1.情景展示 本地可以直接连接2个不同的远程数据库: 两个数据库由于网络不通,无法建立DBLINK完成数据传输: 将A库中C表的数据插入到B库中C表,如何快速实现? 2.解决方案 通过kettle ...

  8. laravel实现excel表的导入导出功能

    1.这是个我去公司之后曾经折磨我很久很久的功能查阅了很多资料但是功夫不负有心人在本人的不懈努力下还是实现了这个功能 (ps看不懂我下面说讲述的可以参考这个laravel学院的官方文档 https:// ...

  9. Java版将EXCEL表数据导入到数据库中

    1.采用第三方控件JXL实现 try { //实例化一个工作簿对象 Workbook workBook=Workbook.getWorkbook(new File("F://qzlx.xls ...

随机推荐

  1. Centos的APK解包打包签名

    http://www.v5b7.com/other/apk.html vi /etc/profile PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:/u ...

  2. [BZOJ1069][SCOI2007]最大土地面积 凸包+旋转卡壳

    1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 3669  Solved: 1451[Submit][Sta ...

  3. AC日记——Broken BST codeforces 797d

    D - Broken BST 思路: 二叉搜索树: 它时间很优是因为每次都能把区间缩减为原来的一半: 所以,我们每次都缩减权值区间. 然后判断dis[now]是否在区间中: 代码: #include ...

  4. Javascript 中的 apply与call详解

    一.方法定义 1.call 方法 语法:call(thisObj,arg1, arg2, argN) 参数 thisObj 可选项.将被用作当前对象的对象. arg1, arg2, , argN 可选 ...

  5. 将C#程序做成服务后服务自动停止的问题

    查了好几天,没法调试实在是很难找错误,今天想了半天到事件查看器,提示如下: 说明: 由于未经处理的异常,进程终止. 异常信息: System.NullReferenceException 想了半天,应 ...

  6. 由"软件是干什么的"引发的思考

            自工作以来,都只在进行模块的开发,很少站在整个项目的角度思考过.甚至,自己开发的软件,自己都没有去用过,包括开发的一些APP,都没有下载来认真体验过.思考过.却对自己手机上那些用过的A ...

  7. APP专项测试 | 内存及cpu

    命令: adb shell dumpsys meminfo  packagename 关注点: 1.Native/Dalvik 的 Heap 信息 具体在上面的第一行和第二行,它分别给出的是JNI层和 ...

  8. Walls and Gates -- LeetCode

    You are given a m x n 2D grid initialized with these three possible values. -1 - A wall or an obstac ...

  9. Moving Average from Data Stream -- LeetCode

    Given a stream of integers and a window size, calculate the moving average of all integers in the sl ...

  10. Unity3d UGUI 界面适配 实例解析 三种适配方式

    之前做游戏都是用公司自己的引擎,对于界面的适配分Android和IOS两种系统处理. 对于IOS设备,由于数量有限,只要做到 960x640  1024x769 1136x640 (当时还没有ipho ...