简单的 Sqlite 助手
Simple Sqlite Helper
今天在这里学习SQlite的插入和查看插入的记录。单击保存按钮时出现错误 "Unfortunately AppName Was Stopped"。有人可以帮忙吗?
Sqlite 数据库助手
public class SqliteDatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME="reg";
public static final String TABLE_NAME="user_details";
public static final String COLUMN_ID="id";
public static final String COLUMN_NAME="name";
public static final String COLUMN_EMAIL="email";
public static final String COLUMN_UNAME="uname";
public static final String COLUMN_PASSWORD="pass";
public static final int DATABASE_VERSION=1;
public SqliteDatabaseHelper(Context context){
super(context,DATABASE_NAME,null,DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql="CREATE TABLE"+TABLE_NAME+"("+COLUMN_ID+"INTEGER PRIMARY KEY AUTO INCREMENT"+COLUMN_NAME+"VARCHAR"+COLUMN_EMAIL+"VARCHAR"
+COLUMN_UNAME+"VARCHAR"+COLUMN_PASSWORD+"VARCHAR);";
db.execSQL(sql);
Log.d("create","Table Created Sucessfully");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String sql="DROP TABLE IF EXIST user_details ";
db.execSQL(sql);
onCreate(db);
}
public boolean adduser(String name,String email,String uname,String pass)
{
SQLiteDatabase db=this.getWritableDatabase();
ContentValues contentValues=new ContentValues();
contentValues.put(COLUMN_NAME,name);
contentValues.put(COLUMN_EMAIL,email);
contentValues.put(COLUMN_UNAME,uname);
contentValues.put(COLUMN_PASSWORD,pass);
db.insert(TABLE_NAME, null, contentValues);
db.close();
return true;
}
public Cursor getuser(int id)
{
SQLiteDatabase db=this.getReadableDatabase();
String sql="SELECT * FROM user_details WHERE id="+id+"; ";
Cursor cursor= db.rawQuery(sql,null);
return cursor;
}
主要活动
enter code herepublic class MainActivity extends AppCompatActivity implements View.OnClickListener{
private EditText edname;
private EditText edemail;
private EditText eduname;
private EditText edpass;
private Button bsave;
private Button bview;
SqliteDatabaseHelper db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edname= (EditText) findViewById(R.id.fullname);
edemail= (EditText) findViewById(R.id.email);
eduname= (EditText) findViewById(R.id.uname);
edpass= (EditText) findViewById(R.id.pass);
bsave= (Button) findViewById(R.id.save);
bview= (Button) findViewById(R.id.view);
db= new SqliteDatabaseHelper(this);
bsave.setOnClickListener(this);
bview.setOnClickListener(this);
} @Override
public void onClick(View v) {
if (v==bsave){
insert();
}
if (v==bview){
Intent intent= new Intent(MainActivity.this,ViewUser.class);
startActivity(intent);
}
}
public void insert() {
String name=edname.getText().toString().trim();
String email=edemail.getText().toString().trim();
String unmae=eduname.getText().toString().trim();
String upass=edpass.getText().toString().trim();
db.adduser(name,email,unmae,upass);
Toast.makeText(this,"New REcords Inserted Sucessfully",Toast.LENGTH_LONG).show();
}
查看用户
public class ViewUser 扩展 AppCompatActivity {
private EditText dispFullname;
private EditText dispEmail;
private EditText dispUname;
private EditText dispass;
private EditText dispuid;
private Button show;
private Button home;
SqliteDatabaseHelper db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_user);
dispuid= (EditText) findViewById(R.id.uid);
dispFullname= (EditText) findViewById(R.id.fullnamedisp);
dispEmail= (EditText) findViewById(R.id.emaildisp);
dispUname= (EditText) findViewById(R.id.unamedisp);
dispass= (EditText) findViewById(R.id.passdisp);
show= (Button) findViewById(R.id.show);
home= (Button) findViewById(R.id.Home);
db= new SqliteDatabaseHelper(this);
show.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showuser(Integer.parseInt(dispuid.getText().toString().trim()));
}
});
home.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent= new Intent(ViewUser.this,MainActivity.class);
startActivity(intent);
}
});
}
private void showuser(int id) {
Cursor c =db.getuser(id);
c.moveToFirst();
{
if (c!=null){
dispuid.setText(c.getString(c.getColumnIndex(SqliteDatabaseHelper.COLUMN_ID)));
dispFullname.setText(c.getString(c.getColumnIndex(SqliteDatabaseHelper.COLUMN_NAME)));
dispEmail.setText(c.getString(c.getColumnIndex(SqliteDatabaseHelper.COLUMN_EMAIL)));
dispUname.setText(c.getString(c.getColumnIndex(SqliteDatabaseHelper.COLUMN_UNAME)));
dispass.setText(c.getString(c.getColumnIndex(SqliteDatabaseHelper.COLUMN_PASSWORD)));
}
}
}
日志:
09-21 19:38:52.261 16080-16080/com.example.karthi.sqlitedesign E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.karthi.sqlitedesign, PID: 16080
android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
at android.database.AbstractCursor.checkPosition(AbstractCursor.java:426)
at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
at com.example.karthi.sqlitedesign.ViewUser.showuser(ViewUser.java:63)
at com.example.karthi.sqlitedesign.ViewUser.access0(ViewUser.java:14)
at com.example.karthi.sqlitedesign.ViewUser.onClick(ViewUser.java:43)
at android.view.View.performClick(View.java:4661)
at android.view.View$PerformClick.run(View.java:19498)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5641)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1288)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1104)
at dalvik.system.NativeStart.main(Native Method)
09-21 19:39:17.715 17307-17407/? D/show﹕ read firstrelease/release_text from assets
09-21 19:39:42.500 17785-17997/? D/show﹕ read firstrelease/release_text from assets
09-21 19:39:55.252 18211-18293/? D/show﹕ read firstrelease/release_text from assets
你需要写 create table 命令,像这样用双引号括起空格..
String sql="CREATE TABLE "+TABLE_NAME+"("+COLUMN_ID+" INTEGER PRIMARY KEY AUTO INCREMENT "+COLUMN_NAME+" VARCHAR "+COLUMN_EMAIL+" 变量 "
+COLUMN_UNAME+" VARCHAR "+COLUMN_PASSWORD+" VARCHAR);";
问题来了
android.database.sqlite.SQLiteException: near "TABLEuser_details": syntax error (code 1): , while compiling: CREATE TABLEuser_details(idINTEGER PRIMARY KEY AUTO INCREMENTnameVARCHARemailVARCHARunameVARCHARpassVARCHAR);
在您的 create table 语句中替换为您在列名
之间缺少的 space 和 ','
String sql="CREATE TABLE "+TABLE_NAME+"("+COLUMN_ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"+COLUMN_NAME+" TEXT,"+COLUMN_EMAIL+" TEXT,"
+COLUMN_UNAME+" TEXT,"+COLUMN_PASSWORD+" TEXT);";
这个字符串
CREATE TABLEuser_details(idINTEGER PRIMARY KEY AUTO INCREMENTnameVARCHARemailVARCHARunameVARCHARpassVARCHAR);
需要看起来像这样
CREATE TABLE user_details(id INTEGER PRIMARY KEY AUTO INCREMENT, name VARCHAR, email VARCHAR, uname VARCHAR, pass VARCHAR);
你的SQLite字符串是错误的,你需要在里面添加空格和逗号,像这样:
String sql="CREATE TABLE "+TABLE_NAME+" ("+COLUMN_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+COLUMN_NAME+" VARCHAR, "+COLUMN_EMAIL+" VARCHAR, "
+COLUMN_UNAME+" VARCHAR, "+COLUMN_PASSWORD+" VARCHAR);";
编辑
不要分开 AUTOINCREMENT
致谢 Opiatefuchs @karthickYadav
您缺少 Sqlite
CREATE TABLE 语句。
你有什么错
- 使用
AUTOINCREMENT
代替AUTO INCREMENT
- 使用
TEXT
代替 VARCHAR
。
在创建数据库之前请阅读这篇文章Android SQLite Database Tutorial
和
SQLiteDatabase
虚拟示例
String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_TAXONOMY + "("
+ KEY_ID + " INTEGER PRIMARY KEY , " + KEY_TAXONOMY_CODE + " TEXT, "
+ KEY_DISPLAY_NAME+" TEXT )";
db.execSQL(CREATE_CONTACTS_TABLE);
编辑
String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_NAME + "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_NAME + " TEXT, "+ COLUMN_EMAIL +"TEXT," + COLUMN_UNAME + "TEXT," + COLUMN_PASSWORD +" TEXT )"; db.execSQL(CREATE_CONTACTS_TABLE);
今天在这里学习SQlite的插入和查看插入的记录。单击保存按钮时出现错误 "Unfortunately AppName Was Stopped"。有人可以帮忙吗?
Sqlite 数据库助手
public class SqliteDatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME="reg";
public static final String TABLE_NAME="user_details";
public static final String COLUMN_ID="id";
public static final String COLUMN_NAME="name";
public static final String COLUMN_EMAIL="email";
public static final String COLUMN_UNAME="uname";
public static final String COLUMN_PASSWORD="pass";
public static final int DATABASE_VERSION=1;
public SqliteDatabaseHelper(Context context){
super(context,DATABASE_NAME,null,DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql="CREATE TABLE"+TABLE_NAME+"("+COLUMN_ID+"INTEGER PRIMARY KEY AUTO INCREMENT"+COLUMN_NAME+"VARCHAR"+COLUMN_EMAIL+"VARCHAR"
+COLUMN_UNAME+"VARCHAR"+COLUMN_PASSWORD+"VARCHAR);";
db.execSQL(sql);
Log.d("create","Table Created Sucessfully");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String sql="DROP TABLE IF EXIST user_details ";
db.execSQL(sql);
onCreate(db);
}
public boolean adduser(String name,String email,String uname,String pass)
{
SQLiteDatabase db=this.getWritableDatabase();
ContentValues contentValues=new ContentValues();
contentValues.put(COLUMN_NAME,name);
contentValues.put(COLUMN_EMAIL,email);
contentValues.put(COLUMN_UNAME,uname);
contentValues.put(COLUMN_PASSWORD,pass);
db.insert(TABLE_NAME, null, contentValues);
db.close();
return true;
}
public Cursor getuser(int id)
{
SQLiteDatabase db=this.getReadableDatabase();
String sql="SELECT * FROM user_details WHERE id="+id+"; ";
Cursor cursor= db.rawQuery(sql,null);
return cursor;
}
主要活动
enter code herepublic class MainActivity extends AppCompatActivity implements View.OnClickListener{
private EditText edname;
private EditText edemail;
private EditText eduname;
private EditText edpass;
private Button bsave;
private Button bview;
SqliteDatabaseHelper db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edname= (EditText) findViewById(R.id.fullname);
edemail= (EditText) findViewById(R.id.email);
eduname= (EditText) findViewById(R.id.uname);
edpass= (EditText) findViewById(R.id.pass);
bsave= (Button) findViewById(R.id.save);
bview= (Button) findViewById(R.id.view);
db= new SqliteDatabaseHelper(this);
bsave.setOnClickListener(this);
bview.setOnClickListener(this);
} @Override
public void onClick(View v) {
if (v==bsave){
insert();
}
if (v==bview){
Intent intent= new Intent(MainActivity.this,ViewUser.class);
startActivity(intent);
}
}
public void insert() {
String name=edname.getText().toString().trim();
String email=edemail.getText().toString().trim();
String unmae=eduname.getText().toString().trim();
String upass=edpass.getText().toString().trim();
db.adduser(name,email,unmae,upass);
Toast.makeText(this,"New REcords Inserted Sucessfully",Toast.LENGTH_LONG).show();
}
查看用户
public class ViewUser 扩展 AppCompatActivity {
private EditText dispFullname;
private EditText dispEmail;
private EditText dispUname;
private EditText dispass;
private EditText dispuid;
private Button show;
private Button home;
SqliteDatabaseHelper db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_user);
dispuid= (EditText) findViewById(R.id.uid);
dispFullname= (EditText) findViewById(R.id.fullnamedisp);
dispEmail= (EditText) findViewById(R.id.emaildisp);
dispUname= (EditText) findViewById(R.id.unamedisp);
dispass= (EditText) findViewById(R.id.passdisp);
show= (Button) findViewById(R.id.show);
home= (Button) findViewById(R.id.Home);
db= new SqliteDatabaseHelper(this);
show.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showuser(Integer.parseInt(dispuid.getText().toString().trim()));
}
});
home.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent= new Intent(ViewUser.this,MainActivity.class);
startActivity(intent);
}
});
}
private void showuser(int id) {
Cursor c =db.getuser(id);
c.moveToFirst();
{
if (c!=null){
dispuid.setText(c.getString(c.getColumnIndex(SqliteDatabaseHelper.COLUMN_ID)));
dispFullname.setText(c.getString(c.getColumnIndex(SqliteDatabaseHelper.COLUMN_NAME)));
dispEmail.setText(c.getString(c.getColumnIndex(SqliteDatabaseHelper.COLUMN_EMAIL)));
dispUname.setText(c.getString(c.getColumnIndex(SqliteDatabaseHelper.COLUMN_UNAME)));
dispass.setText(c.getString(c.getColumnIndex(SqliteDatabaseHelper.COLUMN_PASSWORD)));
}
}
}
日志:
09-21 19:38:52.261 16080-16080/com.example.karthi.sqlitedesign E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.karthi.sqlitedesign, PID: 16080
android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
at android.database.AbstractCursor.checkPosition(AbstractCursor.java:426)
at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
at com.example.karthi.sqlitedesign.ViewUser.showuser(ViewUser.java:63)
at com.example.karthi.sqlitedesign.ViewUser.access0(ViewUser.java:14)
at com.example.karthi.sqlitedesign.ViewUser.onClick(ViewUser.java:43)
at android.view.View.performClick(View.java:4661)
at android.view.View$PerformClick.run(View.java:19498)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5641)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1288)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1104)
at dalvik.system.NativeStart.main(Native Method)
09-21 19:39:17.715 17307-17407/? D/show﹕ read firstrelease/release_text from assets
09-21 19:39:42.500 17785-17997/? D/show﹕ read firstrelease/release_text from assets
09-21 19:39:55.252 18211-18293/? D/show﹕ read firstrelease/release_text from assets
你需要写 create table 命令,像这样用双引号括起空格.. String sql="CREATE TABLE "+TABLE_NAME+"("+COLUMN_ID+" INTEGER PRIMARY KEY AUTO INCREMENT "+COLUMN_NAME+" VARCHAR "+COLUMN_EMAIL+" 变量 " +COLUMN_UNAME+" VARCHAR "+COLUMN_PASSWORD+" VARCHAR);";
问题来了
android.database.sqlite.SQLiteException: near "TABLEuser_details": syntax error (code 1): , while compiling: CREATE TABLEuser_details(idINTEGER PRIMARY KEY AUTO INCREMENTnameVARCHARemailVARCHARunameVARCHARpassVARCHAR);
在您的 create table 语句中替换为您在列名
之间缺少的 space 和 ','String sql="CREATE TABLE "+TABLE_NAME+"("+COLUMN_ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"+COLUMN_NAME+" TEXT,"+COLUMN_EMAIL+" TEXT,"
+COLUMN_UNAME+" TEXT,"+COLUMN_PASSWORD+" TEXT);";
这个字符串
CREATE TABLEuser_details(idINTEGER PRIMARY KEY AUTO INCREMENTnameVARCHARemailVARCHARunameVARCHARpassVARCHAR);
需要看起来像这样
CREATE TABLE user_details(id INTEGER PRIMARY KEY AUTO INCREMENT, name VARCHAR, email VARCHAR, uname VARCHAR, pass VARCHAR);
你的SQLite字符串是错误的,你需要在里面添加空格和逗号,像这样:
String sql="CREATE TABLE "+TABLE_NAME+" ("+COLUMN_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+COLUMN_NAME+" VARCHAR, "+COLUMN_EMAIL+" VARCHAR, "
+COLUMN_UNAME+" VARCHAR, "+COLUMN_PASSWORD+" VARCHAR);";
编辑
不要分开 AUTOINCREMENT
致谢 Opiatefuchs @karthickYadav
您缺少 Sqlite
CREATE TABLE 语句。
你有什么错
- 使用
AUTOINCREMENT
代替AUTO INCREMENT
- 使用
TEXT
代替VARCHAR
。
在创建数据库之前请阅读这篇文章Android SQLite Database Tutorial 和 SQLiteDatabase
虚拟示例
String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_TAXONOMY + "("
+ KEY_ID + " INTEGER PRIMARY KEY , " + KEY_TAXONOMY_CODE + " TEXT, "
+ KEY_DISPLAY_NAME+" TEXT )";
db.execSQL(CREATE_CONTACTS_TABLE);
编辑
String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_NAME + "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_NAME + " TEXT, "+ COLUMN_EMAIL +"TEXT," + COLUMN_UNAME + "TEXT," + COLUMN_PASSWORD +" TEXT )"; db.execSQL(CREATE_CONTACTS_TABLE);