GVKun编程网logo

android.database.sqlite.SQLiteException:没有这样的表:server_preferences(代码1)(没有有效的sql server 2012功能来执行此操作)

12

如果您想了解android.database.sqlite.SQLiteException:没有这样的表:server_preferences和代码1的知识,那么本篇文章将是您的不二之选。我们将深入剖

如果您想了解android.database.sqlite.SQLiteException:没有这样的表:server_preferences代码1的知识,那么本篇文章将是您的不二之选。我们将深入剖析android.database.sqlite.SQLiteException:没有这样的表:server_preferences的各个方面,并为您解答代码1的疑在这篇文章中,我们将为您介绍android.database.sqlite.SQLiteException:没有这样的表:server_preferences的相关知识,同时也会详细的解释代码1的运用方法,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

android.database.sqlite.SQLiteException:没有这样的表:server_preferences(代码1)(没有有效的sql server 2012功能来执行此操作)

android.database.sqlite.SQLiteException:没有这样的表:server_preferences(代码1)(没有有效的sql server 2012功能来执行此操作)

如何解决android.database.sqlite.SQLiteException:没有这样的表:server_preferences(代码1)?

我正在 Playstore 上传我的应用程序,此错误来自预发布报告。以下是完整的堆栈跟踪:

致命异常:后台任务 android.database.sqlite.sqliteException: no such table: server_preferences (code 1): ,编译时:SELECT * FROM server_preferences WHERE (name = ?) 在 android.database.sqlite.sqliteConnection.nativePrepareStatement(本机方法) 在 android.database.sqlite.sqliteConnection.acquirePreparedStatement(sqliteConnection.java:1118) 在 android.database.sqlite.sqliteConnection.prepare(sqliteConnection.java:691) 在 android.database.sqlite.sqliteSession.prepare(sqliteSession.java:588) 在 android.database.sqlite.sqliteProgram.(sqliteProgram.java:58) 在 android.database.sqlite.sqliteQuery.(sqliteQuery.java:37) 在 android.database.sqlite.sqliteDirectCursorDriver.query(sqliteDirectCursorDriver.java:44) 在 android.database.sqlite.sqliteDatabase.rawQueryWithFactory(sqliteDatabase.java:1436) 在 android.database.sqlite.sqliteQueryBuilder.query(sqliteQueryBuilder.java:400) 在 android.database.sqlite.sqliteQueryBuilder.query(sqliteQueryBuilder.java:294) 在 com.google.android.gm.provider.MailEngine.getServerPrefsCursor(MailEngine.java:1462) 在 com.google.android.gm.provider.MailEngine.getCursorForReplyFromDefaultAddress(MailEngine.java:1466) 在 com.google.android.gm.provider.MailEngine.notifyInitializationComplete(MailEngine.java:1371) 在 com.google.android.gm.provider.MailEngine.access$1900(MailEngine.java:135) 在 com.google.android.gm.provider.MailEngine$5.run(MailEngine.java:1291) 在 android.os.Handler.handleCallback(Handler.java:730) 在 android.os.Handler.dispatchMessage(Handler.java:92) 在 android.os.Looper.loop(Looper.java:176) 在 android.os.HandlerThread.run(HandlerThread.java:61)

我在应用程序中没有名为 server_preference 的表。 请让我知道可以为此做些什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

Android SQLite – openOrCreateDatabase()nullPointerException

Android SQLite – openOrCreateDatabase()nullPointerException

我有以下DBAdapter(这不是全部,但它是相关的代码).

private final String DATABASE_NAME = "seller";
private final String DATABASE_MY_TABLE = "sellertable";
private final Integer DATABASE_VERSION = 1
private final String CREATE_TABLE = "CREATE TABLE seller ........";

public DBAdapter( Context c )
{
    this.context = c;
    DBHelper = new DatabaseHelper(context);
}

private static class DatabaseHelper extends sqliteOpenHelper
{
    public DatabaseHelper( Context context )
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate( sqliteDatabase db )
    {
        MyLog.d("Creating Tables");
        try
        {
            db.execsql(CREATE_TABLE);
        }
        catch (Exception e)
        {
            e.printstacktrace();
        }
    }

    @Override
    public void onUpgrade( sqliteDatabase db, int oldVersion, int newVersion )
    {
        MyLog.w("Upgrading database from version " + oldVersion + " to " + newVersion + ". Destroying old data.");
        db.execsql("DROP TABLE IF EXISTS " + DATABASE_MY_TABLE);
        onCreate(db);
    }
}

// Opens the database
public DBAdapter open() throws sqlException
{
    db = DBHelper.getWritableDatabase();
    return this;
}

当我尝试db.open()时,我得到以下内容:

FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to instantiate application com.company.app.MyApp: java.lang.NullPointerException
    at android.app.LoadedApk.makeApplication(LoadedApk.java:466)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3260)
    at android.app.ActivityThread.access$2200(ActivityThread.java:117)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:969)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:130)
    at android.app.ActivityThread.main(ActivityThread.java:3683)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
    at android.content.Contextwrapper.openorCreateDatabase(Contextwrapper.java:203)
    at android.database.sqlite.sqliteOpenHelper.getWritableDatabase(sqliteOpenHelper.java:118)
    at com.company.app.DBAdapter.open(DBAdapter.java:74)
    at com.company.app.MyApp.<init>(MyApp.java:106)
    at java.lang.class.newInstanceImpl(Native Method)
    at java.lang.class.newInstance(Class.java:1409)
    at android.app.Instrumentation.newApplication(Instrumentation.java:957)
    at android.app.Instrumentation.newApplication(Instrumentation.java:942)
    at android.app.LoadedApk.makeApplication(LoadedApk.java:461)

它似乎得到某种异常,与帮助者决定是否创建或更新数据库有关…

解决方法:

尝试在数据库名称的末尾添加类似“.db”的扩展名.

Android SQLite数据库SQLiteDatabaseLockedException处理

Android SQLite数据库SQLiteDatabaseLockedException处理

Android项目中因为涉及到多线程访问数据库SQLite而出现SQLiteDatabaseLockedException异常,经过查找资料终于找到解决方法:避免数据库接口被多个线程同时访问。

具体措施有:

1、数据库接口采取单例模式

[java] view plain copy

<EMBED id=ZeroClipboardMovie_1 name=ZeroClipboardMovie_1 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer height=18 width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=1&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">

  1. public synchronized void insert(InstallModel info) {  

  2.     while (db.isDbLockedByOtherThreads() || db.isDbLockedByCurrentThread()){  

  3.         Log.w(Tag, "insert === db is locked by other or current threads!");  

  4.         try {  

  5.             Thread.sleep(10);  

  6.         } catch (InterruptedException e) {  

  7.             e.printStackTrace();  

  8.         }  

  9.     }  

  10.       

  11.     db.execSQL("INSERT INTO install(pkg, pay, install, inApply, flag, attributes, id, introduction, name, smallPicUrl," +  

  12.             "bigPicUrl, categoryId, sourceUrl, pid, cid, built_in, applyMode) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?, ?)",  

  13.             new Object[] {"" + info.getPkg(), "" + info.getPay(), "" + info.getInstall(), "" + info.getIsApply(), "" + info.getFlag(),  

  14.             "" + info.getAttributes(), "" + info.getId(), "" + info.getIntroduction(), "" + info.getName(), "" + info.getSmallPicUrl(),   

  15.             "" + info.getBigPicUrl(), "" + info.getCategoryId(), "" + info.getSourceUrl(), "" + info.getPid(), "" + info.getCid(),   

  16.             "" + info.getBuilt_in(), "" + info.getApplyMode()  

  17.             });  

  18. }  




相关资料:http://www.myexception.cn/sql/419392.html

http://developer.android.com/reference/android/database/sqlite/SQLiteDatabaseLockedException.html

  1. boolean android.database.sqlite.SQLiteDatabase.isDbLockedByOtherThreads();  

  2.   

  3. boolean android.database.sqlite.SQLiteDatabase.isDbLockedByCurrentThread();  



3、光是给接口加锁还不行,因为 synchronized 关键词只能锁定程序块,但是我们真正需要锁的是数据库,好在SQLiteDataBase提供了两个接口,用于检测数据库当时是否被锁定:

所以我们在访问之前还需要增加判断,如果数据库当前被锁定,就等待一会再去访问。

[java] view plain copy

<EMBED id=ZeroClipboardMovie_3 name=ZeroClipboardMovie_3 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer height=18 width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=3&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">

  1. public class DBOpenHelper extends SQLiteOpenHelper {  

  2.       

  3.     private static final String DB_FILENAME = "llhome.db";  

  4.     private static final int DB_VERSION = 1;  

  5.     private static DBOpenHelper helper = null;  

  6.       

  7.     public static DBOpenHelper getInstance(Context context){  

  8.         if (helper == null){  

  9.             synchronized (DBOpenHelper.class) {  

  10.                 if (helper == null){  

  11.                     DBOpenHelper temp = new DBOpenHelper(context);  

  12.                     helper = temp;  

  13.                 }  

  14.             }  

  15.         }  

  16.           

  17.         return helper;  

  18.     }  


2、所有访问数据的接口用synchronized加锁:

[java] view plain copy

<EMBED id=ZeroClipboardMovie_2 name=ZeroClipboardMovie_2 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer height=18 width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=2&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">

Android SQLite数据库:SQLiteDiskIOException:磁盘I / O错误(代码1802)

Android SQLite数据库:SQLiteDiskIOException:磁盘I / O错误(代码1802)

我有一个使用sqlite数据库的应用程序.

我在应用程序启动时创建了数据库,调用了RSSDatabase的构造函数,工作正常.单击一个按钮后,我从RSS提要中获取数据并在AsyncTask中插入数据,但是当我调用db.insert(“posts”,“”,values)时会导致错误,这是logcat的错误消息:

02-04 21:43:22.050  19154-19357/com.example.aolreader E/sqliteLog﹕ (1802) os_unix.c:30026: (2) stat(/data/data/com.example.aolreader/databases/RSS_db) -
02-04 21:43:22.050  19154-19357/com.example.aolreader E/sqliteLog﹕ (1802) statement aborts at 13: [INSERT INTO posts(author,title,date,description,link) VALUES (?,?,?)]
02-04 21:43:22.050  19154-19357/com.example.aolreader E/sqliteDatabase﹕ Error inserting author=AP title=UK admits ‘limited’ role in Operation Blue Star  date=Tue,4 Feb 2014 19:03:27 +0530 description=
    The British government had recently ordered an urgent investigation into possible U.K. involvement in the raid.
    link=http://www.thehindu.com/news/international/world/uk-admits-limited-role-in-operation-blue-star/article5653316.ece
    android.database.sqlite.sqlitediskIOException: disk I/O error (code 1802)
            at android.database.sqlite.sqliteConnection.nativeExecuteForLastInsertedRowId(Native Method)
            at android.database.sqlite.sqliteConnection.executeForLastInsertedRowId(sqliteConnection.java:782)
            at android.database.sqlite.sqliteSession.executeForLastInsertedRowId(sqliteSession.java:788)
            at android.database.sqlite.sqliteStatement.executeInsert(sqliteStatement.java:86)
            at android.database.sqlite.sqliteDatabase.insertWithOnConflict(sqliteDatabase.java:1469)
            at android.database.sqlite.sqliteDatabase.insert(sqliteDatabase.java:1339)
            at com.example.aolreader.RSSDatabase.insertPost(RSSDatabase.java:44)
            at com.example.aolreader.XMLRSSActivity.parseNews(XMLRSSActivity.java:386)
            at com.example.aolreader.XMLRSSActivity.access$000(XMLRSSActivity.java:33)
            at com.example.aolreader.XMLRSSActivity$ParseTask.doInBackground(XMLRSSActivity.java:171)
            at com.example.aolreader.XMLRSSActivity$ParseTask.doInBackground(XMLRSSActivity.java:134)
            at android.os.AsyncTask$2.call(AsyncTask.java:288)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:841)

我搜索了这个错误,发现它可能是由同一时间访问数据库的不同线程引起的,但我查看了我的代码,发现没有多线程有竞争条件的情况.

这是我的数据库助手类:

class RSSDatabaseHelper extends sqliteOpenHelper {

    private static final String createPostTablesql = "create table posts (" +
            "_id integer primary key autoincrement," +
            "title varchar," +
            "author varchar," +
            "link varchar," +
            "description varchar," +
            "date varchar)";

    private Context context;

    public RSSDatabaseHelper(Context c,String name,sqliteDatabase.CursorFactory factory,int version) {
        super(c,name,factory,version);
        context = c;
    }

    @Override
    public void onCreate(sqliteDatabase db) {
        db.execsql(createPostTablesql);
    }

    @Override
    public void onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) {
        db.execsql("drop table if exists posts");
        onCreate(db);
    }
}

我的数据库类:

public class RSSDatabase {
    private static RSSDatabase instance;

    private sqliteDatabase db;
    private RSSDatabaseHelper dbHelper;

    private RSSDatabase(Context c) {
        dbHelper = new RSSDatabaseHelper(c,"RSS_db",null,1);
        db = dbHelper.getWritableDatabase();
    }

    public static synchronized RSSDatabase getDatabaseInstance(Context c) {
        if (instance == null) {
            instance = new RSSDatabase(c);
        }
        return instance;
    }

    public void insertPost(Post post) {
        ContentValues values = new ContentValues();
        values.put("title",post.title);
        values.put("author",post.author);
        values.put("link",post.link);
        values.put("description",post.description);
        values.put("date",post.date);
        db.insert("posts","",values);
    }
}

谁能解释一下这个问题呢?

提前致谢!

解决方法

当应用程序启动时,调用RSSDatabase的构造函数,UI Thread会锁定您的数据库
db = dbHelper.getWritableDatabase(); // In the constructor

现在从Async任务(不同的线程),您正在尝试在由UI线程锁定的数据库中插入数据.这将引发异常,因为第一次写入对db有锁定.

Android Studio:android.database.sqlite.SQLiteException:无此类列:正在准备(代码1):

Android Studio:android.database.sqlite.SQLiteException:无此类列:正在准备(代码1):

如何解决Android Studio:android.database.sqlite.SQLiteException:无此类列:正在准备(代码1):?

我必须根据状态获取数据,并将其放入适当的Recycler View。我尝试说的任何内容都没有列或存在无法识别的标记。老实说,我不知道出什么问题了,请帮助! 订单合同 `public ArrayList getorderListByStatus(long vendorId,String status){ 打开(); ArrayListordersList = new ArrayList();

    Cursor cursor = mDb.query(OrdersEntry.TABLE_NAME,mAllColumns,OrdersEntry.COL_vendOR_ID + " =? AND " + OrdersEntry.COL_STATUS + "=" + status,new String[]{String.valueOf(vendorId)},null,null);

    if (cursor != null) {
        cursor.movetoFirst();
        while (!cursor.isAfterLast()) {
            Order order = cursorToOrder(cursor,cursor.getLong(cursor.getColumnIndex(OrdersEntry.COL_CUSTOMER_ID)),vendorId);
            ordersList.add(order);
            if (cursor.isLast() || cursor.isClosed())
                break;
            else
                cursor.movetoNext();
        }
    }
    cursor.close();
    mDb.close();
    close();
    return ordersList;
}

OrdersFragment

public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_orders,container,false);


    sharedPref = getActivity().getSharedPreferences("KeyData",Context.MODE_PRIVATE);

    //first recycler
    pendingRecyclerView = v.findViewById(R.id.pendingRecycler);
    pendingRecyclerView.setHasFixedSize(true);
    mLayoutManager = new linearlayoutmanager(getContext()); //use linear layout on cards
    pendingRecyclerView.setLayoutManager(mLayoutManager);
    pendingOrderAdapter = new OrderAdapter(getContext(),this);
    pendingOrderAdapter.submitList(getorderList("Preparing"));
    recyclerAdapter = pendingOrderAdapter;//specify adapter and pass in item list
    pendingRecyclerView.setAdapter(recyclerAdapter);

    //second recycler
    completedRecyclerView = v.findViewById(R.id.completedRecycler);
    completedRecyclerView.setHasFixedSize(true);
    mLayoutManager2 = new linearlayoutmanager(getContext());
    completedRecyclerView.setLayoutManager(mLayoutManager2);
    CompletedOrderAdapter = new OrderAdapter(getContext(),this);
    CompletedOrderAdapter.submitList(getorderList("Completed"));
    recyclerAdapter2 = CompletedOrderAdapter;
    completedRecyclerView.setAdapter(recyclerAdapter2);


    return v;
}
//need two arrayList,orderPending and orderComplete
//get order list from order database
public ArrayList<Order> getorderList(String status) {

    String email = sharedPref.getString("Email","");

    vendorsContract vc = new vendorsContract(getContext());
    OrdersContract oc = new OrdersContract(getContext());

    vendor vendor = vc.getvendorIdByEmail(email);
    Order order = oc.getorderById(vendor.getM_Id());
    order.getM_Status();
   switch (status)
   {
       case "Preparing":
           pendingOrderList = oc.getorderListByStatus(vendor.getM_Id(),status);
           return pendingOrderList;
       case "Completed":
           completedOrderList = oc.getorderListByStatus(vendor.getM_Id(),status);
           return completedOrderList;
   }
   return null;
}

Error Message

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

关于android.database.sqlite.SQLiteException:没有这样的表:server_preferences代码1的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Android SQLite – openOrCreateDatabase()nullPointerException、Android SQLite数据库SQLiteDatabaseLockedException处理、Android SQLite数据库:SQLiteDiskIOException:磁盘I / O错误(代码1802)、Android Studio:android.database.sqlite.SQLiteException:无此类列:正在准备(代码1):等相关内容,可以在本站寻找。

本文标签: