根据项目要求,要写andoid客户端,web服务端程序。下面先来简单说说 android客户端程序(先不说通信方面)
1 本人用的数据库是SQLite.(原因:轻量级,手机内嵌)
因为本人是学C#的,对调取本地数据库中的数据有着一个几乎定理般的逻辑,就是数据是单向传递的!但是android中的SQLite好像不是这样,它不仅传Entity实体类,而且还要把Context类对象传给DBhelper类对象。这顿时让我很不爽,找了很多资料(度娘),也没有准确的答案,只能硬着头皮先这么写了。
2 先写个小小的Demo,只要把这个做了,其他的就复制粘贴的问题了。(不讨论具体细节,适合于初学者)
架构:三层架构(Activity,BLL,DAL(DBHelper,Entity))
Activity层写了一个Button和一个TextView.
业务:(1)点击OK Button,向SQLite传递数据。(2)同时调取SQLite数据,在TextView里面显示。
图1 程序界面
(效果就不贴了,想想业务也能知道了吧)
3 代码
Activity层:界面,新建bll对象并把实体类和Context类对象传给bll对象。
1 public class MainActivity extends Activity {
2 3 public static String dbpath; 4 5 public static Bll_Test bll_Test; 6 7 @Override 8 protected void onCreate(Bundle savedInstanceState) { 9 super.onCreate(savedInstanceState); 10 setContentView(R.layout.activity_main); 11 12 bll_Test = new Bll_Test(this); 13 14 Button button = (Button) findViewById(R.id.OK); 15 16 button.setOnClickListener(new Button.OnClickListener() 17 { 18 19 20 21 @Override 22 public void onClick(View v) { 23 // TODO Auto-generated method stub 24 int i = 7; 25 Test t = new Test(); 26 TextView textView = (TextView)findViewById(R.id.Show); 27 28 t.Set_Value(i); 29 //t.Set_ID(4); 30 bll_Test.InsertValue(t); 31 //textView.setText((bll_Test.GetValue().get(0)).Get_Value()); 32 33 textView.setText(Integer.toString(bll_Test.GetValue().get(0).Get_Value())); 34 //String string = Integer.toString(bll_Test.GetValue().get(0).Get_Value()); 35 //System.out.println(string); 36 37 //textView.setText("Haaaaa"); 38 39 40 }}); 41 42 43 44 } 45 46 @Override 47 public boolean onCreateOptionsMenu(Menu menu) { 48 // Inflate the menu; this adds items to the action bar if it is present. 49 getMenuInflater().inflate(R.menu.main, menu); 50 return true; 51 52 53 54 55 } 56 57 @Override 58 public boolean onOptionsItemSelected(MenuItem item) { 59 // Handle action bar item clicks here. The action bar will 60 // automatically handle clicks on the Home/Up button, so long 61 // as you specify a parent activity in AndroidManifest.xml. 62 int id = item.getItemId(); 63 if (id == R.id.action_settings) { 64 return true; 65 } 66 return super.onOptionsItemSelected(item); 67 } 68 }
BLL层:业务逻辑,新建dal对象,并把逻辑写好,便于activity调用。
1 public class Bll_Test
2 { 3 private Context context; 4 private Dal_Test dal_Test; 5 //private Test test; 6 public Bll_Test(Context c) 7 { 8 this.context = c; 9 dal_Test = new Dal_Test(this.context); 10 } 11 12 public void InsertValue(Test t) 13 { 14 dal_Test.InsertValue(t); 15 } 16 public ArrayList GetValue() 17 { 18 return dal_Test.GetValue(); 19 } 20 }
DAl层:具体操作数据库,新建DBHelper类对象,并把sql语句传给该对象。
1 public class Dal_Test
2 { 3 private Context context; 4 private SQLiteDatabase db; 5 public Dal_Test(Context c) 6 { 7 try{ 8 this.context = c; 9 DBHelpr_SQLite dbhelper = new DBHelpr_SQLite(this.context); 10 db = dbhelper.getReadableDatabase(); 11 } 12 catch(android.database.sqlite.SQLiteException e) 13 { 14 db.close(); 15 throw e; 16 } 17 } 18 public void InsertValue(Test t) 19 { 20 String sql = "INSERT INTO Test(value)"+"VALUES(?)"; 21 db.beginTransaction(); 22 db.execSQL(sql, new Object[]{t.Get_Value()}); 23 db.setTransactionSuccessful(); 24 db.endTransaction(); 25 } 26 27 public ArrayList GetValue() 28 { 29 ArrayList tests = new ArrayList(); 30 String sql = "SELECT value from Test"; 31 Cursor cursor =db.rawQuery(sql,null); 32 while(cursor.moveToNext()) 33 { 34 //int id = cursor.getInt(0); 35 int value = cursor.getInt(0); 36 37 Test test = new Test(); 38 //test.Set_ID(id); 39 test.Set_Value(value); 40 tests.add(test); 41 } 42 cursor.close(); 43 return tests; 44 45 46 } 47 }
DBHelper类:调取数据库,连接数据库,返回数据。
1 public class DBHelpr_SQLite extends SQLiteOpenHelper{
2 public DBHelpr_SQLite(Context context, String name, CursorFactory factory, int version) { 3 super(context, name, factory, version); 4 // TODO Auto-generated constructor 5 6 } 7 8 //private static Context context; 9 //private static SQLiteDatabase db; 10 private static final String dbname = "Test.db"; 11 private static final int version = 1; 12 13 public DBHelpr_SQLite(Context c) 14 { 15 this(c,dbname,null,version); 16 17 } 18 19 20 21 @Override 22 public void onCreate(SQLiteDatabase db) 23 { 24 // TODO Auto-generated method stub 25 db.execSQL("CREATE TABLE Test(ID INTEGER PRIMARY KEY AUTOINCREMENT, value INTEGER)"); 26 } 27 28 @Override 29 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 30 // TODO Auto-generated method stub 31 32 } 33 34 }
实体类
1 public class Test
2 { 3 private int id; 4 private int value; 5 public int get_ID() { 6 7 return this.id; 8 } 9 10 11 public void Set_ID(int i) { 12 this.id = i; 13 } 14 15 public int Get_Value() 16 { 17 return this.value; 18 } 19 20 public void Set_Value(int i) 21 { 22 this.value =i; 23 } 24 25 }
难点:存取数据库(像我这种学C#的脑袋就是转不过弯来)
环境:android17,javaEEIDE(eclipse的一个版本)
提示:如果喜欢的话,关注推荐哦!