android应用程序开发过程中的空数据库
我已经在sqlite3上建立了一个完整的数据库,并将文件(复制粘贴)复制到我的项目的assets文件夹中。实际上,数据库文件夹是存在的。然而,当我试图通过代码访问数据库时,logcat说“表名”不存在 我在sqlite3中反复检查了我的数据库,上面提到的表中也有一些数据 这是主要活动:android应用程序开发过程中的空数据库,android,database,sqlite,Android,Database,Sqlite,我已经在sqlite3上建立了一个完整的数据库,并将文件(复制粘贴)复制到我的项目的assets文件夹中。实际上,数据库文件夹是存在的。然而,当我试图通过代码访问数据库时,logcat说“表名”不存在 我在sqlite3中反复检查了我的数据库,上面提到的表中也有一些数据 这是主要活动: package com.noura.luba; import android.app.Activity; import android.content.Intent; import android.os.Bun
package com.noura.luba;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
TextView forgotPass, createAcc;
Button loginButton;
EditText userID, pass;
LoginDataBaseAdapter loginDataBaseAdapter;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
loginDataBaseAdapter=new LoginDataBaseAdapter(this);
loginDataBaseAdapter=loginDataBaseAdapter.open();
forgotPass= (TextView)findViewById(R.id.forgotPasswordTextView);
createAcc= (TextView)findViewById(R.id.createAccountTextView);
loginButton= (Button)findViewById(R.id.loginButton);
userID=(EditText)findViewById(R.id.userIDEditText);
userID.setHint("UserID");
// pass=(EditText)findViewById(R.id.passwordEditText);
pass = ((EditText) findViewById(R.id.passwordEditText));
pass.setHint("Password");
pass.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
createAcc.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intentCreateAcc = new Intent(getApplicationContext(), CreateAccActivity.class);
startActivity(intentCreateAcc);
}
});
forgotPass.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intentForgotPass = new Intent(getApplicationContext(), ForgotPassActivity.class);
startActivity(intentForgotPass);
}
});
// loginButton.setOnClickListener(new View.OnClickListener() {
// public void onClick(View v) {
// String id=userID.getText().toString();
// Intent intentLogin = new Intent(getApplicationContext(), Home.class);
// intentLogin.putExtra("User_ID", id);
// startActivity(intentLogin);
// }
// });
loginButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String userName = userID.getText().toString();
String password = pass.getText().toString();
String storedPassword = loginDataBaseAdapter
.getSingleEntry(userName);
if (password.equals(storedPassword)) {
Toast.makeText(MainActivity.this, "Login Successful",
Toast.LENGTH_LONG).show();
Intent intentLogin = new Intent(
getApplicationContext(), Home.class);
intentLogin.putExtra("User_ID", userName);
startActivity(intentLogin);
} else {
Toast.makeText(MainActivity.this,
"User Name and Password do not match",
Toast.LENGTH_LONG).show();
}
}
});
}
/* public void LogIn(View V)
{
final Dialog dialog = new Dialog(MainActivity.this);
dialog.setContentView(R.layout.activity_main);
dialog.setTitle("LUBA LogIn");
final EditText userID=(EditText)dialog.findViewById(R.id.userIDEditText);
final EditText pass=(EditText)dialog.findViewById(R.id.passwordEditText);
Button login = (Button)dialog.findViewById(R.id.loginButton);
final TextView forgotPass=(TextView)dialog.findViewById(R.id.forgotPasswordTextView);
final TextView createAcc= (TextView)dialog.findViewById(R.id.createAccountTextView);
//Set On ClickListener
login.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String userName= userID.getText().toString();
String password=pass.getText().toString();
String storedPassword = loginDataBaseAdapter.getSingleEntry(userName);
if(password.equals(storedPassword))
{
Toast.makeText(MainActivity.this, "Login Successful", Toast.LENGTH_LONG).show();
Intent intentLogin = new Intent(getApplicationContext(), Home.class);
intentLogin.putExtra("User_ID", userName);
startActivity(intentLogin);
}
else
{
Toast.makeText(MainActivity.this, "User Name and Password do not match", Toast.LENGTH_LONG).show();
}
}
});
dialog.show();
}
*/
protected void onDestroy() {
super.onDestroy();
loginDataBaseAdapter.close();
}
}
这是尝试访问数据库的活动:
package com.noura.luba;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.widget.Toast;
public class LoginDataBaseAdapter {
static final String DATABASE_NAME = "seniorLUBA";
static final int DATABASE_VERSION = 1;
public static final int NAME_COLUMN = 1;
public SQLiteDatabase db;
private final Context context;
private DataBaseHelper dbHelper;
public LoginDataBaseAdapter(Context _context)
{
context = _context;
dbHelper = new DataBaseHelper(context);
}
public LoginDataBaseAdapter open() throws SQLException
{
db=dbHelper.getWritableDatabase();
return this;
}
public void close()
{
db.close();
}
public SQLiteDatabase getDatabaseInstance()
{
return db;
}
public void insertEntry(String password)
{
ContentValues newValues = new ContentValues();
newValues.put("StdPass", password);
db.insert("student", null, newValues);
Toast.makeText(context, "User Info Saved", Toast.LENGTH_LONG).show();
}
public int deleteEntry(String UserName)
{
String where="StdId="+UserName;
int numberOFEntriesDeleted = db.delete("student", where, new String[]{UserName});
Toast.makeText(context, "Number of Entry Deleted Successfully : " +numberOFEntriesDeleted, Toast.LENGTH_LONG).show();
return numberOFEntriesDeleted;
}
public String getSingleEntry(String userName)
{
Cursor cursor=db.query("student", null, "StdID="+userName, new String[]{userName}, null, null, null);
if(cursor.getCount()<1)
return "DOES NOT EXIST";
cursor.moveToFirst();
String password= cursor.getString(cursor.getColumnIndex("StdPass"));
return password;
}
public String getSecretInfo(String SecretInfo){
Cursor cursor=db.query("student", null, "StdID="+SecretInfo, new String[]{SecretInfo}, null, null, null);
if(cursor.getCount()<1)
return "Does Not Exist";
else return SecretInfo;
}
public void updateEntry(String userName, String password)
{
ContentValues updatedValues = new ContentValues();
updatedValues.put("StdID", userName);
updatedValues.put("StdPass", password);
String where="StdID="+userName;
db.update("student", updatedValues, where, new String[]{userName});
}
}
这是logcat:
11-16 22:36:29.076: W/ApplicationPackageManager(28412): getCSCPackageItemText()
11-16 22:36:29.116: E/MoreInfoHPW_ViewGroup(28412): Parent view is not a TextView
11-16 22:36:29.246: I/Adreno-EGL(28412): <qeglDrvAPI_eglInitialize:410>: EGL 1.4 QUALCOMM build: ()
11-16 22:36:29.246: I/Adreno-EGL(28412): OpenGL ES Shader Compiler Version: E031.24.00.07
11-16 22:36:29.246: I/Adreno-EGL(28412): Build Date: 01/22/14 Wed
11-16 22:36:29.246: I/Adreno-EGL(28412): Local Branch: base_au149_adreno_au169_patches
11-16 22:36:29.246: I/Adreno-EGL(28412): Remote Branch:
11-16 22:36:29.246: I/Adreno-EGL(28412): Local Patches:
11-16 22:36:29.246: I/Adreno-EGL(28412): Reconstruct Branch:
11-16 22:36:29.296: D/OpenGLRenderer(28412): Enabling debug mode 0
11-16 22:36:42.636: E/SQLiteLog(28412): (1) no such table: student
11-16 22:36:42.636: D/AndroidRuntime(28412): Shutting down VM
11-16 22:36:42.636: W/dalvikvm(28412): threadid=1: thread exiting with uncaught exception (group=0x41e66da0)
11-16 22:36:42.646: E/AndroidRuntime(28412): FATAL EXCEPTION: main
11-16 22:36:42.646: E/AndroidRuntime(28412): Process: com.noura.luba, PID: 28412
11-16 22:36:42.646: E/AndroidRuntime(28412): android.database.sqlite.SQLiteException: no such table: student (code 1): , while compiling: SELECT * FROM student WHERE StdID=20121400
11-16 22:36:42.646: E/AndroidRuntime(28412): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
11-16 22:36:42.646: E/AndroidRuntime(28412): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1121)
11-16 22:36:42.646: E/AndroidRuntime(28412): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:694)
11-16 22:36:42.646: E/AndroidRuntime(28412): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
11-16 22:36:42.646: E/AndroidRuntime(28412): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
11-16 22:36:42.646: E/AndroidRuntime(28412): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
11-16 22:36:42.646: E/AndroidRuntime(28412): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
11-16 22:36:42.646: E/AndroidRuntime(28412): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1436)
11-16 22:36:42.646: E/AndroidRuntime(28412): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1283)
11-16 22:36:42.646: E/AndroidRuntime(28412): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1154)
11-16 22:36:42.646: E/AndroidRuntime(28412): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1322)
11-16 22:36:42.646: E/AndroidRuntime(28412): at com.noura.luba.LoginDataBaseAdapter.getSingleEntry(LoginDataBaseAdapter.java:70)
11-16 22:36:42.646: E/AndroidRuntime(28412): at com.noura.luba.MainActivity$3.onClick(MainActivity.java:80)
11-16 22:36:42.646: E/AndroidRuntime(28412): at android.view.View.performClick(View.java:4626)
11-16 22:36:42.646: E/AndroidRuntime(28412): at android.view.View$PerformClick.run(View.java:19293)
11-16 22:36:42.646: E/AndroidRuntime(28412): at android.os.Handler.handleCallback(Handler.java:733)
11-16 22:36:42.646: E/AndroidRuntime(28412): at android.os.Handler.dispatchMessage(Handler.java:95)
11-16 22:36:42.646: E/AndroidRuntime(28412): at android.os.Looper.loop(Looper.java:157)
11-16 22:36:42.646: E/AndroidRuntime(28412): at android.app.ActivityThread.main(ActivityThread.java:5293)
11-16 22:36:42.646: E/AndroidRuntime(28412): at java.lang.reflect.Method.invokeNative(Native Method)
11-16 22:36:42.646: E/AndroidRuntime(28412): at java.lang.reflect.Method.invoke(Method.java:515)
11-16 22:36:42.646: E/AndroidRuntime(28412): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
11-16 22:36:42.646: E/AndroidRuntime(28412): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
11-16 22:36:42.646: E/AndroidRuntime(28412): at dalvik.system.NativeStart.main(Native Method)
11-16 22:36:43.866: I/Process(28412): Sending signal. PID: 28412 SIG: 9
解决方案是在表student的名称中添加空格
package com.noura.luba;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.widget.Toast;
public class LoginDataBaseAdapter {
static final String DATABASE_NAME = "seniorLUBA.db";
static final int DATABASE_VERSION = 1;
public static final int NAME_COLUMN = 1;
public SQLiteDatabase db;
private final Context context;
private DataBaseHelper dbHelper;
public LoginDataBaseAdapter(Context _context)
{
context = _context;
dbHelper = new DataBaseHelper(context);
}
public LoginDataBaseAdapter open() throws SQLException
{
db=dbHelper.getWritableDatabase();
return this;
}
public void close()
{
db.close();
}
public SQLiteDatabase getDatabaseInstance()
{
return db;
}
public void insertEntry(String password)
{
ContentValues newValues = new ContentValues();
newValues.put("StdPass", password);
db.insert("student ", null, newValues);
Toast.makeText(context, "User Info Saved", Toast.LENGTH_LONG).show();
}
public int deleteEntry(String UserName)
{
String where="StdId="+UserName;
int numberOFEntriesDeleted = db.delete("student ", where, new String[]{UserName});
Toast.makeText(context, "Number of Entry Deleted Successfully : " +numberOFEntriesDeleted, Toast.LENGTH_LONG).show();
return numberOFEntriesDeleted;
}
public String getSingleEntry(String userName)
{
Cursor cursor=db.query("student ", null, "StdID="+userName, new String[]{userName}, null, null, null);
if(cursor.getCount()<1)
return "DOES NOT EXIST";
cursor.moveToFirst();
String password= cursor.getString(cursor.getColumnIndex("StdPass"));
return password;
}
public String getSecretInfo(String SecretInfo){
Cursor cursor=db.query("student ", null, "StdID="+SecretInfo, new String[]{SecretInfo}, null, null, null);
if(cursor.getCount()<1)
return "Does Not Exist";
else return SecretInfo;
}
public void updateEntry(String userName, String password)
{
ContentValues updatedValues = new ContentValues();
updatedValues.put("StdID", userName);
updatedValues.put("StdPass", password);
String where="StdID="+userName;
db.update("student ", updatedValues, where, new String[]{userName});
}
}
包com.noura.luba;
导入android.content.ContentValues;
导入android.content.Context;
导入android.database.Cursor;
导入android.database.SQLException;
导入android.database.sqlite.SQLiteDatabase;
导入android.widget.Toast;
公共类后勤数据库适配器{
静态最终字符串数据库\u NAME=“seniorLUBA.db”;
静态最终int数据库_版本=1;
公共静态final int NAME_COLUMN=1;
公共数据库数据库;
私人最终语境;
私有数据库助手dbHelper;
公共登录数据库适配器(上下文_上下文)
{
上下文=_上下文;
dbHelper=新数据库助手(上下文);
}
public LoginDataBaseAdapter open()引发SQLException
{
db=dbHelper.getWritableDatabase();
归还这个;
}
公众假期结束()
{
db.close();
}
公共SQLiteDatabase getDatabaseInstance()
{
返回分贝;
}
public void insertEntry(字符串密码)
{
ContentValues newValues=新ContentValues();
newValues.put(“StdPass”,密码);
db.插入(“学生”,空,新值);
Toast.makeText(上下文,“用户信息已保存”,Toast.LENGTH_LONG.show();
}
public int deleteEntry(字符串用户名)
{
字符串,其中=“StdId=”+用户名;
int numberofentriesdelected=db.delete(“学生”,其中,新字符串[]{UserName});
Toast.makeText(上下文,“成功删除的条目数:“+numberofentriesdelected,Toast.LENGTH_LONG).show();
已删除的返回编号;
}
公共字符串getSingleEntry(字符串用户名)
{
Cursor Cursor=db.query(“student”,null,“StdID=“+userName,新字符串[]{userName},null,null,null);
if(cursor.getCount()请发布一些您试图从资产文件夹复制数据库的代码。@bachu我已将其添加到问题中,请检查您通过命令行查询时得到的结果。?选择*来自学生;我获得该表以前输入的所有数据database@bachu显然,表名在en处有一个空格d、 …这就是它找不到它的原因我解决了表格找不到的问题,但是我遇到了另一个问题…但是我无法理解日志,请你检查一下好吗?我将在下面添加它
11-18 01:27:04.235: W/KeyCharacterMap(427): No keyboard for id 0
11-18 01:27:04.235: W/KeyCharacterMap(427): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
11-18 01:27:15.595: D/AndroidRuntime(427): Shutting down VM
11-18 01:27:15.595: W/dalvikvm(427): threadid=1: thread exiting with uncaught exception (group=0x40015560)
11-18 01:27:15.615: E/AndroidRuntime(427): FATAL EXCEPTION: main
11-18 01:27:15.615: E/AndroidRuntime(427): android.database.sqlite.SQLiteException: bind or column index out of range: handle 0x2ff2a0
11-18 01:27:15.615: E/AndroidRuntime(427): at android.database.sqlite.SQLiteProgram.native_bind_string(Native Method)
11-18 01:27:15.615: E/AndroidRuntime(427): at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:244)
11-18 01:27:15.615: E/AndroidRuntime(427): at android.database.sqlite.SQLiteQuery.bindString(SQLiteQuery.java:185)
11-18 01:27:15.615: E/AndroidRuntime(427): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:48)
11-18 01:27:15.615: E/AndroidRuntime(427): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1356)
11-18 01:27:15.615: E/AndroidRuntime(427): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1235)
11-18 01:27:15.615: E/AndroidRuntime(427): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1189)
11-18 01:27:15.615: E/AndroidRuntime(427): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1271)
11-18 01:27:15.615: E/AndroidRuntime(427): at com.noura.luba.LoginDataBaseAdapter.getSingleEntry(LoginDataBaseAdapter.java:70)
11-18 01:27:15.615: E/AndroidRuntime(427): at com.noura.luba.MainActivity$3.onClick(MainActivity.java:80)
11-18 01:27:15.615: E/AndroidRuntime(427): at android.view.View.performClick(View.java:2485)
11-18 01:27:15.615: E/AndroidRuntime(427): at android.view.View$PerformClick.run(View.java:9080)
11-18 01:27:15.615: E/AndroidRuntime(427): at android.os.Handler.handleCallback(Handler.java:587)
11-18 01:27:15.615: E/AndroidRuntime(427): at android.os.Handler.dispatchMessage(Handler.java:92)
11-18 01:27:15.615: E/AndroidRuntime(427): at android.os.Looper.loop(Looper.java:123)
11-18 01:27:15.615: E/AndroidRuntime(427): at android.app.ActivityThread.main(ActivityThread.java:3683)
11-18 01:27:15.615: E/AndroidRuntime(427): at java.lang.reflect.Method.invokeNative(Native Method)
11-18 01:27:15.615: E/AndroidRuntime(427): at java.lang.reflect.Method.invoke(Method.java:507)
11-18 01:27:15.615: E/AndroidRuntime(427): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
11-18 01:27:15.615: E/AndroidRuntime(427): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-18 01:27:15.615: E/AndroidRuntime(427): at dalvik.system.NativeStart.main(Native Method)
11-18 01:27:19.587: I/Process(427): Sending signal. PID: 427 SIG: 9
package com.noura.luba;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.widget.Toast;
public class LoginDataBaseAdapter {
static final String DATABASE_NAME = "seniorLUBA.db";
static final int DATABASE_VERSION = 1;
public static final int NAME_COLUMN = 1;
public SQLiteDatabase db;
private final Context context;
private DataBaseHelper dbHelper;
public LoginDataBaseAdapter(Context _context)
{
context = _context;
dbHelper = new DataBaseHelper(context);
}
public LoginDataBaseAdapter open() throws SQLException
{
db=dbHelper.getWritableDatabase();
return this;
}
public void close()
{
db.close();
}
public SQLiteDatabase getDatabaseInstance()
{
return db;
}
public void insertEntry(String password)
{
ContentValues newValues = new ContentValues();
newValues.put("StdPass", password);
db.insert("student ", null, newValues);
Toast.makeText(context, "User Info Saved", Toast.LENGTH_LONG).show();
}
public int deleteEntry(String UserName)
{
String where="StdId="+UserName;
int numberOFEntriesDeleted = db.delete("student ", where, new String[]{UserName});
Toast.makeText(context, "Number of Entry Deleted Successfully : " +numberOFEntriesDeleted, Toast.LENGTH_LONG).show();
return numberOFEntriesDeleted;
}
public String getSingleEntry(String userName)
{
Cursor cursor=db.query("student ", null, "StdID="+userName, new String[]{userName}, null, null, null);
if(cursor.getCount()<1)
return "DOES NOT EXIST";
cursor.moveToFirst();
String password= cursor.getString(cursor.getColumnIndex("StdPass"));
return password;
}
public String getSecretInfo(String SecretInfo){
Cursor cursor=db.query("student ", null, "StdID="+SecretInfo, new String[]{SecretInfo}, null, null, null);
if(cursor.getCount()<1)
return "Does Not Exist";
else return SecretInfo;
}
public void updateEntry(String userName, String password)
{
ContentValues updatedValues = new ContentValues();
updatedValues.put("StdID", userName);
updatedValues.put("StdPass", password);
String where="StdID="+userName;
db.update("student ", updatedValues, where, new String[]{userName});
}
}