import sqlite3
conn = sqlite3.connect(r"D:\aaa.db")
Run Code Online (Sandbox Code Playgroud)
有没有办法自动创建db文件,如果它连接到它时它不存在?
谢谢
我是Android上的新手,我正在开发一个简单的应用程序来获得一些基本的体验.我的应用程序非常简单,包括广播接收器和一些活动.这两个组件都使用单个数据库,因此从理论上讲,两者都可能同时尝试访问数据库.
目前我只是在每次需要时实例化db对象(它是一个SQLite数据库帮助程序类),并执行所需的操作:查询,插入等.
从我在这里和其他一些文档中读到的,这有一个问题是在同时访问db的情况下获得"db locked"异常,所以更好的方法是拥有这个db对象的单个实例所以所有组件始终使用相同的数据库连接.
以上推理是否正确?那么一个单身人士会成为一个足够好的解决方案吗?我知道一些纯粹主义者可能反对它,但请注意,这是一个相当简单的应用程序,所以我可以负担得起在其他情况下我不会做的事情.
否则,更好的选择是什么?我已经阅读过有关使用内容提供商的内容,但这对此来说太过分了,除此之外我对与其他活动共享数据不感兴趣.我确实读过这篇文章,发现它很有帮助.
在我的应用程序中,我从库中上传图像,我想将此图像存储在SQLite数据库中.如何在数据库中存储位图?我正在将位图转换为字符串并将其保存在数据库中.从数据库中检索它时,我无法将该字符串分配给ImageView,因为它是一个字符串.
Imageupload12 .java:
public class Imageupload12 extends Activity {
Button buttonLoadImage;
ImageView targetImage;
int i = 0;
Database database = new Database(this);
String i1;
String img;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main5);
buttonLoadImage = (Button) findViewById(R.id.loadimage);
targetImage = (ImageView) findViewById(R.id.targetimage);
Bundle b = getIntent().getExtras();
if (b != null) {
img = b.getString("image");
targetImage2.setImageURI("image");
//i am getting error as i cant assign string to imageview.
}
buttonLoadImage.setOnClickListener(new Button.OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub …Run Code Online (Sandbox Code Playgroud) 我的应用程序被移植到.NET核心将使用新的EF核心与SQLite.我想在首次运行应用程序时自动创建数据库和表结构.根据EF核心文档,这是使用手动命令完成的
dotnet ef migrations add MyFirstMigration
dotnet ef database update
Run Code Online (Sandbox Code Playgroud)
但是,我不希望最终用户输入这些命令,并且希望让应用程序创建并设置数据库以供首次使用.对于EF 6,有类似的功能
Database.SetInitializer(new CreateDatabaseIfNotExists<MyContext>());
Run Code Online (Sandbox Code Playgroud)
但在EF Core中,这些似乎并不存在.我找不到任何关于EF核心等效的示例或文档,并且在EF核心文档的缺失功能列表中没有提到.我已经设置了模型类,所以我可以编写一些代码来基于模型初始化数据库,但如果框架自动执行此操作,则会更容易.我不想自动构建模型或迁移,只需在新数据库上创建表结构.
我在这里遗漏了什么或者在EF核心中缺少自动创建表功能吗?
我有一个例程,每秒多次对SQLite数据库运行不同的查询.过了一会儿,我会得到错误
"android.database.CursorWindowAllocationException: - Cursor window allocation of 2048 kb failed. # Open Cursors = " 出现在LogCat中.
我有应用程序日志内存使用情况,实际上当使用率达到一定限度时,我收到此错误,暗示它用完了.我的直觉告诉我,每次运行查询时数据库引擎都在创建一个新缓冲区(CursorWindow),即使我将.close()标记为游标,垃圾收集器也SQLiteDatabase.releaseMemory()不足以释放内存.我认为解决方案可能在于"强制"数据库始终写入相同的缓冲区,而不是创建新的缓冲区,但我一直无法找到这样做的方法.我已经尝试实例化我自己的CursorWindow,并尝试将其设置为和SQLiteCursor无济于事.
有任何想法吗?
编辑:来自@GrahamBorland的示例代码请求:
public static CursorWindow cursorWindow = new CursorWindow("cursorWindow");
public static SQLiteCursor sqlCursor;
public static void getItemsVisibleArea(GeoPoint mapCenter, int latSpan, int lonSpan) {
query = "SELECT * FROM Items"; //would be more complex in real code
sqlCursor = (SQLiteCursor)db.rawQuery(query, null);
sqlCursor.setWindow(cursorWindow);
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望能够.setWindow()在提供新查询之前,CursorWindow每次获取新数据时都将数据放入相同的数据中.
我必须使用Django的ORM将8000多条记录插入到SQLite数据库中.此操作需要每分钟大约运行一次cronjob.
目前我正在使用for循环迭代所有项目,然后逐个插入它们.
例:
for item in items:
entry = Entry(a1=item.a1, a2=item.a2)
entry.save()
Run Code Online (Sandbox Code Playgroud)
这样做的有效方法是什么?
编辑:两种插入方法之间的一点比较.
没有commit_manually装饰器(11245条记录):
nox@noxdevel marinetraffic]$ time python manage.py insrec
real 1m50.288s
user 0m6.710s
sys 0m23.445s
Run Code Online (Sandbox Code Playgroud)
使用commit_manually decorator(11245条记录):
[nox@noxdevel marinetraffic]$ time python manage.py insrec
real 0m18.464s
user 0m5.433s
sys 0m10.163s
Run Code Online (Sandbox Code Playgroud)
注意:除了插入数据库之外,测试脚本还执行一些其他操作(下载ZIP文件,从ZIP存档中提取XML文件,解析XML文件),因此执行所需的时间不一定代表插入所需的时间记录.
SQLite中表名的字符组合有效是什么?字母数字(AZ,az和0-9)的所有组合是否构成有效名称?
Ex. CREATE TABLE 123abc(...);
Run Code Online (Sandbox Code Playgroud)
那些字母数字与破折号" - "和句号"."的组合怎么样也有效?
Ex. CREATE TABLE 123abc.txt(...);
Ex. CREATE TABLE 123abc-ABC.txt(...);
Run Code Online (Sandbox Code Playgroud)
谢谢.
SQLITE
我有两个表"Source"和"Destination"具有相同的字段.ID和COUNTRY虽然它们都有其他不常见的字段.
我需要将Source.Country值复制到Destination.Country,其中连接是ID
对于我的生活,我不能让Sqlite这样做.
在SQL Server等中,这是一个非常简单的任务.
想法?
我试图使用这个语句,SELECT TOP 1 * FROM tasks WHERE dueDate < ?1 ORDER BY dueDate DESC但SQLite说near "1": syntax error.怎么了?
我收到以下错误,我不知道它为什么会发生.我想知道是否还有其他人可以对这个问题有所了解.
12-25 22:52:50.252: E/AndroidRuntime(813): Caused by: java.lang.IllegalArgumentException: Cannot bind argument at index 1 because the index is out of range. The statement has 0 parameters.
12-25 22:52:50.252: E/AndroidRuntime(813): at android.database.sqlite.SQLiteProgram.bind(SQLiteProgram.java:212)
12-25 22:52:50.252: E/AndroidRuntime(813): at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:166)
12-25 22:52:50.252: E/AndroidRuntime(813): at android.database.sqlite.SQLiteProgram.bindAllArgsAsStrings(SQLiteProgram.java:200)
12-25 22:52:50.252: E/AndroidRuntime(813): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
12-25 22:52:50.252: E/AndroidRuntime(813): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
12-25 22:52:50.252: E/AndroidRuntime(813): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1161)
12-25 22:52:50.252: E/AndroidRuntime(813): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1032)
12-25 22:52:50.252: E/AndroidRuntime(813): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1200)
Run Code Online (Sandbox Code Playgroud)
代码在这里:
public Player getPlayer(String name) {
SQLiteDatabase db = this.getReadableDatabase();
String[] projection = {
PlayerEntry.COLUMN_NAME_PLAYER_NAME, …Run Code Online (Sandbox Code Playgroud)