在我目前的go项目(~5K LOC)中,我使用sqlite3作为我的底层数据库层,我使用gorm作为我的ORM引擎.其中一个模型是Platform具有PlatformType枚举类型的字段.这是一个代码片段来演示我的问题.
package main
import (
_ "github.com/jinzhu/gorm/dialects/sqlite"
"github.com/jinzhu/gorm"
"database/sql/driver"
"fmt"
)
/****************************\
Object Layer
\****************************/
// Platform ID
type PlatformID string
func (u *PlatformID) Scan(value interface{}) error { *u = PlatformID(value.([]byte)); return nil }
func (u PlatformID) Value() (driver.Value, error) { return string(u), nil }
// Platform Type enumeration
type PlatformType int
const (
PLATFORM_TYPE_NOT_A_VALUE PlatformType = iota
PLATFORM_TYPE_TYPE1
PLATFORM_TYPE_TYPE2
)
var types = [...]string {
"Not a type",
"Type1",
"Type2",
}
func (platform_type PlatformType) …Run Code Online (Sandbox Code Playgroud) 我正在浏览Ben Fortas"在10分钟内自学SQL"一书,并且它有灰色框警告:"子查询SELECT语句只能检索单个列.尝试返回多个列将返回错误."
事实上,对于RDMS来说,这通常是正确的吗?(请注意,如果这个答案是正确的,则所有数据库都不是这样).
为什么这个世界会是真的?这似乎是一种奇怪的语言限制.查询计算起来很昂贵,并且检索3列的工作在计算上与检索1的工作没有特别的不同(除非您的RDMS存储按列分组而不是按行分组的表).
我想在应用程序关闭时删除我的sqlite数据库.我尝试使用全局类并覆盖了onTerminate()方法.
public class AppController extends Application {
private static AppController mInstance;
public Context context(){
return mInstance.getApplicationContext();
}
@Override
public void onTerminate() {
context().deleteDatabase(DbHelper.DATABASE_NAME);
super.onTerminate();
}
}
Run Code Online (Sandbox Code Playgroud)
它不起作用
我有一个sqlite表,其中包含我想要删除的重复标题.这是我目前的发言.
DELETE FROM table WHERE FIELD = "FIELD"
Run Code Online (Sandbox Code Playgroud)
执行此语句时,将删除整个表.
我使用以下示例代码,并希望以某种方式获取sqlite3数据库的列名称:
using System;
using System.Data.SQLite;
namespace Program
{
class Program
{
static void Main(string[] args)
{
Program stuff = new Program();
stuff.DoStuff();
Console.Read();
}
private void DoStuff()
{
SQLiteConnection.CreateFile("Database.sqlite");
SQLiteConnection con = new SQLiteConnection("Data Source=Database.sqlite;Version=3;");
con.Open();
string sql = "create table 'member' ('account_id' text not null unique, 'account_name' text not null);";
SQLiteCommand command = new SQLiteCommand(sql, con);
command.ExecuteNonQuery();
sql = "insert into member ('account_id', 'account_name') values ('0', '1');";
command = new SQLiteCommand(sql, con);
sql = "PRAGMA table_info('member');";
command = new …Run Code Online (Sandbox Code Playgroud) 我目前正在上大学的课程项目,涉及一个测验,该测验将所有背景数据存储在数据库中。通过添加外键,我试图找到一种方法来合并两个表之间的外键数据。例如,users表存储用户数据及其用户ID。数据表将存储有关测验级别等信息以及该特定用户ID。插入数据时如何从两个表中自动更新该信息?
该方法似乎不起作用,下面是一些代码。
difficulty= (1,)
users_id = (1,)
#values of variables
def users_level(db,cursor,difficulty,users_id):
cursor.execute("insert into Data (Level,UsersID) VALUES (?,?)",(difficulty),(users_id))
db.commit()
Run Code Online (Sandbox Code Playgroud)
然后出现错误:
cursor.execute("insert into Data (Level,UsersID) VALUES (?,?)",(difficulty),(check_id))
TypeError: function takes at most 2 arguments (3 given)
Run Code Online (Sandbox Code Playgroud)
有解决这个问题的方法吗?或者可能是一种更容易/更有效的方法,可以使用外键从其他表中自动增加ID /数据。谢谢。
编辑 - 我解决了我所面临的问题,因为逗号是查询中的问题,但现在我没有得到所需的输出,即当我向数据库添加新信息时,它不会显示(打印)在文本视图.你们可以检查printDatabase()函数中是否有错误(虽然我没有在log-cat监视器中收到错误).
package com.instinctcode.sqlitesample;
public class MainActivity extends AppCompatActivity {
EditText buckysInput;
TextView buckysText;
MyDBHandler dbHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buckysInput=(EditText)findViewById(R.id.buckysInput);
buckysText=(TextView)findViewById(R.id.buckysText);
dbHandler= new MyDBHandler(this,null,null,1);
printDatabase();
}
public void addButtonClicked(View view){
Products product=new Products(buckysInput.getText().toString());
dbHandler.addProduct(product);
printDatabase();
}
public void deleteButtonClicked(View view)
{
String inputText=buckysInput.getText().toString();
dbHandler.deleteProduct(inputText);
printDatabase();
}
public void printDatabase(View v){
String dbString =dbHandler.databaseToString();
buckysText.setText(dbString);
buckysInput.setText("");
}
}
public class Products {
private int _id;
private String _productname;
public Products(String productname) {
this._productname …Run Code Online (Sandbox Code Playgroud) 我找到了问题的原因,见下文!
简而言之,由于备份功能恢复了具有相同版本号的旧数据库方案,因此在我的SQLiteHelperClass中都没有调用onUpdate()或onCreate().
我遇到了一个我无法解决的奇怪问题.当我在模拟器中运行我的应用程序时,一切正常.当我在手机上将其作为apk-debug.apk运行时,一切正常,但当我尝试在手机上将其作为已签名的应用程序运行时,我收到此错误:
Error Code : 1 (SQLITE_ERROR)
Caused By : SQL(query) error or missing database.
(no such column: listId (code 1): , while compiling: SELECT * FROM mytable WHERE listId=100 ORDER BY id,name,conc ASC)
Run Code Online (Sandbox Code Playgroud)
如果我删除设置中的所有应用程序数据并重新运行应用程序,一切都在签名的应用程序版本中工作,尽管它最初是首次安装在手机上!
mytable是通过运行db.execSQL(DATABASE_CREATE_MY_TABLE)创建的:(列名是在其他地方设置的常量)
private static final String DATABASE_CREATE_MY_TABLE = "CREATE TABLE "
+ MY_TABLE + "("
+ ID + " INTEGER, "
+ LIST_ID + " INTEGER, "
+ NAME + " STRING, "
+ CONC + " REAL, "
+ "PRIMARY KEY (" + ID …Run Code Online (Sandbox Code Playgroud) 我正在将.net / c#应用程序转换为Qt。我不会每天使用Qt / C ++,所以请多多包涵。
该应用程序同时使用SQLite和MS SQL Server。建立连接后,由于两个数据存储的数据事务量都很高,因此它保持打开状态,并且我不想浪费时间打开和关闭事务之间的连接。
我的目标是创建可用于两种数据库类型的通用管理器类。当其中一个连接打开而没有另一个连接时,该类将按预期工作。但是,当我尝试同时建立到两者的连接时,会收到错误消息:
QSqlDatabasePrivate :: removeDatabase:连接'qt_sql_default_connection'仍在使用中,所有查询将停止工作。
QSqlDatabasePrivate :: addDatabase:重复的连接名称'qt_sql_default_connection',旧的连接已删除。
因此,我已经阅读了有关连接命名的信息。但是,随后我遇到了访问数据库的问题。我已经发布了没有连接命名的数据库管理器类的内容。我正在寻找有关如何以一种干净通用的方式处理此问题的建议。谢谢!
.h文件
#ifndef DATABASEMGR_H
#define DATABASEMGR_H
#include <QObject>
#include <QSqlDatabase>
#include <QVariant>
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QSqlRecord>
class DatabaseMgr : public QObject
{
public:
DatabaseMgr(const QString &databaseType, const QString &connectionString, QObject *parent = 0);
~DatabaseMgr();
QVariant ExecuteScalar(const QString &cmd);
bool ExecuteNonQuery(const QString &cmd);
bool IsOpen() const;
bool Connect();
bool Disconnect();
QSqlQueryModel *GetQueryModel(const QString &cmd);
QSqlQueryModel *GetQueryModel(const QString &cmd, const QMap<QString, QVariant> …Run Code Online (Sandbox Code Playgroud) 我正在为我的项目使用RealM,并且无法在其中保存具有嵌套类的类.我在android studio中收到以下错误.
RealmClass annotation does not support nested classes
Run Code Online (Sandbox Code Playgroud)
这就是我在做的事情:
public class Test extends RealmObject {
@SerializedName("1")
@Expose
private Leave leave;
@SerializedName("2")
@Expose
private Today today;
@SerializedName("3")
@Expose
private Vehicle cab;
@SerializedName("4")
Run Code Online (Sandbox Code Playgroud)
Realm的Gradle版本如下:
compile files('libs/realm-android-0.84.2.jar')
Run Code Online (Sandbox Code Playgroud)
任何帮助对我都非常有用.
sqlite ×10
android ×4
mysql ×2
python ×2
sql ×2
c# ×1
c++ ×1
database ×1
foreign-keys ×1
go ×1
java ×1
mobile ×1
orm ×1
postgresql ×1
qt ×1
realm ×1
sql-delete ×1
sql-server ×1
typeerror ×1