看了很多别人写的安卓SQlite数据的操作代码,一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下!
建立一个类 并继承SQLiteOpenHelper
public class MySqliteHelper extends SQLiteOpenHelper { public MySqliteHelper(Context context) { super(context, "userdb.db", null, 3); // TODO Auto-generated constructor stub }
在oncreate()函数中建立表
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("create table users(id int primary key ,name text,pwd text)"); }
在方法中建立db文件
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table users(id integer primary key ,name text,pwd text)");
String sql = "insert into users values (0,0,0)"; //id 自增加
db.execSQL(sql);
}
整体代码:
package zcd.sqlite; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.widget.Toast; public class MySqliteHelper extends SQLiteOpenHelper { public MySqliteHelper(Context context) { super(context, "userdb.db", null, 3); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub db.execSQL("create table users(id integer primary key ,name text,pwd text)"); String sql = "insert into users values (0,0,0)"; //id 自增加 db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } }
然后在自己另外一个类中实现数据库表的增删改查。
我用的是Fragment,用Activity的话吧getActivity()去掉,换成this
实现了用户登录注册的功能!
http://www.cnblogs.com/xiaobo-Linux/(小波)赵存档QQ463431476 个人原创代码,不会的可以问我。
因为建立的数据库里面的数据没有判断数据的唯一性,所以在代码中实现了数据唯一性的判断。实现登录注册代码设计主要是在插入数据和查找数据的基础上做一个用户名是否存在,或者用户名和用户密码是否输入正确、输入错误的判断。
代码中定义一个标示判断 用户名是否存在int userflag 定义一个登录时判断用户和密码是否输入正确的标识int loginflag
注册时先判断用户名是否存在,userflag=1不存在此用户可以插入数据,userflag=0此用户存在跳出循环。
登录时loginflag为1用户登录成功,loginflag为0出现用户名或者密码输入错误的提示。
具体代码:
自己看,写的很详细了。
这里用了安卓5.0的沉浸式操作栏,可以忽略去掉,看主要的部分啊!!
package zcd.sqlite; import zcd.main.MainActivity; import zcd.netanything.R; import android.app.ActionBar; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class Userlogin extends Activity implements OnClickListener{ private MySqliteHelper helper; Button sign; Button reg; String name; String mypwd; private EditText user; private EditText pwd; int userflag ;//定义一个标示判断 用户名是否存在 int loginflag ;//登录时判断用户密码是否输入正确 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置状态栏颜色 getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); getWindow().setStatusBarColor(getResources().getColor(R.color.StatusBar)); //设置actionbar颜色 ActionBar actionBar = getActionBar(); actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0099CC"))); setContentView(R.layout.login); findViewById(R.id.button1).setOnClickListener(this); findViewById(R.id.button2).setOnClickListener(this); user = (EditText)findViewById(R.id.editText1); pwd=(EditText)findViewById(R.id.editText2); } public void insert() { helper = new MySqliteHelper(getApplicationContext()); SQLiteDatabase db=helper.getWritableDatabase(); //建立打开可读可写的数据库实例 //查询一下,是否用户名重复 String sql1 = "select * from users"; Cursor cursor = db.rawQuery(sql1, null); while (cursor.moveToNext()) { //第一列为id name = cursor.getString(1); //获取第2列的值,第一列的索引从0开始 mypwd = cursor.getString(2);//获取第3列的值 if((user.getText().toString().isEmpty())||(pwd.getText().toString().isEmpty())){ Toast.makeText(this, "不能为空,请重新输入", Toast.LENGTH_SHORT).show(); break; } userflag = 1; //不存在此用户 if((user.getText().toString().equals(name))) { Toast.makeText(this, "已存在此用户,请重新注册", Toast.LENGTH_SHORT).show(); userflag =0; break; } } if(userflag==1) { String sql2 = "insert into users(name,pwd) values ('"+user.getText().toString()+"','"+pwd.getText().toString()+"')"; db.execSQL(sql2); Toast.makeText(this, "注册成功!", Toast.LENGTH_SHORT).show(); } } public void select() { helper = new MySqliteHelper(getApplicationContext()); SQLiteDatabase db=helper.getWritableDatabase(); String sql = "select * from users"; Cursor cursor = db.rawQuery(sql, null); while (cursor.moveToNext()) { //第一列为id name = cursor.getString(1); //获取第2列的值,第一列的索引从0开始 mypwd = cursor.getString(2);//获取第3列的值 if((user.getText().toString().equals(name))&&(pwd.getText().toString().equals(mypwd))) { Toast.makeText(this, "用户验证成功", Toast.LENGTH_SHORT).show(); loginflag=1; //intent bundle传值 Intent MainActivity = new Intent(); MainActivity .setClass(this,MainActivity.class); Bundle bundle = new Bundle(); //该类用作携带数据 bundle.putString("user", user.getText().toString()); MainActivity.putExtras(bundle); //向MainActivity传值 this.startActivity(MainActivity); finish();//退出 } } if((user.getText().toString().isEmpty())||(pwd.getText().toString().isEmpty())){ Toast.makeText(this, "不能为空,请重新输入", Toast.LENGTH_SHORT).show(); } if(loginflag!=1) { Toast.makeText(this, "账号或者密码错误,请重新输入", Toast.LENGTH_SHORT).show(); } cursor.close(); db.close(); //Toast.makeText(this, "已经关闭数据库", Toast.LENGTH_SHORT).show(); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()){ case R.id.button1: select(); break; case R.id.button2: insert(); break; } } }
效果如下:
默认是插入0,0,0然后再插入数据后id号就自动增加了.
这是我的方法,不过写autoincreatement SQLite3不好使,如果你能够实现就回复一下吧!